日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

常考数据结构与算法:数组中未出现的最小正整数

發布時間:2025/6/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 常考数据结构与算法:数组中未出现的最小正整数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考博客?https://www.cnblogs.com/apeway/p/10764597.html?

?

題目描述

給定一個無序數組arr,找到數組中未出現的最小正整數

例如arr = [-1, 2, 3, 4]。返回1

arr = [1, 2, 3, 4]。返回5

?

[要求]

時間復雜度為O(n)O(n),空間復雜度為O(1)O(1)

?

示例1

輸入

[-1,2,3,4]

返回值

1

?

先看一個時空復雜度均為O(n)的方案,思路如下:

???????? 新建一個和原數組大小一致的新數組,通過遍歷原數組將其中每個元素e(忽略掉小于1或大于數組長度的元素)填充到新數組中[e-1]位置上。之后遍歷新數組就可找到目標,這個遍歷可能會遇到兩種情況,一般情況下,上一步的操作總有被忽略的元素,每忽略一個數,新數組中就會少填充一個正整數,如{-1,1,2,5,6}>>{1,2,0,0,5},這種情況要找的數就是第一個值為0的元素的下標+1極端情況下,上一步的操作沒有被忽略的元素,如{3,2,1,5,4}>>{1,2,3,4,5},這種情況要找的數就是length+1;

???????? 為什么開辟的新數組大小要和原數組大小一致?這是為了確保在極端情況下能夠容納下由原數組中元素組成的從1開始的最長連續整數序列。

???????? 為什么要忽略掉大于數組長度的元素?這是因為如果存在這樣的數X,剩下的小于length個元素不可能組成1~length的連續整數序列,則X更不可能在連續序列中,就沒必要維護它了。

?將空間復雜度均為O(n)改進成O(1)如下:

package datastructure;import java.util.Arrays;public class MinNumberdisappered {public static void main(String[] args) {//int[] arr = {-1, 2, 3, 4};int[] arr = {1, 2, 3, 4};MinNumberdisappered minNumberdisappered = new MinNumberdisappered();int ret = minNumberdisappered.minNumberdisappered(arr);System.out.println(ret);}/*** return the min number* @param arr int整型一維數組 the array* @return int整型*/public int minNumberdisappered (int[] arr) {System.out.println("原數組:" + Arrays.toString(arr));/** right是一個邊界值,表示用數組中元素組成的從1開始的連續整數序列中可能的最大值(初始等于數組長度)。* 處理數組過程中如果遇到比right大的數,就表示該數不合法,應該被丟掉(代碼中還處理了其它表示數不合法的情況)。* >> 隨著數組元素被處理,每遇到一個不合法的元素,就應將right減1。*/int right = arr.length;/** 索引left(初始為0),left將數組分成兩部分。* [0,left)是處理完成的部分,其中每個元素都滿足a[i]=i+1;* [left,right]是待處理部分。* >> 隨著數組元素被處理,left會逐漸向右移動。*/int left = 0;while (left + 1 <= right) { // 正在處理的元素的值(left+1) <= 邊界值// 分支1、arr[left]在理想的位置// 則處理完成部分長度加1,然后繼續處理未完成部分的下一個待處理元素if (arr[left] == left + 1) {left++;}// 分支2、arr[left]是不合法的數據// 則先將right減1,然后丟掉不合法的數并將待處理部分最后一個元素填充到left位置繼續處理else if (arr[left] < left + 1 || arr[left] > right) {right--;arr[left] = arr[right];}// 分支3、arr[left]合法,但是沒有在理想的位置上// 則需要交換arr[left]與其理想位置上元素,然后繼續處理交換后left位置處的元素// 求理想位置p的索引:p+1 = arr[left] >> p = arr[left]-1else {// 如果要交換的兩個元素相同,也算當前處理的元素arr[left]不合法,進行與分支2一樣的處理if(arr[left] == arr[arr[left] - 1]) {right--;arr[left] = arr[right];} else {swap(arr, left, arr[left] - 1);}}}System.out.println("處理后:" + Arrays.toString(arr));return left + 1;}private void swap(int[] a, int i, int j) {int temp = a[i];a[i] = a[j];a[j] = temp;} }

?

總結

以上是生活随笔為你收集整理的常考数据结构与算法:数组中未出现的最小正整数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 寂寞d奶大胸少妇 | 国产精品久久久久久亚洲毛片 | 在线视频一二区 | 飘花影院伦理片 | 国产freexxxx性播放麻豆 | 天天做天天爱天天操 | 小宝贝真紧h军人h | 国产欧美一区二区三区在线看蜜臀 | 超碰人人人人 | 黄色一级片免费在线观看 | 风韵少妇spa私密视频 | 精品人妻一区二区免费 | 国产免费专区 | 中文字幕高清 | 亚洲成人一区二区 | 日少妇b | 97国产在线观看 | 色婷婷中文字幕 | 欧美一区二区三区电影 | www.性欧美 | 国产精品一区二区精品 | 岛国精品一区二区 | 午夜aa | 中文在线视频 | 中文字幕超清在线免费观看 | 日本成人一区二区三区 | 男男黄色片 | 午夜伦理av| 人av在线| 成年人看的视频网站 | 夜夜操夜夜爽 | 国产高潮失禁喷水爽到抽搐 | 国产欧美日韩一区 | 国产精品123区 | 免费黄毛片 | 国产一线在线观看 | 免费高清av | 欧美色图一区二区 | 熟女俱乐部一区二区 | 超碰在线公开免费 | 欧美黄色免费在线观看 | 午夜性生活视频 | 玖操| 日批在线 | 91资源在线播放 | 波多野结衣一区二区三区四区 | 国产成人一区二区三区视频 | 亚洲欧洲综合在线 | 日韩国产在线一区 | 成人精品免费视频 | 九一av| 国产一区日韩一区 | 国产午夜麻豆影院在线观看 | 精品人妻一区二区三区换脸明星 | 男女无遮挡做爰猛烈视频 | 日本美女动态图 | 日韩精品在线观看视频 | 免费观看日韩av | 青草视频在线观看免费 | 成人欧美在线 | 国产精品无码一区二区三 | 欧美综合社区 | 欧美啪啪网站 | 久久精品久久精品 | 精品福利一区二区三区 | 亚洲欧洲综合av | 日本福利一区二区 | 狠狠澡 | 91亚色在线观看 | 国产欧美高清 | 天天躁夜夜操 | 青娱乐超碰在线 | 91视频在线 | 91av欧美 | caoporen在线 | 亚洲乱色熟女一区二区三区 | 久久国产色 | 欧美日韩免费在线视频 | 欧美少妇诱惑 | 精品亚洲乱码一区二区 | 久草视频福利 | 精品国产av鲁一鲁一区 | 在线播放视频高清在线观看 | 俄罗斯美女av | 少妇做爰免费视看片 | 亚洲精品国产suv | 日韩三级大片 | 新婚若妻侵犯中文字幕 | 日韩视频h| 91a视频 | 咪咪色影院 | 又黄又爽的视频 | 91av视频网 | av在线影片 | 欧美性大战久久久 | 在线视频精品一区 | 国产一卡二卡在线 | 亚洲一区二区色图 | www.久久精品.com |