• leetcode1539 第k个缺失的正整数


    思路1:

    暴力枚举。

    实现1:

     1 class Solution
     2 {
     3 public:
     4     int findKthPositive(vector<int>& arr, int k)
     5     {
     6         int n = arr.size();
     7         vector<int> cnt(2001, 0);
     8         for (int i = 0; i < n; i++) cnt[arr[i]] = 1;
     9         int x = 0, res = 0;
    10         for (int i = 1; i <= 2000; i++)
    11         {
    12             if (!cnt[i]) x++;
    13             if (x == k) { res = i; break; }
    14         }
    15         return res;
    16     }
    17 };

    思路2:

    根据数组中元素的数值大小和所在位置的相对关系计算答案。

    实现2:

     1 class Solution
     2 {
     3 public:
     4     int findKthPositive(vector<int>& arr, int k)
     5     {
     6         if (arr[0] > k) return k;
     7         int cnt = arr[0] - 1, n = arr.size();
     8         for (int i = 0; i < n - 1; i++)
     9         {
    10             int d = arr[i + 1] - arr[i] - 1;
    11             if (cnt + d >= k) return arr[i] + k - cnt;
    12             cnt += d;
    13         }
    14         return arr[n - 1] + k - cnt;
    15     }
    16 };

    思路3:

    在思路2的基础上更进一步,使用二分查找。

    实现3:

     1 class Solution
     2 {
     3 public:
     4     int cnt(vector<int>& arr, int m)
     5     {
     6         return arr[m] - m - 1;
     7     }
     8     int findKthPositive(vector<int>& arr, int k)
     9     {
    10         int n = arr.size();
    11         int tmp = arr[n - 1] - n;
    12         if (tmp < k) return arr[n - 1] + k - tmp;
    13         int l = 0, r = n - 1, p = -1;
    14         while (l <= r)
    15         {
    16             int m = l + r >> 1;
    17             if (arr[m] - m - 1 < k) l = m + 1;
    18             else
    19             {
    20                 p = m; r = m - 1;
    21             }
    22         }
    23         tmp = arr[p] - p - 1;
    24         return arr[p] + k - tmp - 1;
    25     }
    26 };
  • 相关阅读:
    面试题
    ajax部分
    jquery部分
    javascript部分
    webpack入门
    jQuery 实现下载进度条
    webSocket入门
    Ajax实现下载进度条
    C# IDisposable接口
    nuget必备插件(待续)
  • 原文地址:https://www.cnblogs.com/wangyiming/p/14403704.html
Copyright © 2020-2023  润新知