题目描述:给一个数组,如果数组中存在相同数字,且相同数字的距离小于给定值k
,输出true,否则输出false
例:给出 array = [1,2,3,1,5,9,3]
, k = 4
, 返回 true。
解释:index为0的1和index为3的1相距为3<4,返回true。
最low的方法两层循环来求解,算法复杂度高,但是通俗易懂,
换个角度我们可以定义一个Dictionary,将元素的值做key,索引做value,遍历数组看数组中的数是否在词典中存在,然后比较索引,代码如下:
public bool SameNumber2(int[] arr, int k) { if (arr == null || arr.Length <= k) return false; Dictionary<int, int> map = new Dictionary<int, int>(); int index; for (int i = 0; i < arr.Length; i++) { if (map.TryGetValue(arr[i], out index)) { if (i - index < k) return true; } else { map.Add(arr[i], i); } } return false; }