1 struct Rec 2 { 3 int dig, ind; 4 }; 5 bool cmp(struct Rec a,struct Rec b) 6 { 7 if(a.dig!=b.dig) 8 return a.dig<b.dig; 9 return a.ind<b.ind; 10 } 11 class Solution { 12 public: 13 bool containsNearbyDuplicate(vector<int>& nums, int k) { 14 int len=nums.size(),i; 15 struct Rec rec[len]; 16 for(i=0;i<len;i++) 17 { 18 rec[i].dig=nums[i]; 19 rec[i].ind=i; 20 } 21 sort(rec,rec+len,cmp); 22 for(i=0;i<len-1;i++) 23 { 24 if(rec[i].dig==rec[i+1].dig&&rec[i+1].ind-rec[i].ind<=k) 25 return 1; 26 } 27 return 0; 28 } 29 };
1、需要注意题意中相差 at most k ,而不是exactly k
2、将数字和下标放到结构体中,按数字第一关键字,下标第二关键字排序,依次比较每个数字和它后一个数字是否相等,下标的范围是否在K即可