输入一个数组,求是否有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 };