当前位置: 首页 > 知识库问答 >
问题:

第k个缺少正整数

宇文鸿畴
2023-03-14

给定一个按严格递增顺序排序的正整数数组arr和一个整数k。

查找此数组中缺少的第k个正整数。

示例1:

输入:arr=[2,3,4,7,11],k=5输出:9说明:缺少的正整数是[1,5,6,8,9,10,12,13,…]。第五个缺失的正整数是9。示例2:

输入:arr=[1,2,3,4], k=2输出:6解释:缺少的正整数是[5,6,7,...]。第二个缺失的正整数是6。

约束条件:

1.

1.

1.

arr[i]

我已经提交了这段代码,但这显示了TLE错误。请解释TLE发生的原因以及如何解决此问题。

    class Solution {
public:
    int findKthPositive(vector<int>& arr, int k) {
        vector<int> ans;
        int count=0,i=1,flag=0;
        
        while(count<k)
        {
            int start=0,end=arr.size()-1;
            while(start<=end)
            {
                int mid=start+(end-start)/2;
                if(arr[mid]==i) 
                    flag=1;
                else if(arr[mid]>i) 
                    end=mid-1; 
                else 
                    start=mid+1;

            }
            if(flag==0)
            {
                ans.push_back(i); 
                count++;
            }
            i++;
        } 
        return ans[k-1];
    }
};

共有3个答案

董良策
2023-03-14

你可以做一个桶,因为这些约束表明了这一点。

vector<int> sorted_array;

int bucket[1000];

for (int i=0;i<1000;i++)
{
  bucket[i] = 0;
}

for (auto elem : sorted_array)
{
  bucket[elem]++;
}

int k = <user_input>;

int result = -1;
int index = 0;
for (int i=0;i<1000;i++)
{
  if (bucket[i] == 0) // missing
  {
    index++;
  }
  if (index == k)
  {
    result = i;
    break;
  }
}

if (result > 0)
{
   cout << "We have a result: " << result << endl;
}
else
{
   cout << "No result found\n";
}
谭毅然
2023-03-14
匿名用户

您正在一次又一次地开始新的二进制搜索。

相反,您需要计算a[i]和i之间的差值,并将此差值与k进行比较-因此,只需要对给定的k进行唯一的循环,唯一的二进制搜索,时间是对数的

Python代码,但我希望它可以理解:

def findit(a, n, k):
    if a[0] > k:
        return k
    if k > a[n-1] - n:
        return k + a[n-1] - n-1

    #binary search of index of first occurrence of the least element   greater than key 
    start = 0
    end = n - 1
    while start <= end:
        mid = (start + end) // 2
        t = a[mid] - mid
        if t <= k:
            start = mid + 1
        else:
            idx = mid
            end = mid - 1
    return(k + idx)

a = [2,3,4,7,11]
for k in range(1, 9):
    print(findit(a, len(a), k))

result    
1   5   6   8   9   10   12   13

仲孙德惠
2023-03-14

代码中至少有两个问题。

首先,对于导致无限循环的每个循环,标志不会重置为0

其次,当在数组中找到一个数字时,代码也会卡在while循环中,因为没有中断语句。

下面是一个有效的代码。我在循环中移动了标志声明,并在向量中找到一个数字时添加了一个break语句。

#include <iostream>
#include <vector>

using namespace std;


class Solution {
public:
    int findKthPositive(vector<int>& arr, int k) {
        vector<int> ans;
        int count=0,i=1;
        
        while(count<k)
        {
            int start=0,end=arr.size()-1,flag=0;
            while(start<=end)
            {
                int mid=start+(end-start)/2;
                if(arr[mid]==i) {
                    flag=1;
                    break;
                }
                else if(arr[mid]>i) 
                    end=mid-1; 
                else 
                    start=mid+1;

            }
            if(flag==0)
            {
                ans.push_back(i); 
                count++;
            }
            i++;
        } 
        return ans[k-1];
    }
};

int main() {

  std::cout << "Hello" << std::endl;
  Solution a;
  vector<int> testv = {2, 3, 4, 7, 11 };
  std::cout << a.findKthPositive(testv, 5) << std::endl;
}

 类似资料:
  • 我最近开始尝试kafka流。我有一个场景,我需要用加入。可能是因为不包含某些键。在这种情况下,我会得到一个。 具体来说,我得到了 StreamThread-1在处理过程中流应用程序错误:java.lang.NullPointerException 我不知道我该如何处理这个问题。我无法以某种方式过滤掉与表条目不对应的流记录。 使现代化 进一步查看,我发现我可以通过 接口查询基础存储以查找是否存在密钥

  • 我试图找到< code >中丢失的正整数。数组。我不知道我的功能在哪里不起作用? 给出的问题 给定一个未排序的整数数组,找到第一个缺失的正整数。 我的功能在以下情况下工作正常.. **但在这种情况下失败。 预期输出为 我的输出是 这是我的代码https://jsbin.com/poduqayime/2/edit?html,js,console,output

  • 经典的问题陈述是:给定一个未排序的整数数组,找到中不存在的最小正整数。 在一个经典的问题陈述中,你只得到一个数组,你可以在这里、这里和这里找到很多关于这个问题的解决方案和资源。 在我的问题中,你得到了两个数组,和,长度均为。构造一个长度为 的数组 ,其“最小缺失整数”是可能的最大值。 必须是 或 。 我们如何以< code>O(N)的最坏情况时间和空间复杂度解决这个问题? 假设:

  • 除了手动反编译类,检查它的所有依赖项,以及这些依赖项是否在类路径上,等等,对每个依赖类无限....有没有任何方法可以准确地确定类路径中缺少了哪个类,从而导致Java无法加载我的主类? 另一个问题是缺少父/接口类的问题。但是我已经手动检查了所有祖先类或者在指定的类路径上,或者在JDK中,如下所示。

  • 我们已经为我的公司创建了一个新网站,我们决定保留旧网站,并使其将所有内容和页面重定向到新网站的类似内容页面。 我已经创建了一个htaccess文件来替换旧网站上的旧文件。 这个htaccess文件包含以下行: