摘要:公眾號愛寫給定一個數組和一個值,你需要原地移除所有數值等于的元素,返回移除后數組的新長度。示例給定函數應該返回新的長度并且中的前五個元素為。注意這五個元素可為任意順序。如果索引和相等,則索引得到索引的值,并且前移一位。
公眾號:愛寫bug
給定一個數組 nums 和一個值 val,你需要原地移除所有數值等于 val 的元素,返回移除后數組的新長度。
不要使用額外的數組空間,你必須在原地修改輸入數組并在使用 O(1) 額外空間的條件下完成。
元素的順序可以改變。你不需要考慮數組中超出新長度后面的元素。
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, 函數應該返回新的長度 2, 并且 nums 中的前兩個元素均為 2。 你不需要考慮數組中超出新長度后面的元素。
示例 2:
給定 nums = [0,1,2,2,3,0,4,2], val = 2, 函數應該返回新的長度 5, 并且 nums 中的前五個元素為 0, 1, 3, 0, 4。 注意這五個元素可為任意順序。 你不需要考慮數組中超出新長度后面的元素。
說明:
為什么返回數值是整數,但輸出的答案是數組呢?
請注意,輸入數組是以“引用”方式傳遞的,這意味著在函數里修改輸入數組對于調用者是可見的。
你可以想象內部操作如下:
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 是以“引用”方式傳遞的。也就是說,不對實參作任何拷貝 int len = removeElement(nums, val); // 在函數里修改輸入數組對于調用者是可見的。 // 根據你的函數返回的長度, 它會打印出數組中該長度范圍內的所有元素。 for (int i = 0; i < len; i++) { print(nums[i]); }解題思路:
? 只允許原數組修改,可以用雙指針,左指針 i 自左向右,右指針 j 從右向左。如果索引 i 和 val 相等,則索引 i 得到索引 j 的值,并且 j 前移一位。如果不相等,i 后移一位。
? 因為要求是返回修改后的長度并只考慮該長度的數組,那么就不用考慮該長度之后的數組,所以只需得到索引 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總結:
? 這道題本身很簡單,只要搞清思路,一起都會變得明了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75135.html
摘要:公眾號愛寫給定一個數組和一個值,你需要原地移除所有數值等于的元素,返回移除后數組的新長度。示例給定函數應該返回新的長度并且中的前五個元素為。注意這五個元素可為任意順序。如果索引和相等,則索引得到索引的值,并且前移一位。 公眾號:愛寫bug 給定一個數組 nums 和一個值 val,你需要原地移除所有數值等于 val 的元素,返回移除后數組的新長度。 不要使用額外的數組空間,你必須在原地...
摘要:復雜度分析時間復雜度遍歷次空間復雜度還有沒有優化空間方法在某些特定場景下會進行不必要的復制操作,影響性能。注意尾部的元素有可能是需要剔除的,所以,下一輪循環要從當前索引重新開始。 給定一個數組 nums?和一個值 val,你需要原地移除所有數值等于?val?的元素,返回移除后數組的新長度。不要使用額外的數組空間,你必須在原地修改輸入數組并在使用 O(1) 額外空間的條件下完成。 元素的...
此專欄文章是對力扣上算法題目各種方法的總結和歸納, 整理出最重要的思路和知識重點并以思維導圖形式呈現, 當然也會加上我對導圖的詳解. 目的是為了更方便快捷的記憶和回憶算法重點(不用每次都重復看題解), 畢竟算法不是做了一遍就能完全記住的. 所以本文適合已經知道解題思路和方法, 想進一步加強理解和記憶的朋友, 并不適合第一次接觸此題的朋友(可以根據題號先去力扣看看官方題解, 然后再看本文內容). 關...
摘要:以上函數默認會對一個數字組成的數組進行按數字面值大小排序下午雷學委列表的其他函數持續學習持續開發效果如下,讀者可以仔細看看是否如學委所說。 正式的Python專...
摘要:給定一個數組和一個值,你需要原地移除所有數值等于的元素,返回移除后數組的新長度。示例給定函數應該返回新的長度并且中的前兩個元素均為。注意這五個元素可為任意順序。題解判斷元素在不在里面可以刪除中對應值的第一個官方解答 給定一個數組 nums?和一個值 val,你需要原地移除所有數值等于?val?的元素,返回移除后數組的新長度。 不要使用額外的數組空間,你必須在原地修改輸入數組并在使用 O...
閱讀 3380·2021-11-22 09:34
閱讀 650·2021-11-19 11:29
閱讀 1350·2019-08-30 15:43
閱讀 2232·2019-08-30 14:24
閱讀 1867·2019-08-29 17:31
閱讀 1223·2019-08-29 17:17
閱讀 2617·2019-08-29 15:38
閱讀 2729·2019-08-26 12:10