摘要:只有不等于給定數(shù)字的數(shù),才會(huì)被拷貝到子數(shù)組的邊界上。代碼只拷貝非給定數(shù)字的元素交換法復(fù)雜度時(shí)間空間思路因?yàn)轭}目中并不要求相對(duì)順序保持一致,所以有進(jìn)一步優(yōu)化的空間。
Remove Element
雙指針法 復(fù)雜度Given an array and a value, remove all instances of that value in place and return the new length.
The order of elements can be changed. It doesn"t matter what you leave beyond the new length.
時(shí)間 O(N) 空間 O(1)
思路用一個(gè)指針記錄不含給定數(shù)字的數(shù)組邊界,另一個(gè)指針記錄當(dāng)前遍歷到的數(shù)組位置。只有不等于給定數(shù)字的數(shù),才會(huì)被拷貝到子數(shù)組的邊界上。
代碼public class Solution { public int removeElement(int[] nums, int val) { int pos = 0; for(int i = 0; i < nums.length; i++){ // 只拷貝非給定數(shù)字的元素 if(nums[i] != val){ nums[pos] = nums[i]; pos++; } } return pos; } }交換法 復(fù)雜度
時(shí)間 O(N) 空間 O(1)
思路因?yàn)轭}目中并不要求相對(duì)順序保持一致,所以有進(jìn)一步優(yōu)化的空間。我們遍歷數(shù)組時(shí),每遇到一個(gè)目標(biāo)數(shù),就和當(dāng)前數(shù)組結(jié)尾交換,并把數(shù)組大小減1,如果不是目標(biāo)數(shù),則檢查下一個(gè)數(shù)字。這樣可以減少很多賦值操作。
代碼public class Solution { public int removeElement(int[] nums, int val) { int size = nums.length, i = 0; while(i < size){ if(nums[i] == val){ swap(nums, i, size - 1); size--; } else { i++; } } return size; } private void swap(int[] nums, int i, int j){ int tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/64597.html
摘要:描述給定一個(gè)有序數(shù)組,你需要原地刪除其中的重復(fù)內(nèi)容,使每個(gè)元素只出現(xiàn)一次并返回新的長(zhǎng)度。最后慢指針指向的元素及前面所有元素都是不重復(fù)的。 描述: 給定一個(gè)有序數(shù)組,你需要原地刪除其中的重復(fù)內(nèi)容,使每個(gè)元素只出現(xiàn)一次,并返回新的長(zhǎng)度。不要另外定義一個(gè)數(shù)組,您必須通過用 O(1) 額外內(nèi)存原地修改輸入的數(shù)組來做到這一點(diǎn)。示例: 給定數(shù)組: nums = [1,1,2], 你的函數(shù)應(yīng)該返回新...
摘要:刪除元素后,立即跳出,則正常退出,但不能向后繼續(xù)循環(huán)了刪除后立馬終端循環(huán),會(huì)正常跳出,但代價(jià)是不能繼續(xù)向后循環(huán)了使用迭代器使用迭代器可,正確無誤的刪除,代碼簡(jiǎn)潔優(yōu)雅,推薦使用使用迭代器可,正確無誤的刪除注意這里時(shí)而不是 在工作中的許多場(chǎng)景下,我們都會(huì)使用到List這個(gè)數(shù)據(jù)結(jié)構(gòu),那么同樣的有很多場(chǎng)景下需要?jiǎng)h除List中的某一個(gè)元素或某幾個(gè)元素,那么我們?cè)撊绾握_無誤地刪除List中的元素...
摘要:題目要求設(shè)計(jì)一個(gè)數(shù)據(jù)結(jié)構(gòu),使得能夠在的時(shí)間復(fù)雜度中插入數(shù)字,刪除數(shù)字,以及隨機(jī)獲取一個(gè)數(shù)字。因此,使用來查詢時(shí)不可避免的。如何實(shí)現(xiàn)的隨機(jī)查詢這個(gè)其實(shí)就是強(qiáng)調(diào)一點(diǎn),我們需要維持原有的插入順序,從而保證各個(gè)元素等概率被隨機(jī)。 題目要求 Design a data structure that supports all following operations in average O(1)...
摘要:題目要求設(shè)計(jì)一個(gè)數(shù)據(jù)結(jié)構(gòu),支持能夠在的時(shí)間內(nèi)完成對(duì)數(shù)字的插入,刪除和獲取隨機(jī)數(shù)的操作,允許插入重復(fù)的數(shù)字,同時(shí)要求每個(gè)數(shù)字被隨機(jī)獲取的概率和該數(shù)字當(dāng)前在數(shù)據(jù)結(jié)構(gòu)中的個(gè)數(shù)成正比。網(wǎng)上有一些實(shí)現(xiàn)采用來解決,這是不合理的。此時(shí)的代碼如下 題目要求 Design a data structure that supports all following operations in average...
給定一個(gè)排序數(shù)組,你需要在原地刪除重復(fù)出現(xiàn)的元素,使得每個(gè)元素只出現(xiàn)一次,返回移除后數(shù)組的新長(zhǎng)度。 不要使用額外的數(shù)組空間,你必須在原地修改輸入數(shù)組并在使用 O(1) 額外空間的條件下完成。 Given a sorted array nums, remove the duplicates in-place such that each element appear only once and re...
閱讀 3422·2023-04-25 22:44
閱讀 926·2021-11-15 11:37
閱讀 1632·2019-08-30 15:55
閱讀 2639·2019-08-30 15:54
閱讀 1080·2019-08-30 13:45
閱讀 1430·2019-08-29 17:14
閱讀 1853·2019-08-29 13:50
閱讀 3402·2019-08-26 11:39