具体思路:
有建设性的一道题,和自己之前想的一样,能否通过遍历打标记的方式来进行遍历;
结果可行,并且根据鸽群理论,得知死循环;
具体代码:
class Solution {
public:
bool circularArrayLoop(vector<int>& nums) {
for(int i=0;i<nums.size();i++){
if(nums[i]==nof)
continue;
if(check(nums, i))
return true;
}
return false;
}
bool check(vector<int>& nums,int index){
int cnt=1;
int len=nums.size();
int end=((nums[index]+index)%len+len)%len;
bool flag=nums[index]>0;
nums[index]=nof;
while(1){
if(end==index){
if(cnt>1)
return true;
else
return false;
}
if(cnt>len)
return false;
if(nums[end]==nof)
return false;
if(((nums[end]>0)^flag)==0){
int temp=((nums[end]+end)%len+len)%len;
//nums[end]=nof;
end=temp;
cnt++;
}else{
return false;
}
}
return true;
}
private:
const int nof=1010;
};