leetcode-Contains Duplicate II-219

输入一个数组,求是否有abs(i-j)<=k,使得a[i]==a[j]

所以在判断两个元素是否相等时还要判断他们之间的距离,可以两重循环来做。

这里我用set<node>自定义数据类型和比较函数,按元素值来排序,如果元素值相同按下标来排序,之后遍历一遍set<node>即可。时间应该是set排序时间

 1 class Solution {
 2 private:
 3     struct node{
 4         int x,indx;
 5         node(int x=0,int indx=0):x(x),indx(indx){}
 6         bool operator<(const node &n)const{
 7             if(x<n.x) return true;
 8             if(x==n.x) return indx<n.indx;
 9             return false;
10         }
11     };
12 public:
13     bool containsNearbyDuplicate(vector<int>& nums, int k) {
14         int len=nums.size();
15         if(len==0||len==1) return false;
16         set<node> s;
17         for(int i=0;i<len;i++){
18             node no(nums[i],i);
19             s.insert(no);
20         }
21         set<node>::iterator it=s.begin();
22         node no=*it;
23         it++;
24         for(;it!=s.end();it++){
25             if(it->x==no.x&&it->indx-no.indx<=k) return true;
26             //if(it->x!=no.x){
27                 no.x=it->x;
28                 no.indx=it->indx;
29             //}
30         }
31         return false;
32     }
33 };

 

posted @ 2016-09-02 13:20  0_summer  阅读(106)  评论(0)    收藏  举报