LeetCode * 565. Array Nesting

来源:互联网 发布:巅峰阁安卓软件 编辑:程序博客网 时间:2024/06/05 17:10


class Solution {public:     int arrayNesting(vector<int>& a) {        size_t maxsize = 0;        for (int i = 0; i < a.size(); i++) {            size_t size = 0;            for (int k = i; a[k] >= 0; size++) {                int ak = a[k];                a[k] = -1; // mark a[k] as visited;                k = ak;            }            maxsize = max(maxsize, size);        }        return maxsize;    }};



int arrayNesting(vector<int>& nums){vector<int> S;int size = 0;int max_size = 0;int num = nums[0];bool flag;bool flag_m=true;for (int i = 0; i < nums.size(); i++){flag = true;num = nums[i];while (num < nums.size() && flag){num = nums[num];for (int j = 0; j < S.size(); j++){if (num == S[j]){flag = false;break;}}size++;S.push_back(num);}if (size > max_size)max_size = size; size = 0;S.clear();}return (max_size-1);}



我自己写的大部分都通过了,有一个时间超了,相比较的话还是时间复杂度太高了。

也忽略了题目中数组中的数的范围都在0~N之间这个条件。


本题必须要做之前已经出现的点不再考虑,因为这个每组数是一个循环,出现的点再考虑的话,无非是起点不一样,但是循环的数据数目还是一样的。如果出现的点再考虑的话,出现的结果和之前是一样的。