File tree Expand file tree Collapse file tree 1 file changed +29
-0
lines changed Expand file tree Collapse file tree 1 file changed +29
-0
lines changed Original file line number Diff line number Diff line change 1+ class  Solution :
2+     def  circularArrayLoop (self , nums : List [int ]) ->  bool :
3+         for  i  in  range (len (nums )):
4+             if  nums [i ] ==  0 :
5+                 continue 
6+             
7+             # if slow and fast pointers collide, then there exists a loop 
8+             slow  =  i 
9+             fast  =  self .index (nums , slow )
10+             while  nums [slow ] *  nums [fast ] >  0  and  nums [slow ] *  nums [self .index (nums , fast )] >  0 :
11+                 if  slow  ==  fast  and  fast  !=  self .index (nums , fast ):
12+                     return  True 
13+                 elif  slow  ==  fast  and  fast  ==  self .index (nums , fast ):
14+                     break 
15+                 slow  =  self .index (nums , slow )
16+                 fast  =  self .index (nums , self .index (nums , fast ))
17+                 
18+             # set path to all 0s since it doesn't work 
19+             runner  =  i 
20+             value  =  nums [runner ]
21+             while  nums [runner ] *  value  >  0 :
22+                 temp  =  self .index (nums , runner )
23+                 nums [runner ] =  0 
24+                 runner  =  temp 
25+         return  False 
26+             
27+     def  index (self , nums , index ):
28+         length  =  len (nums )
29+         return  (index  +  nums [index ] +  length ) %  length 
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments