最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

2023-05-16:給你一個 嚴格升序排列 的正整數(shù)數(shù)組 arr 和一個整數(shù) k 。 請你找到這個

2023-05-16 20:56 作者:福大大架構(gòu)師每日一題  | 我要投稿

2023-05-16:給你一個 嚴格升序排列 的正整數(shù)數(shù)組 arr 和一個整數(shù) k 。

請你找到這個數(shù)組里第 k 個缺失的正整數(shù)。

輸入:arr = [2,3,4,7,11], k = 5。

輸出:9。

答案2023-05-16:

大體步驟如下:

1.初始化左指針l為0,右指針r為數(shù)組長度減一,定義中間指針m和find(找到第k個正整數(shù)前的下標位置),并將find初始化為數(shù)組長度。

2.當左指針小于等于右指針時,執(zhí)行二分查找。令m等于左指針和右指針之間的中間值。(注:這里取中間值可以使用位運算優(yōu)化)。

3.如果當前位置arr[m]減去(m+1)大于等于k,說明第k個缺失的正整數(shù)在當前位置左側(cè),更新find為當前位置m,并把右指針r設(shè)為m-1,繼續(xù)二分查找左半部分。

4.如果當前位置arr[m]減去(m+1)小于k,說明第k個缺失的正整數(shù)在當前位置右側(cè),把左指針l設(shè)為m+1,繼續(xù)二分查找右半部分。

5.查找結(jié)束后,如果find等于0,說明要找的是第一個缺失的正整數(shù),返回0即可;否則,找到第k個正整數(shù)前的一個位置,把這個位置上的元素賦值給preValue,計算從當前位置到第k個正整數(shù)的缺失數(shù)量under,最終結(jié)果就是preValue加上k減去under的值。

6.返回結(jié)果。

時間復(fù)雜度為O(logn),其中n是數(shù)組的長度。因為代碼采用了二分查找的算法,每次查找可以將搜索范圍縮小一半,所以時間復(fù)雜度為O(logn)。

空間復(fù)雜度為O(1),因為代碼只使用了常數(shù)個變量來存儲中間結(jié)果,與輸入數(shù)據(jù)的規(guī)模大小無關(guān)。因此,空間復(fù)雜度為常數(shù)級別。

go完整代碼如下:

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完整代碼如下:

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語言完整代碼如下:

#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++完整代碼如下:

#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;
}

圖片
在這里插入圖片描述

福大大架構(gòu)師每日一題

java當死,golang當立。最新面試題,涉及golang,rust,mysql,redis,云原生,算法,分布式,網(wǎng)絡(luò),操作系統(tǒng)。

508篇原創(chuàng)內(nèi)容

公眾號


2023-05-16:給你一個 嚴格升序排列 的正整數(shù)數(shù)組 arr 和一個整數(shù) k 。 請你找到這個的評論 (共 條)

分享到微博請遵守國家法律
新丰县| 玉龙| 塘沽区| 新巴尔虎左旗| 松江区| 嫩江县| 遂宁市| 富阳市| 白河县| 玉溪市| 遵义县| 新化县| 通河县| 石景山区| 湘潭市| 浑源县| 红桥区| 阳谷县| 昌宁县| 江西省| 汤阴县| 那坡县| 云阳县| 牟定县| 赤城县| 徐水县| 南丹县| 华池县| 嘉荫县| 尚志市| 东城区| 留坝县| 墨江| 中牟县| 吴川市| 理塘县| 怀安县| 汽车| 张北县| 清水县| 静海县|