给一个数组,如果数组中存在相同数字,且至少有两个相同数字的距离小于给定值k,输出YES,否则输出NO。
样例
样例1
输入: array = [1,2,3,1,5,9,3] 和 k = 4
输出: "YES"
解释:
index为3的1和index为0的1距离为3,满足题意输出YES。
样例2
输入: array = [1,2,3,5,7,1,5,1,3] 和 k = 4,
输出: "YES"
解释:
index为7的1和index为5的1距离为2,满足题意。
注意事项
输入的数组长度为n,保证n <= 100000。
数组元素的值为x,0 <= x <= 1e9。
输入的k满足 1 <= k < n。
题解:map记录每一个数据的位置,如果数据出现重复,且两者位置差小于k,则返回YES,如果不小于k,则将数据的位置替换为新的。最终若不返回YES,则必是NO
class Solution {
public:
/**
* @param nums: the arrays
* @param k: the distance of the same number
* @return: the ans of this question
*/
string sameNumber(vector<int> &nums, int k) {
// Write your code here
map<int,int> tmp;
for (int i = 0; i < nums.size(); i++) {
/* code */
if(tmp.count(nums[i]))
{
if(i-tmp[nums[i]]<k) return "YES";
}
tmp[nums[i]]=i;
}
return "NO";
}
};