给一个数组,如果数组中存在相同数字,且相同数字的距离小于给定值k,输出YES,否则输出NO。
注意事项
输入的数组长度为n,保证n <= 100000。
数组元素的值为x,0 <= x <= 1e9。
输入的k满足 1 <= k < n。
您在真实的面试中是否遇到过这个题?
样例
给出 array = [1,2,3,1,5,9,3], k = 4, 返回 "YES"。
解释:
index为3的1和index为0的1距离为3,满足题意输出YES。
给出 array =[1,2,3,5,7,1,5,1,3], k = 4, 返回 "YES"。
解释:
index为7的1和index为5的1距离为2,满足题意。
解答:只需要用哈希表来存储数字即可,关键字为“数字”,键值为“下标”,遇见相同的数字计算距离即可,之后按照要求返回
1 class Solution { 2 public: 3 /** 4 * @param nums: the arrays 5 * @param k: the distance of the same number 6 * @return: the ans of this question 7 */ 8 string sameNumber(vector<int> &nums, int k) { 9 // Write your code here 10 unordered_map<int, int> m; 11 string s = "NO"; 12 for (int i = 0; i < nums.size(); i++) 13 { 14 if (m.find(nums[i]) != m.end()) 15 { 16 if (i - m[nums[i]] < k) 17 { 18 s = "YES"; 19 return s; 20 } 21 else 22 m[nums[i]] = i; 23 } 24 else 25 m[nums[i]] = i; 26 } 27 return s; 28 29