LeetCode 457. Circular Array Loop

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
bool circularArrayLoop(int* nums, int numsSize) {
    int* flag=(int*)calloc(numsSize, sizeof(int));
    int t=1;
   
    for(int i=0;i<numsSize;++i){
        if(flag[i]==0){
            flag[i]=t;
            int now=i;
            int index=nums[now]+now;
            bool isForward=(nums[now]>0)?true:false;
            index%=numsSize;
            if(index<0)index+=numsSize;
           
            while(!((nums[index]>0)^isForward)){
                if(flag[index]==t){
                    if(now==index){
                        break;
                    }
                    else{
                        free(flag);
                        return true;
                    }
                }
                else{
                    flag[index]=t;
                    now=index;
                    index=nums[now]+now;
                    index%=numsSize;
                    if(index<0)index+=numsSize;
                }
            }
            ++t;
        }
        else{
            continue;
        }
    }
    return false;
}



Leave a Reply

Your email address will not be published. Required fields are marked *