Code & Func
2017-12-10

第74天。

今天的题目是Contains Duplicate II:

Given an array of integers and an integer k, find out whether there are two distinct indices i and j in the array such that nums[i] = nums[j] and the absolute difference between i and j is at most k.

显然这道题目可以用两个循环去实现,但是这样会超时,效率不高。

这里是用Hash Table去做的,key存储nums[i],value存储i,这样我们用O(n)的时间就可以完成了。

1
bool containsNearbyDuplicate(vector<int>& nums, int k) {
2
unordered_map<int,int> m;
3
for(int i = 0;i < nums.size();i++) {
4
if (m.find(nums[i]) != m.end() && m[nums[i]] + k >= i) return true;
5
m[nums[i]] = i;
6
}
7
return false;
8
}

dicuss中的做法是用unordered_set去做的。

1
bool containsNearbyDuplicate(vector<int>& nums, int k)
2
{
3
unordered_set<int> s;
4
5
if (k <= 0) return false;
6
if (k >= nums.size()) k = nums.size() - 1;
7
8
for (int i = 0; i < nums.size(); i++)
9
{
10
if (i > k) s.erase(nums[i - k - 1]);
11
if (s.find(nums[i]) != s.end()) return true;
12
s.insert(nums[i]);
13
}
14
15
return false;
1 collapsed line
16
}
上一条动态