1368,Same Number

题目描述:给一个数组,如果数组中存在相同数字,且相同数字的距离小于给定值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;
    }

猜你喜欢

转载自blog.csdn.net/wenbooboo/article/details/80198355