給定一個排序數組,你需要在原地刪除重復出現的元素,使得每個元素只出現一次,返回移除后數組的新長度。
不要使用額外的數組空間,你必須在原地修改輸入數組并在使用 O(1) 額外空間的條件下完成。
Given a sorted array nums, remove the duplicates in-place such that each element appear only once 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.
示例 1:
給定數組 nums = [1,1,2], 函數應該返回新的長度 2, 并且原數組 nums 的前兩個元素被修改為 1, 2。 你不需要考慮數組中超出新長度后面的元素。
示例 2:
給定 nums = [0,0,1,1,1,2,2,3,3,4], 函數應該返回新的長度 5, 并且原數組 nums 的前五個元素被修改為 0, 1, 2, 3, 4。 你不需要考慮數組中超出新長度后面的元素。
說明:
為什么返回數值是整數,但輸出的答案是數組呢?
請注意,輸入數組是以“引用”方式傳遞的,這意味著在函數里修改輸入數組對于調用者是可見的。
你可以想象內部操作如下:
// nums 是以“引用”方式傳遞的。也就是說,不對實參做任何拷貝 int len = removeDuplicates(nums); // 在函數里修改輸入數組對于調用者是可見的。 // 根據你的函數返回的長度, 它會打印出數組中該長度范圍內的所有元素。 for (int i = 0; i < len; i++) { print(nums[i]); }解題思路:
? 定義兩個指針,指針 i 索引遍歷數組,指針 j 索引值與 i 索引值比較,如果相等則 i 繼續遍歷,如果不等則將索引 i 的值賦值得到索引 j+1 的值。
Java:class Solution { public int removeDuplicates(int[] nums) { int numsLen = nums.length; if (numsLen < 1) return numsLen;//如果數組只有一個值或空數組,直接返回該數組的長度 int j = 0; for (int i = 1; i < numsLen; i++) {//指針 i 從從索引 1 開始遍歷數組 if (nums[i] != nums[j]) {//與索引 j 的值比較 nums[++j] = nums[i];//如果不相等 索引j+1 ,并得到索引i的值 } } return j + 1;//返回到指針 j,數組的長度 } }
? python這道題并沒有很特殊的解法。
Python3:class Solution: def removeDuplicates(self, nums: List[int]) -> int: numsLen = len(nums) if(numsLen < 1): return numsLen j = 0 for i in range(1, numsLen): if nums[j] != nums[i]: j += 1 nums[j] = nums[i] return j+1
公眾號:愛寫bug(ID:iCodeBugs)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/45153.html
給定一個排序數組,你需要在原地刪除重復出現的元素,使得每個元素只出現一次,返回移除后數組的新長度。 不要使用額外的數組空間,你必須在原地修改輸入數組并在使用 O(1) 額外空間的條件下完成。 Given a sorted array nums, remove the duplicates in-place such that each element appear only once and re...
摘要:給定一個排序數組,你需要在原地刪除重復出現的元素,使得每個元素只出現一次,返回移除后數組的新長度。不要使用額外的數組空間,你必須在原地修改輸入數組并在使用額外空間的條件下完成。聲明兩個指針,為快指針,為慢指針如果遇到相同的數,那么就跳過,。 給定一個排序數組,你需要在原地刪除重復出現的元素,使得每個元素只出現一次,返回移除后數組的新長度。不要使用額外的數組空間,你必須在原地修改輸入數組...
摘要:給定一個排序數組,你需要在原地刪除重復出現的元素,使得每個元素最多出現兩次,返回移除后數組的新長度。正確思路對于每一個元素,都進行移動?;蛘弑容^不到最后一個對象。 給定一個排序數組,你需要在原地刪除重復出現的元素,使得每個元素最多出現兩次,返回移除后數組的新長度。不要使用額外的數組空間,你必須在原地修改輸入數組并在使用 O(1) 額外空間的條件下完成。 錯誤思路:由26題跳過一個的思...
摘要:題目比較簡單,就是找出數組不重復的數字,返回不重復的數字個數。無需刪除重復數字,只需要保證數組的前位為不重復的個數字即可代碼如下 Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.Do not all...
此專欄文章是對力扣上算法題目各種方法的總結和歸納, 整理出最重要的思路和知識重點并以思維導圖形式呈現, 當然也會加上我對導圖的詳解. 目的是為了更方便快捷的記憶和回憶算法重點(不用每次都重復看題解), 畢竟算法不是做了一遍就能完全記住的. 所以本文適合已經知道解題思路和方法, 想進一步加強理解和記憶的朋友, 并不適合第一次接觸此題的朋友(可以根據題號先去力扣看看官方題解, 然后再看本文內容). 關...
閱讀 4365·2021-11-24 10:24
閱讀 1409·2021-11-22 15:22
閱讀 2038·2021-11-17 09:33
閱讀 2428·2021-09-22 15:29
閱讀 515·2019-08-30 15:55
閱讀 1652·2019-08-29 18:42
閱讀 2731·2019-08-29 12:55
閱讀 1772·2019-08-26 13:55