/*
* @lc app=leetcode id=457 lang=cpp
*
* [457] Circular Array Loop
*/
// @lc code=start
class Solution {
public:
bool circularArrayLoop(vector<int>& nums) {
int N = nums.size();
if(N < 2) return false;
int V[N];
int loc;
int cnt;
// forward
memset(V, 0, sizeof(V));
cnt = 0;
for(int i=0; i<N; i++){
if(V[i] == 0 && nums[i] > 0 ) {
cnt++;
loc = i;
while( V[loc] == 0 && nums[loc] > 0 ){
V[loc] = cnt;
loc = (loc + nums[loc]) % N;
}
if( nums[loc] < 0 || nums[loc]%N == 0 || V[i] != V[loc] ){
continue;
}
return true;
}
}
// backward
memset(V, 0, sizeof(V));
cnt = 0;
for(int i=0; i<N; i++){
if(V[i] == 0 && nums[i] < 0 ) {
loc = i;
cnt ++;
while( V[loc] == 0 && nums[loc] < 0 ){
V[loc] = cnt;
loc = (loc + nums[loc] + 1000*N) % N;
}
if( nums[loc] > 0 || (-nums[loc])%N == 0 || V[i] != V[loc] ){
continue;
}
return true;
}
}
return false;
}
};
// @lc code=end
No.256 - LeetCode[457] Circular Array Loop - 模拟题
最新推荐文章于 2024-09-21 10:02:17 发布