package algorithms; /* 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } */ /* * 首先判断链表中是否有环 思路是用两个指针,同时从链表的节点出发 * 一个走的慢,一个走的快 * 如果两个指针不能相遇则无环,否则有环 * * 如何找到环的入口? * 还是先…
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "stdafx.h" #include<iostream> #include<vector> #include<algorithm> #include<numeric> #include<list> #include<iterator> #inc…
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; */ class Solution { public: TreeNode* KthNode(TreeNode* pRoot, int k) { //中序递归     int count = 0;              if(co…
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null 1.找链表倒数第k个结点,输入一个链表,输出该链表中倒数第k个结点.第一个指针走(k-1)步,到达第k个节点,两个指针同时往后移动,当第一个结点到达末尾的时候,第二个结点所在位置就是倒数第k个节点了 2.原理有点像上面的,定义两个指针,一个是快指针每次走两步,一个是慢指针每次走一步,当两个相遇的时候,假设环的长度为n个结点,慢指针走x步,快指针走2x步,2x=x+kn ;x=kn; k暂时假定为1圈 ,也就是慢指针slow…
给定两个字符串 s 和 t,它们只包含小写字母.字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母.请找出在 t 中被添加的字母. 示例: 输入: s = "abcd" t = "abcde" 输出: e 解题思路:该题的解法和上一篇我们解决问题的思路一样,同样此题我们需要定义两个数组arr1和arr2分别存储字符串s和t每一个字符出现的次数,遍历统计字符串每一个字符出现的次数,最后遍历,找出arr1和arr2不相等,不相等的坐标存储的就是字符串t中添加…
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 例: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总和最小. 问题分析:首先判断传入数组arr是否为空,为空直接返回0,新建数组array,用来表示每一步走后的数字之和,接下来步骤见代码注释 public static int minPathSum(int[][] arr) {…
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 比如输入一个长度为9的数组{1,2.3.2,2.2.5,4.2}, 因为数组中数字2出现了5次,超过数组的长度的一半,因此输出2 一种办法是先把数组排序.那么超过一半的元素一定是数组最中间的元素. 另外一种办法比較抽象.设一个变量保存当前值.设一个次数,当前值与下一个值进行比較.假设相等,次数加一,假设不相等.次数减一.假设次数减到0了还是不相等,就把当前值替换掉. 代码例如以下: #include <stdio.h> #i…
[试题描述]定义一个函数,输入一个链表,判断链表是否存在环路,并找出回路起点 Circular linked list: A (corrupt) linked list in which a node's next pointer points to an earlier node, so as to make a loop in the linked listEXAMPLEInput: A -> B -> C -> D -> E -> C [the same C as ea…
返回本章节 返回作业目录 需求说明: 编写Java程序,在控制台中输入一个数字,要求定义方法实现找出能够整除该数字的所有数字. 实现思路: 定义方法findNums(),用于实现查找所有能够整除指定数字的所有数字. 根据需求说明要求,方法findNums()需要定义一个int类型的参数number,因此, 方法findNums()的方法签名如下: public static void findNums(int number) 由于要查找出所有能够整除指定数字的所有数字,需要从1开始查找直到指定数…
function FindWindowThroughWindowText(WindowText: string): THandle;var  hCurrentWindow: THandle;  cnt: Integer;  WindowTitle: array [0 .. 254] of Char;begin  Result := INVALID_HANDLE_VALUE; // 返回值预设为无效的句柄  hCurrentWindow := GetForegroundWindow; // 找出当…
寻找前后两项比值趋于 (√5+1)/2的广义Fibonacci数列 找到了一个帖子:这个帖子 //待补充…
// test14.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include<string> #include<cctype> #include <vector> #include<exception> #include <initializer_list> using namespace std; class Solution…
源程序代码: import java.util.Scanner; public class findmax { public static void main(String[] args) { // TODO 自动生成的方法存根 System.out.println("请输入要进行比较的数字个数:"); Scanner in=new Scanner(System.in); int k=in.nextInt(); while(k<=0) { System.out.println(&…
先讨论出现次数大于n/2的数字,如果这样的数字存在,那么这个数出现的次数大于其他数出现的次数的总和. 在数组A中,我们定义两个数据集合a1,a2.a1为出现次数大于n/2的数的集合,a2为其余数组成的集合.对于数组 A中元素a.b,假设a不等于b,那么有两种情况,分别为:a属于a1,b属于a2:a属于a2,b属于a2.对于这两种情况,如 果把a.b从数组A中去掉,集合a1的size依旧是大于a2的.按照这个思路,我们有如下代码: int m; ; for (auto num : nums) {…
#include <bits/stdc++.h> using namespace std; const int N = 1e6,INF = 0x3f3f3f3f; int a[N]; int n,x; void fun(int n) { int left = 0, right = n-1; while(left < right) { int ans=a[left] + a[right]; if(ans == x) { cout<<a[left]<<' '<&…
function getCount(str) { for(var code=32;code<128;code++){ var mych=String.fromCharCode(code); var count=0; for(var i=0;i<str.length;i++){ var ch=str.charAt(i); if(ch===mych){ count++; } } if(count>0){ console.log("字符"+mych+"出现了&qu…
1 #include<iostream> 2 #include<string> 3 #define MAX 100 4 using namespace std; 5 bool check(string str1,string str2) 6 { 7 bool flag = true; 8 for(int i=0; i<str1.length(); i++) 9 { 10 if(str1[i]!=str2[str1.length()-1-i]) 11 { 12 flag = f…
题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 题目地址 https://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4?tpId=13&tqId=11208&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 思路 第一步:判断是否存在环,用快慢指针,一个走一步,一个走两步…
一.题目 一个链表中包含环,请找出该链表的环的入口结点. 二.思路 方法一: 假设x为环前面的路程(黑色路程),a为环入口到相遇点的路程(蓝色路程,假设顺时针走), c为环的长度(蓝色+橙色路程). 定义一个快指针:Sslow=slow.next,一个慢指针:Sfast=fast.next 当快慢指针相遇的时候: 此时慢指针走的路程为Sslow = x + m * c + a  : 快指针走的路程为Sfast = x + n * c + a,则有:      2 Sslow = Sfast 2…
题目: 一个链表中包含环,请找出该链表的环的入口结点. 思路: 1.哈希表 遍历整个链表,并将链表结点存入哈希表中(这里我们使用容器set),如果遍历到某个链表结点已经在set中,那么该点即为环的入口结点: 2.两个指针 如果链表存在环,那么计算出环的长度n,然后准备两个指针pSlow,pFast,pFast先走n步,然后pSlow和pFase一块走,当两者相遇时,即为环的入口处: 3.改进 如果链表存在环,我们无需计算环的长度n,只需在相遇时,让一个指针在相遇点出发,另一个指针在链表首部出发,…
题目描述: 一个链表中包含环,请找出该链表的环的入口结点. 分析: 设置两个指针p1,p2, 两个指针都从链表的头部开始走,不过p1每次走一步,p2每次走两步. 直到相遇的时候,p2走的长度是p1的两倍. 此时让p2从头开始走,p1继续往下走,不过此时两指针都是一步一步走. 再次相遇的地点就是环的入口. 证明: 假设结点数一共有m个,环中的结点数有n个. 第一次相遇的时候,它们肯定是在环中相遇的,p1走了s1步,p2走了2*s1步. 那么此时它们在环中的位置是一样的,即(s1-(m-n))%n=…
题目描述 一个链表中包含环,请找出该链表的环的入口结点. [思路]根据set集合的不重复,遍历链表时遇到的第一个重复结点就是环的入口结点. /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } }; */ class Solution { public: ListNode* EntryNodeOfLoop(ListNode* pHead) { if(pHead =…
  题目描述:   给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null.   解题思路:   本题是一个比较典型的链表题目,难度适中.首先,对于大多人来说,看到这道题是比较开心的,因为判断一个链表是否存在环的方法,基本上大家都知道,就是快慢指针法,但是再仔细一看,本题除了判断是否有环之外,还要找到这个环的入口点,这就略有些复杂了.   具体思路如下:   第一步:确定一个链表是否有环.这一步就是快慢指针法,定义两个指针,同时从链表的头结点出发,快指针一次走两步,慢指针一次走…
题目描述: 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 思路分析: 这道题首先需要判断链表是否存在环,很快就能想到用快慢指针来判断. 由于快慢指针的相遇位置并不一定为链表环的入口结点,需要进一步判断.这里参考了一个博客 https://www.cnblogs.com/likeio/p/3593686.html ,由于快指针和慢指针相遇时,快指针一定比慢指针多走了n(n=1, 2, ...)个环,可以通过列对应关系得知,在已知有环的情况下,两个指针分别以头结点和相遇…
1 题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 2 思路和方法 这是一个典型的链表中查找环的问题,基本思路是,首先设置两个快慢指针slow和fast,并且快指针fast每次前进两步,慢指针slow每次前进一步,假定当相遇的时候,设慢指针在环中走了y步,设环之外的部分长为x,环的长度 为y+z,则快指针一共走了:x+b1∗(y+z)+y步,(b1​为快指针在环中走的圈数)慢指针一共走了:x+b2∗(y+z)+k步,(b2​为快指针在环中走的圈数)因为快指针…
题目描述: 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 题目分析: 从上图中可以看出,环的入口结点和其他结点的区别:环的入口结点是有两个指针指向的,其他结点除了头结点都是只有一个指针指向的, 使用断链法,在当前结点访问完毕后,断掉指向当前结点的指针.因此,最后一个被访问的结点一定是入口结点. 代码实现: /* public class ListNode { int val; ListNode next = null; ListNode(int val) { thi…
题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 思路一 迭代遍历链表,利用HashSet将每个结点添加到哈希表中,如果添加失败(重复遍历了这个结点即遇到环),输出该结点为环入口 实现 /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } */ import java.util.HashSet; public class…
题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 思路 第一步,用两个快慢指针找环中相汇点.分别用slow, fast指向链表头部,slow每次走一步,fast每次走二步,直到fast == slow找到在环中的相汇点.第二步,找环的入口.当fast == slow时,假设slow走过x个节点,则fast走过2x个节点.设环中有n个节点,因为fast比slow多走一圈(n个节点),所以有等式2x = n + x,可以推出n = x,即slow实际上走了一个环的…
​该题目来源于牛客网<剑指offer>专题. 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. Go语言实现: /** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ //哈希表 func detectCycle(head *ListNode) *ListNode { //用map的key来判断是否已经存在 m := make…
链表中环的入口结点 牛客网 剑指Offer 题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def EntryNodeOfLoop(self, pHead): if pHead == None: return None pSlow = pHead.next if pSlow…