摘要:小鹿題目算法思路桶排序思想。再遍歷數(shù)組,從下標(biāo)開(kāi)始判斷該下標(biāo)是否存放規(guī)定的數(shù)據(jù),如果不是則該下標(biāo)就是這組數(shù)據(jù)中缺失的最小正整數(shù)。桶排序還可以實(shí)現(xiàn)在一組數(shù)據(jù)中查找重復(fù)的數(shù)據(jù)。
Time:2019/4/6
Title: First Missing Positive
Difficulty: Difficulty
Author: 小鹿
Given an unsorted integer array, find the smallest missing?positive integer.
Note:
Your algorithm should run in O(n) time and uses constant extra space.
Example 1:
Input: [1,2,0] Output: 3
Example 2:
Input: [3,4,-1,1] Output: 2
Example 3:
Input: [7,8,9,11,12] Output: 1Solve:
桶排序思想。遍歷第一遍數(shù)據(jù),將數(shù)據(jù)存放到與下標(biāo)相同的位置,遍歷第二遍數(shù)據(jù),判斷每個(gè)下標(biāo)對(duì)應(yīng)的數(shù)據(jù)是否為下標(biāo)值。如果不是,該數(shù)值就是當(dāng)前確實(shí)的最小正整數(shù);當(dāng)數(shù)組遍歷完還有沒(méi)找到,那么數(shù)組的長(zhǎng)度 + 1 就是缺失的最小正整數(shù)值。
1、把數(shù)組的每一個(gè)下標(biāo)當(dāng)做是一個(gè)桶,每個(gè)桶只能存放一個(gè)數(shù)據(jù)(每個(gè)下標(biāo)對(duì)應(yīng)一個(gè)數(shù)據(jù)),我們規(guī)定桶中的數(shù)據(jù)和下標(biāo)的對(duì)應(yīng)關(guān)系是 0 下標(biāo)對(duì)應(yīng)數(shù)據(jù)1,1下標(biāo)對(duì)應(yīng)數(shù)據(jù)2,2下標(biāo)對(duì)應(yīng)數(shù)據(jù)3......,題目要求我們?cè)贠(n)的時(shí)間復(fù)雜度內(nèi)找出一組數(shù)據(jù)中缺失的最小正整數(shù)。2、遍歷第一遍數(shù)組中的數(shù)據(jù),按照步驟 1 的規(guī)定,先判斷兩個(gè)當(dāng)前下標(biāo)對(duì)應(yīng)的數(shù)據(jù)是否為規(guī)定的數(shù)據(jù),如果不是,我們將該數(shù)據(jù)存放到規(guī)定的下標(biāo)對(duì)應(yīng)的數(shù)組中。然后交換的數(shù)據(jù)繼續(xù)進(jìn)行判斷,直到該數(shù)據(jù)放到規(guī)定下標(biāo)的數(shù)組中為止(小于等于 0 和 數(shù)據(jù)大于數(shù)組長(zhǎng)度的除外)。
3、再遍歷數(shù)組,從下標(biāo) 0 開(kāi)始判斷該下標(biāo)是否存放規(guī)定的數(shù)據(jù),如果不是則該下標(biāo)就是這組數(shù)據(jù)中缺失的最小正整數(shù)。
4、如果數(shù)組中的數(shù)據(jù)都匹配對(duì)應(yīng)的下標(biāo),那么最小正整數(shù)就是數(shù)組長(zhǎng)度加一。
/** * @param {number[]} nums * @return {number} * 邊界條件: * 1) 判斷傳入的數(shù)組是否為空。 * 2) 判斷數(shù)組中的數(shù)據(jù)只有 1 個(gè)。 * 3) 交換數(shù)據(jù)時(shí),判斷相同數(shù)據(jù)的處理。 */ var firstMissingPositive = function(nums) { //遍歷數(shù)組 for(let i = 0;i < nums.length;i++){ //如果當(dāng)前的數(shù)據(jù)不對(duì)應(yīng)正確的下標(biāo) + 1 && 數(shù)據(jù)大于 0 && 長(zhǎng)度小于等于數(shù)組 while(nums[i] != i+1 && nums[i] > 0 && nums[i] <= nums.length){ //判斷該數(shù)據(jù)對(duì)應(yīng)正確位置的數(shù)據(jù)是否相同 if(nums[nums[i]-1] == nums[i]) { //如果相同,將該下標(biāo)對(duì)應(yīng)的元素置為 0 nums[i] = 0; break; } //如果不重復(fù),就交換數(shù)據(jù) let temp = nums[nums[i] - 1]; nums[nums[i] - 1] = nums[i]; nums[i] = temp; } } //遍歷所有數(shù)據(jù),找出缺失的最小正整數(shù) let index = 0; for(; index < nums.length; index++){ if(nums[index] !== index+1){ break; } } return index+1; }; //測(cè)試 let arr =[]; console.log(firstMissingPositive(arr))
1、桶排序的思想。2、桶排序還可以實(shí)現(xiàn)在一組數(shù)據(jù)中查找重復(fù)的數(shù)據(jù)。
歡迎一起加入到 LeetCode 開(kāi)源 Github 倉(cāng)庫(kù),可以向 me 提交您其他語(yǔ)言的代碼。在倉(cāng)庫(kù)上堅(jiān)持和小伙伴們一起打卡,共同完善我們的開(kāi)源小倉(cāng)庫(kù)!
Github:https://github.com/luxiangqia...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/103274.html
摘要:給定一個(gè)未排序的整數(shù)數(shù)組,找出其中沒(méi)有出現(xiàn)的最小的正整數(shù)。示例輸入輸出示例輸入輸出示例輸入輸出答案參考 給定一個(gè)未排序的整數(shù)數(shù)組,找出其中沒(méi)有出現(xiàn)的最小的正整數(shù)。 示例 1: 輸入: [1,2,0]輸出: 3 示例 2: 輸入: [3,4,-1,1]輸出: 2 示例 3: 輸入: [7,8,9,11,12]輸出: 1 答案參考: /** * @param {number[]} num...
摘要:當(dāng)我們尋找到的第一個(gè)非空字符為正或者負(fù)號(hào)時(shí),則將該符號(hào)與之后面盡可能多的連續(xù)數(shù)字組合起來(lái),作為該整數(shù)的正負(fù)號(hào)假如第一個(gè)非空字符是數(shù)字,則直接將其與之后連續(xù)的數(shù)字字符組合起來(lái),形成整數(shù)。數(shù)字前正負(fù)號(hào)要保留。 Time:2019/4/19Title: String To IntegerDifficulty: MediumAuthor: 小鹿 題目:String To Integer(字...
摘要:?jiǎn)栴}問(wèn)題描述給定一個(gè)未排序的整數(shù)數(shù)組,找出其中沒(méi)有出現(xiàn)的最小的正整數(shù)。原因就在于使用的內(nèi)置的函數(shù)的復(fù)雜度超過(guò)的比如的復(fù)雜度就是。 問(wèn)題 問(wèn)題描述 給定一個(gè)未排序的整數(shù)數(shù)組,找出其中沒(méi)有出現(xiàn)的最小的正整數(shù)。 說(shuō)明 你的算法的時(shí)間復(fù)雜度應(yīng)為O(n),并且只能使用常數(shù)級(jí)別的空間。 解答 首先因?yàn)橹荒苁褂贸?shù)級(jí)別的空間,就不能再建新的O(n)級(jí)的list,set等。然后就想到將列表去重去除非...
摘要:說(shuō)明不允許修改給定的鏈表。算法思路題目要求返回單鏈表中存在循環(huán)鏈表的位置。首先,先判斷該單鏈表是否存在循環(huán)鏈表用兩個(gè)快慢指針?lè)謩e指向鏈表的頭部,每次移動(dòng)兩步,每次移動(dòng)一步,移動(dòng)的步數(shù)是的兩倍。 Time:2019/4/8Title: Linked List Cycle IIDifficulty: mediumAuthor:小鹿 題目:Linked List Cycle II Giv...
摘要:小鹿題目算法思路兩種解題思路哈希表法遍歷鏈表,沒(méi)遍歷一個(gè)節(jié)點(diǎn)就要在哈希表中判斷是否存在該結(jié)點(diǎn),如果存在,則為環(huán)否則,將該結(jié)點(diǎn)插入到哈希表中繼續(xù)遍歷。 Time:2019/4/7Title: Linked List CycleDifficulty: Easy Author:小鹿 題目:Linked List Cycle I Given a linked list, determine ...
閱讀 1801·2021-11-11 16:55
閱讀 2611·2021-08-27 13:11
閱讀 3661·2019-08-30 15:53
閱讀 2328·2019-08-30 15:44
閱讀 1421·2019-08-30 11:20
閱讀 1064·2019-08-30 10:55
閱讀 967·2019-08-29 18:40
閱讀 3067·2019-08-29 16:13