• [leetcode-565-Array Nesting]


    A zero-indexed array A consisting of N different integers is given. The array contains all integers in the range [0, N - 1].

    Sets S[K] for 0 <= K < N are defined as follows:

    S[K] = { A[K], A[A[K]], A[A[A[K]]], ... }.

    Sets S[K] are finite for each K and should NOT contain duplicates.

    Write a function that given an array A consisting of N integers, return the size of the largest set S[K] for this array.

    Example 1:

    Input: A = [5,4,0,3,1,6,2]
    Output: 4
    Explanation: 
    A[0] = 5, A[1] = 4, A[2] = 0, A[3] = 3, A[4] = 1, A[5] = 6, A[6] = 2.
    One of the longest S[K]: S[0] = {A[0], A[5], A[6], A[2]} = {5, 6, 2, 0}

    Note:

    1. N is an integer within the range [1, 20,000].
    2. The elements of A are all distinct.
    3. Each element of array A is an integer within the range [0, N-1].

    思路:

    感觉类似于求集合的概念。根据给出的例子,可以发现,5 6 2 0这四个数字无论是从0开始还是从2开始,始终是这四个数字为一个集合,于是就可以用一个标记用来表示

    是否已经遍历过该数字,比如从0开始,依次找到A[0], A[5], A[6], A[2],将他们依次做标记,就可以避免重复遍历。

    int arrayNesting(vector<int>& nums)
    {
      int n = nums.size();
      vector<int>flags(n,false);
      int res =0;
      int num =0;
      for(int i =0;i<n;i++)
      {
        if(flags[i] == true)continue;
        num = 0;
        for(int j = i;flags[j]==false;)
        {
          num++;
          flags[j] = true;
          j = nums[j];
        }
        res = max(res,num);     
      }
      return res;
     }
  • 相关阅读:
    C#中 时间戳与普通时间格式的转换
    关于Litjson的简单使用
    Unity 前端开发积累 第二篇
    《大话数据结构》--- 第六章 树
    《大话数据结构》--- 第五章 串
    获取RDP连接中密码的方法
    CMD打包文件,解压文件
    泛微OA7.0下载7.1下载
    [ASP.NET]书店后台开发-模板页
    [JSP]用户注册
  • 原文地址:https://www.cnblogs.com/hellowooorld/p/6915293.html
Copyright © 2020-2023  润新知