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 };

 

转载于:https://www.cnblogs.com/0summer/p/5833163.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值