lintcode 1368.相同数字

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

 

posted @ 2018-04-21 23:51  皇家大鹏鹏  阅读(440)  评论(0编辑  收藏  举报