摘要:公眾號(hào)愛寫給定一個(gè)數(shù)組和一個(gè)值,你需要原地移除所有數(shù)值等于的元素,返回移除后數(shù)組的新長(zhǎng)度。示例給定函數(shù)應(yīng)該返回新的長(zhǎng)度并且中的前五個(gè)元素為。注意這五個(gè)元素可為任意順序。如果索引和相等,則索引得到索引的值,并且前移一位。
公眾號(hào):愛寫bug
給定一個(gè)數(shù)組 nums 和一個(gè)值 val,你需要原地移除所有數(shù)值等于 val 的元素,返回移除后數(shù)組的新長(zhǎng)度。
不要使用額外的數(shù)組空間,你必須在原地修改輸入數(shù)組并在使用 O(1) 額外空間的條件下完成。
元素的順序可以改變。你不需要考慮數(shù)組中超出新長(zhǎng)度后面的元素。
Given an array nums and a value val, remove all instances of that value in-place and return the new length.
Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.
The order of elements can be changed. It doesn"t matter what you leave beyond the new length.
示例 1:
給定 nums = [3,2,2,3], val = 3, 函數(shù)應(yīng)該返回新的長(zhǎng)度 2, 并且 nums 中的前兩個(gè)元素均為 2。 你不需要考慮數(shù)組中超出新長(zhǎng)度后面的元素。
示例 2:
給定 nums = [0,1,2,2,3,0,4,2], val = 2, 函數(shù)應(yīng)該返回新的長(zhǎng)度 5, 并且 nums 中的前五個(gè)元素為 0, 1, 3, 0, 4。 注意這五個(gè)元素可為任意順序。 你不需要考慮數(shù)組中超出新長(zhǎng)度后面的元素。
說明:
為什么返回?cái)?shù)值是整數(shù),但輸出的答案是數(shù)組呢?
請(qǐng)注意,輸入數(shù)組是以“引用”方式傳遞的,這意味著在函數(shù)里修改輸入數(shù)組對(duì)于調(diào)用者是可見的。
你可以想象內(nèi)部操作如下:
Confused why the returned value is an integer but your answer is an array?
Note that the input array is passed in by reference, which means modification to the input array will be known to the caller as well.
Internally you can think of this:
// nums 是以“引用”方式傳遞的。也就是說,不對(duì)實(shí)參作任何拷貝 int len = removeElement(nums, val); // 在函數(shù)里修改輸入數(shù)組對(duì)于調(diào)用者是可見的。 // 根據(jù)你的函數(shù)返回的長(zhǎng)度, 它會(huì)打印出數(shù)組中該長(zhǎng)度范圍內(nèi)的所有元素。 for (int i = 0; i < len; i++) { print(nums[i]); }解題思路:
? 只允許原數(shù)組修改,可以用雙指針,左指針 i 自左向右,右指針 j 從右向左。如果索引 i 和 val 相等,則索引 i 得到索引 j 的值,并且 j 前移一位。如果不相等,i 后移一位。
? 因?yàn)橐笫欠祷匦薷暮蟮拈L(zhǎng)度并只考慮該長(zhǎng)度的數(shù)組,那么就不用考慮該長(zhǎng)度之后的數(shù)組,所以只需得到索引 j 的值,不用再把索引 j 的值改為索引 i的值。
Java:class Solution { public int removeElement(int[] nums, int val) { int i=0,j=nums.length-1;//i-左指針;j-右指針 while (i<=j){ if(nums[i]==val){ nums[i]=nums[j];//得到索引j的值,無需把索引j的值改為索引i的值 j--; }else i++; } return j+1; } }Python3:
class Solution: def removeElement(self, nums: List[int], val: int) -> int: i=0 j=len(nums)-1 while i<=j: if(nums[i]==val): nums[i]=nums[j] j-=1 else:i+=1 return j+1總結(jié):
? 這道題本身很簡(jiǎn)單,只要搞清思路,一起都會(huì)變得明了。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/45074.html
摘要:公眾號(hào)愛寫給定一個(gè)數(shù)組和一個(gè)值,你需要原地移除所有數(shù)值等于的元素,返回移除后數(shù)組的新長(zhǎng)度。示例給定函數(shù)應(yīng)該返回新的長(zhǎng)度并且中的前五個(gè)元素為。注意這五個(gè)元素可為任意順序。如果索引和相等,則索引得到索引的值,并且前移一位。 公眾號(hào):愛寫bug 給定一個(gè)數(shù)組 nums 和一個(gè)值 val,你需要原地移除所有數(shù)值等于 val 的元素,返回移除后數(shù)組的新長(zhǎng)度。 不要使用額外的數(shù)組空間,你必須在原地...
摘要:復(fù)雜度分析時(shí)間復(fù)雜度遍歷次空間復(fù)雜度還有沒有優(yōu)化空間方法在某些特定場(chǎng)景下會(huì)進(jìn)行不必要的復(fù)制操作,影響性能。注意尾部的元素有可能是需要剔除的,所以,下一輪循環(huán)要從當(dāng)前索引重新開始。 給定一個(gè)數(shù)組 nums?和一個(gè)值 val,你需要原地移除所有數(shù)值等于?val?的元素,返回移除后數(shù)組的新長(zhǎng)度。不要使用額外的數(shù)組空間,你必須在原地修改輸入數(shù)組并在使用 O(1) 額外空間的條件下完成。 元素的...
此專欄文章是對(duì)力扣上算法題目各種方法的總結(jié)和歸納, 整理出最重要的思路和知識(shí)重點(diǎn)并以思維導(dǎo)圖形式呈現(xiàn), 當(dāng)然也會(huì)加上我對(duì)導(dǎo)圖的詳解. 目的是為了更方便快捷的記憶和回憶算法重點(diǎn)(不用每次都重復(fù)看題解), 畢竟算法不是做了一遍就能完全記住的. 所以本文適合已經(jīng)知道解題思路和方法, 想進(jìn)一步加強(qiáng)理解和記憶的朋友, 并不適合第一次接觸此題的朋友(可以根據(jù)題號(hào)先去力扣看看官方題解, 然后再看本文內(nèi)容). 關(guān)...
摘要:以上函數(shù)默認(rèn)會(huì)對(duì)一個(gè)數(shù)字組成的數(shù)組進(jìn)行按數(shù)字面值大小排序下午雷學(xué)委列表的其他函數(shù)持續(xù)學(xué)習(xí)持續(xù)開發(fā)效果如下,讀者可以仔細(xì)看看是否如學(xué)委所說。 正式的Python專...
摘要:給定一個(gè)數(shù)組和一個(gè)值,你需要原地移除所有數(shù)值等于的元素,返回移除后數(shù)組的新長(zhǎng)度。示例給定函數(shù)應(yīng)該返回新的長(zhǎng)度并且中的前兩個(gè)元素均為。注意這五個(gè)元素可為任意順序。題解判斷元素在不在里面可以刪除中對(duì)應(yīng)值的第一個(gè)官方解答 給定一個(gè)數(shù)組 nums?和一個(gè)值 val,你需要原地移除所有數(shù)值等于?val?的元素,返回移除后數(shù)組的新長(zhǎng)度。 不要使用額外的數(shù)組空間,你必須在原地修改輸入數(shù)組并在使用 O...
閱讀 2566·2021-10-11 10:58
閱讀 1063·2019-08-29 13:58
閱讀 1686·2019-08-26 13:32
閱讀 852·2019-08-26 10:40
閱讀 3288·2019-08-26 10:18
閱讀 1776·2019-08-23 14:18
閱讀 1130·2019-08-23 10:54
閱讀 458·2019-08-22 18:39