Leetcode 457. Circular Array Loop

来源:互联网 发布:朝鲜战争 知乎 编辑:程序博客网 时间:2024/05/17 00:10

题目链接:  Leetcode 457. Circular Array Loop


第一次遇到用  slow/fast  指针来解决存在循环网络的问题,新奇。

心得:既然是写代码,机器处理数据,应该尽量从机器的角度去思考,而非以人的角度去思考:如果人自己解决它,那要机器干什么呢:)  


public class Solution {    public boolean circularArrayLoop(int[] nums) {    int  n = nums.length;    for(int i=0;i<n;i++){    if(nums[i]==0){    continue;    }    // slow fast pointers    int  j=i, k=getNext(j,nums);    while(nums[i]*nums[j]>0&&nums[i]*nums[k]>0&&nums[i]*nums[getNext(k,nums)]>0){    if(j==k){    //check for one element between loop    if(j==getNext(j,nums)){    break;    }    return true;    }    j = getNext(j,nums);    k = getNext(getNext(k,nums),nums);    }    // clean all the loop along the way    j = i;    int val = nums[i];    while(nums[j]*nums[i]>0){    nums[j] = 0;    j = getNext(j,nums);    }    }    return false;    }private int getNext(int j, int[] nums) {// TODO Auto-generated method stubint n = nums.length;return j+nums[j]>0?(j+nums[j])%n:n+((j+nums[j])%n);}}


0 0