前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2023-05-16:给你一个 严格升序排列 的正整数数组 arr 和一个整数 k 。 请你找到这个数组里第 k 个缺失的正整数。 输入:arr = [2,3,

2023-05-16:给你一个 严格升序排列 的正整数数组 arr 和一个整数 k 。 请你找到这个数组里第 k 个缺失的正整数。 输入:arr = [2,3,

原创
作者头像
福大大架构师每日一题
发布于 2023-05-16 13:17:14
发布于 2023-05-16 13:17:14
29800
代码可运行
举报
运行总次数:0
代码可运行

2023-05-16:给你一个 严格升序排列 的正整数数组 arr 和一个整数 k 。

请你找到这个数组里第 k 个缺失的正整数。

输入:arr = 2,3,4,7,11, k = 5。

输出:9。

答案2023-05-16:

大体步骤如下:

1.初始化左指针l为0,右指针r为数组长度减一,定义中间指针m和find(找到第k个正整数前的下标位置),并将find初始化为数组长度。

2.当左指针小于等于右指针时,执行二分查找。令m等于左指针和右指针之间的中间值。(注:这里取中间值可以使用位运算优化)。

3.如果当前位置arrm减去(m+1)大于等于k,说明第k个缺失的正整数在当前位置左侧,更新find为当前位置m,并把右指针r设为m-1,继续二分查找左半部分。

4.如果当前位置arrm减去(m+1)小于k,说明第k个缺失的正整数在当前位置右侧,把左指针l设为m+1,继续二分查找右半部分。

5.查找结束后,如果find等于0,说明要找的是第一个缺失的正整数,返回0即可;否则,找到第k个正整数前的一个位置,把这个位置上的元素赋值给preValue,计算从当前位置到第k个正整数的缺失数量under,最终结果就是preValue加上k减去under的值。

6.返回结果。

时间复杂度为O(logn),其中n是数组的长度。因为代码采用了二分查找的算法,每次查找可以将搜索范围缩小一半,所以时间复杂度为O(logn)。

空间复杂度为O(1),因为代码只使用了常数个变量来存储中间结果,与输入数据的规模大小无关。因此,空间复杂度为常数级别。

go完整代码如下:

代码语言:go
AI代码解释
复制
package main

import "fmt"

func findKthPositive(arr []int, k int) int {
	l := 0
	r := len(arr) - 1
	m := 0
	find := len(arr)
	for l <= r {
		m = (l + r) / 2
		if arr[m]-(m+1) >= k {
			find = m
			r = m - 1
		} else {
			l = m + 1
		}
	}
	preValue := 0
	if find == 0 {
		preValue = 0
	} else {
		preValue = arr[find-1]
	}
	under := preValue - find
	return preValue + (k - under)
}

func main() {
	arr := []int{2, 3, 4, 7, 11}
	k := 5
	result := findKthPositive(arr, k)
	fmt.Println(result)
}
在这里插入图片描述
在这里插入图片描述

rust完整代码如下:

代码语言:rust
AI代码解释
复制
fn find_kth_positive(arr: Vec<i32>, k: i32) -> i32 {
    let mut l = 0;
    let mut r = arr.len() - 1;
    let mut m = 0;
    let mut find = arr.len();
    while l <= r {
        m = (l + r) / 2;
        if arr[m] - (m as i32 + 1) >= k {
            find = m;
            r = m - 1;
        } else {
            l = m + 1;
        }
    }
    let pre_value = if find == 0 { 0 } else { arr[find - 1] };
    let under = pre_value - (find as i32);
    return pre_value + (k - under);
}

fn main() {
    let arr: Vec<i32> = vec![2, 3, 4, 7, 11];
    let k: i32 = 5;
    let result = find_kth_positive(arr, k);
    println!("{}", result);
}
在这里插入图片描述
在这里插入图片描述

c语言完整代码如下:

代码语言:c
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>

int findKthPositive(int* arr, int arrSize, int k) {
    int l = 0;
    int r = arrSize - 1;
    int m = 0;
    int find = arrSize;
    while (l <= r) {
        m = (l + r) / 2;
        if (arr[m] - (m + 1) >= k) {
            find = m;
            r = m - 1;
        }
        else {
            l = m + 1;
        }
    }
    int preValue = find == 0 ? 0 : arr[find - 1];
    int under = preValue - find;
    return preValue + (k - under);
}

int main() {
    int arr[] = { 2, 3, 4, 7, 11 };
    int k = 5;
    int arrSize = sizeof(arr) / sizeof(arr[0]);
    int result = findKthPositive(arr, arrSize, k);
    printf("%d\n", result);
}
在这里插入图片描述
在这里插入图片描述

c++完整代码如下:

代码语言:c++
AI代码解释
复制
#include <iostream>
#include <vector>

using namespace std;

int findKthPositive(vector<int>& arr, int k) {
    int l = 0;
    int r = arr.size() - 1;
    int m = 0;
    int find = arr.size();
    while (l <= r) {
        m = (l + r) / 2;
        if (arr[m] - (m + 1) >= k) {
            find = m;
            r = m - 1;
        }
        else {
            l = m + 1;
        }
    }
    int preValue = find == 0 ? 0 : arr[find - 1];
    int under = preValue - find;
    return preValue + (k - under);
}

int main() {
    vector<int> arr = { 2, 3, 4, 7, 11 };
    int k = 5;
    int result = findKthPositive(arr, k);
    cout << result << endl;
}
在这里插入图片描述
在这里插入图片描述

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【实用的开源项目】使用服务器部署Immich,高颜值高性能的自托管照片和视频备份方案
生活中大家应该会拍不少照片吧?很早之前小俊就有了照片、视频备份的困扰,早些年使用安卓手机的时候只用过度盘进行备份,那体验极差(,现在使用 iCloud 的体验还是很棒的。小俊前几天发现了一个程序,emmm,官方好像称之为“解决方案”——Immich,它支持通过 APP 从 iOS 、Android 设备备份照片与视频至服务器中,不仅如此,它还支持多用户、共享相册、后台备份等功能。小俊也是立马来推荐给大家啦!还带来了它的部署教程哦!滑下去细看吧!
小俊是我
2023/07/22
5.7K0
【实用的开源项目】使用服务器部署Immich,高颜值高性能的自托管照片和视频备份方案
【教程】使用轻量应用服务器搭建Jitsi Meet视频会议系统,轻松召开私域视频会议!
就在前天,腾讯云轻量应用服务器已经一周年啦!腾讯也推出了对于老用户的回馈活动,有需要了解的可以查看我上一篇的文章噢!今天博主继续给大家带来腾讯云轻量应用服务器的玩法,最近用腾讯会议用的有点点多,我朋友也刚好也有私域会议的需求,所以我们今天来折腾一个视频会议系统(不是抢腾讯会议蛋糕,主要是方便自己哈哈哈,让我们轻松召开视频会议!
小俊是我
2021/10/05
10.8K9
【教程】使用轻量应用服务器搭建Jitsi Meet视频会议系统,轻松召开私域视频会议!
【实用的开源项目】使用服务器部署Wiki.js,一个美观且强大的开源Wiki程序
上个月小俊介绍了一款支持跨平台、跨终端的在线文档、知识库管理程序: MrDoc觅思文档 ,后来又在寻找有没有其他的程序,这不,美观且强大的开源Wiki程序: Wiki.js ,简单使用之后,感觉还不错,也推荐给大家,现在就教大家如何部署这款程序。
小俊是我
2023/07/15
4.5K6
【实用的开源项目】使用服务器部署Wiki.js,一个美观且强大的开源Wiki程序
【实用的开源项目】使用云服务器部署TaleBook,简洁、强大的私人书籍管理系统!
第三期【实用的开源项目】教程为大家介绍一下 TaleBook ,教大家使用云服务器部署TaleBook,简洁、强大的私人书籍管理系统!这篇文章是详细的文字版,若希望方便查看视频,请向下滑动,查看视频,或者直接到 BiliBili 搜索 我是小俊呀 ,查找视频哦!
小俊是我
2022/09/08
4.8K1
【实用的开源项目】使用云服务器部署TaleBook,简洁、强大的私人书籍管理系统!
【实用的开源项目】使用云服务器部署Mattermost,强大的开发人员协作平台,更是一款高大上的聊天室!
不知不觉【实用的开源项目】系列已经来到第四期了啊。今天为大家介绍一下 Mattermost ,教大家使用云服务器部署 Mattermost ,简洁、强大的私人书籍管理系统!这篇文章是详细的文字版,若希望查看教程视频,请向下滑动,查看视频!
小俊是我
2022/09/25
8.4K2
【实用的开源项目】使用云服务器部署Mattermost,强大的开发人员协作平台,更是一款高大上的聊天室!
【实用的开源项目】使用服务器部署changedetection.io,一个网站更改检测、监控和通知的开源工具
今天给大家介绍一下 changedetection.io 这一款网站变更监控和通知工具,它的功能非常强大,支持用 Chrome浏览器 来提取网页内容,这样就可以抓取到一些用 js 填充内容的网页,更好地支持更多的网站。
小俊是我
2023/01/31
2.9K0
【实用的开源项目】使用服务器部署changedetection.io,一个网站更改检测、监控和通知的开源工具
【实用的开源项目】使用云服务器部署Chemex,让软硬件资产的管理更加智能、高效!
【实用的开源项目】系列文章的新项目我都会将视频教程的文字版和视频版合并啦!今天,我有一种急切的心情介绍这一个新的开源项目,那么我们第二期【实用的开源项目】的主题就是使用腾讯云轻量应用服务器搭建Chemex!这篇文章是详细的文字版,若希望方便查看视频,请向下滑动,查看视频,或者直接到 BiliBili 搜索 我是小俊呀 ,查找视频哦!
小俊是我
2022/08/31
5.5K1
【实用的开源项目】使用云服务器部署Chemex,让软硬件资产的管理更加智能、高效!
【好玩儿的Docker项目】10分钟搭建一个轻量、快速、美观的个人导航页面——Flare
一直有小伙伴想要咕咕介绍用docker搭建导航页面,今天咕咕就推荐一个苏洋大佬受到Flame启发,在此基础上优化而来的新项目Flare
二十五画生
2023/02/27
9.2K0
【好玩儿的Docker项目】10分钟搭建一个轻量、快速、美观的个人导航页面——Flare
锐驰云端 轻速上云 腾讯云锐驰型轻量云服务器简单测评及其一应用——部署PhotoPrism
继2024年12月26日阿里云上架了200M峰值带宽不限制流量的轻量云服务器后,昨晚22:30,腾讯云也正式推出并全量发售自家的200M峰值带宽不限制流量的轻量云服务器——“腾讯云轻量应用服务器锐驰型套餐”,那么,小俊第一时间自费自购了一台2C2G200M的机器,接下来就带大家来抢先实机测评一下腾讯云轻量应用服务器锐驰型套餐以及小俊想到的其中一个主要应用场景吧!
小俊是我
2025/01/22
1.2K0
锐驰云端 轻速上云 腾讯云锐驰型轻量云服务器简单测评及其一应用——部署PhotoPrism
【实用的开源项目】使用服务器部署MrDoc,一个支持跨平台、跨终端的在线文档、知识库管理程序
之前小俊也用过不少知识库管理系统,不过也是很久之前啦,最近发现了一个支持跨平台、跨终端的在线文档、知识库管理程序叫作 MrDoc觅思文档 ,简单使用之后,感觉还不错,推荐给大家,也作为 【实用的开源项目】 中的一期教程教大家如何部署这款程序。
小俊是我
2023/06/09
3.3K0
【实用的开源项目】使用服务器部署MrDoc,一个支持跨平台、跨终端的在线文档、知识库管理程序
【实用的开源项目】使用服务器部署Whiteboard,一个轻量级、可轻松定制的协作白板
平时小俊白板用的挺多的,前两天在学校就想着有没有一个轻量化的在线白板(?于是小俊搜寻了一番,还真找到一个名字叫 Whiteboard 的基于 MIT 许可开源的一个项目,安装体验一番之后,个人感觉很不错,推荐给大家,出一期教程教大家如何部署这款程序。
小俊是我
2023/04/21
1.4K0
【实用的开源项目】使用服务器部署Whiteboard,一个轻量级、可轻松定制的协作白板
【实用的开源项目】使用服务器部署memos,一款拥有社交功能的、好看的自托管备忘录
就快要2023年啦,这是【实用的开源项目】系列的第六期了诶,这一期给大家介绍一下 memos 这一款拥有社交功能的自托管备忘录,这篇文章是详细的文字版,若希望查看教程视频,请向下滑动,查看视频,或者直接到 BiliBili 搜索 我是小俊呀 ,查找视频哦!
小俊是我
2022/12/29
3.8K0
【实用的开源项目】使用服务器部署memos,一款拥有社交功能的、好看的自托管备忘录
【好玩儿的Docker项目】10分钟搭建一个高颜值的在线工具箱,用户体验很棒!
GitHub官方仓库:https://github.com/CorentinTh/it-tools
二十五画生
2023/10/24
2.2K2
【好玩儿的Docker项目】10分钟搭建一个高颜值的在线工具箱,用户体验很棒!
【好玩儿的Docker项目】2023重制版本!10分钟搭建一个专属的密码管理工具——Vaultwarden
之前的教程:【保姆级教程】利用宝塔面板 + Docker 搭建一个优秀的密码管理器 ——Bitwarden
二十五画生
2023/11/28
2.2K0
【好玩儿的Docker项目】2023重制版本!10分钟搭建一个专属的密码管理工具——Vaultwarden
【实用的开源项目】使用服务器部署Hoarder,一款集成AI且界面美观的书签管理器
差不多三年前(一晃眼三年了,时间过得太快啦),小俊写过一篇教大家安装 LinkAce 的文章,现在小俊又来给大家介绍一款集成了当下最热门的 AI 技术且界面相对较为美观的书签管理器——hoarder,有了它,大家就能更加方便地管理自己收藏的网站与知识啦!
小俊是我
2024/06/16
1.5K2
【实用的开源项目】使用服务器部署Hoarder,一款集成AI且界面美观的书签管理器
【好玩儿的Docker项目】10分钟部署一个类似知乎的开源问答平台——Answer
Answer是一个类似知乎的开源问答社区。支持Docker部署,目前GitHub拥有5.4K的star。
二十五画生
2023/01/16
3.8K0
【好玩儿的Docker项目】10分钟部署一个类似知乎的开源问答平台——Answer
【好玩儿的Docker项目】用腾讯云轻量应用服务器10分钟搭建一个轻量的视频分享网站——Fireshare
文章首发于:https://blog.laoda.de/archives/docker-compose-install-fireshare
二十五画生
2022/11/10
3.7K0
【好玩儿的Docker项目】用腾讯云轻量应用服务器10分钟搭建一个轻量的视频分享网站——Fireshare
【好玩儿的Docker项目】激情畅聊!十分钟搭建一个插件化易拓展的开源即时聊天(IM)应用——Tailchat
这周和大家分享一个开源的即时聊天项目。也是作者@moonrailgun强烈推荐咕咕用的。
二十五画生
2023/01/11
5K0
【好玩儿的Docker项目】激情畅聊!十分钟搭建一个插件化易拓展的开源即时聊天(IM)应用——Tailchat
【实用的开源项目】使用服务器部署Audiobookshelf,一个自托管有声读物和播客服务器
昨天小俊发现了一个不错的程序: Audiobookshelf ,它是一个自托管有声读物和播客服务器,它可以直接在程序中搜索 播客 资源,小俊粗略的看了一下,资源还是很多的,并且该程序配套有 Android 和 IOS 客户端,方便使用!今天出一个教程教大家如何部署 Audiobookshelf 。
小俊是我
2023/04/05
5K1
【实用的开源项目】使用服务器部署Audiobookshelf,一个自托管有声读物和播客服务器
【教程】使用腾讯云轻量应用服务器搭建Mirotalk,让自己拥有一个视频聊天平台!
现在这个时代,个人不论小白还是大佬,搭建网站都有许多方法与平台,但是在服务器的选择上,当然是本文的主角:腾讯云轻量应用服务器更具性价比,为什么?下面准备工作一一为你介绍,所以今天,小俊继续给大家带来腾讯云轻量应用服务器的玩法,相信很多人都在网课、远程办公中接触过许多的视频授课、视频聊天、视频会议平台吧,也有不少人想搭建自己的一个视频聊天、屏幕共享平台供小圈子、私域流量或者朋友使用、玩耍,而且今天是七夕,我们还可以搭建一个 Mirotalk ,跟自己的那个他/她用于视频聊天吧!所以,今天小俊给大家带来搭建 Mirotalk 这一个视频聊天、屏幕共享平台!
小俊是我
2021/08/14
3.4K0
【教程】使用腾讯云轻量应用服务器搭建Mirotalk,让自己拥有一个视频聊天平台!
推荐阅读
【实用的开源项目】使用服务器部署Immich,高颜值高性能的自托管照片和视频备份方案
5.7K0
【教程】使用轻量应用服务器搭建Jitsi Meet视频会议系统,轻松召开私域视频会议!
10.8K9
【实用的开源项目】使用服务器部署Wiki.js,一个美观且强大的开源Wiki程序
4.5K6
【实用的开源项目】使用云服务器部署TaleBook,简洁、强大的私人书籍管理系统!
4.8K1
【实用的开源项目】使用云服务器部署Mattermost,强大的开发人员协作平台,更是一款高大上的聊天室!
8.4K2
【实用的开源项目】使用服务器部署changedetection.io,一个网站更改检测、监控和通知的开源工具
2.9K0
【实用的开源项目】使用云服务器部署Chemex,让软硬件资产的管理更加智能、高效!
5.5K1
【好玩儿的Docker项目】10分钟搭建一个轻量、快速、美观的个人导航页面——Flare
9.2K0
锐驰云端 轻速上云 腾讯云锐驰型轻量云服务器简单测评及其一应用——部署PhotoPrism
1.2K0
【实用的开源项目】使用服务器部署MrDoc,一个支持跨平台、跨终端的在线文档、知识库管理程序
3.3K0
【实用的开源项目】使用服务器部署Whiteboard,一个轻量级、可轻松定制的协作白板
1.4K0
【实用的开源项目】使用服务器部署memos,一款拥有社交功能的、好看的自托管备忘录
3.8K0
【好玩儿的Docker项目】10分钟搭建一个高颜值的在线工具箱,用户体验很棒!
2.2K2
【好玩儿的Docker项目】2023重制版本!10分钟搭建一个专属的密码管理工具——Vaultwarden
2.2K0
【实用的开源项目】使用服务器部署Hoarder,一款集成AI且界面美观的书签管理器
1.5K2
【好玩儿的Docker项目】10分钟部署一个类似知乎的开源问答平台——Answer
3.8K0
【好玩儿的Docker项目】用腾讯云轻量应用服务器10分钟搭建一个轻量的视频分享网站——Fireshare
3.7K0
【好玩儿的Docker项目】激情畅聊!十分钟搭建一个插件化易拓展的开源即时聊天(IM)应用——Tailchat
5K0
【实用的开源项目】使用服务器部署Audiobookshelf,一个自托管有声读物和播客服务器
5K1
【教程】使用腾讯云轻量应用服务器搭建Mirotalk,让自己拥有一个视频聊天平台!
3.4K0
相关推荐
【实用的开源项目】使用服务器部署Immich,高颜值高性能的自托管照片和视频备份方案
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验