摘要:題目給定一個排序數組,你需要在原地刪除重復出現的元素,使得每個元素最多出現兩次,返回移除后數組的新長度。示例給定函數應返回新長度并且原數組的前五個元素被修改為。也就是說,不對實參做任何拷貝在函數里修改輸入數組對于調用者是可見的。
題目
給定一個排序數組,你需要在原地刪除重復出現的元素,使得每個元素最多出現兩次,返回移除后數組的新長度。
不要使用額外的數組空間,你必須在原地修改輸入數組并在使用 O(1) 額外空間的條件下完成。
示例 1:
給定 nums = [1,1,1,2,2,3],
函數應返回新長度 length = 5, 并且原數組的前五個元素被修改為 1, 1, 2, 2, 3 。
你不需要考慮數組中超出新長度后面的元素。
示例 2:
給定 nums = [0,0,1,1,1,1,2,3,3],
函數應返回新長度 length = 7, 并且原數組的前五個元素被修改為 0, 0, 1, 1, 2, 3, 3 。
你不需要考慮數組中超出新長度后面的元素。
說明:
為什么返回數值是整數,但輸出的答案是數組呢?
請注意,輸入數組是以“引用”方式傳遞的,這意味著在函數里修改輸入數組對于調用者是可見的。
你可以想象內部操作如下:
// nums 是以“引用”方式傳遞的。也就是說,不對實參做任何拷貝 int len = removeDuplicates(nums); // 在函數里修改輸入數組對于調用者是可見的。 // 根據你的函數返回的長度, 它會打印出數組中該長度范圍內的所有元素。 for (int i = 0; i < len; i++) { print(nums[i]); }題解
這是一類問題,因為有序才能去除重復項,我們需要一個變量cnt去記錄出現了多少詞重復的元素,如果我們遍歷的時候遇到的元素不同,把這個變量設置成1,從頭開始急速,如果已經超過了k個,那么久跳過去。所以這里給出了最多重復k個的一個方法。
javaclass Solution { public int removeDuplicates(int[] nums) { return removeDuplicates(nums, nums.length, 2); } int removeDuplicates(int A[], int n, int k) { if (n <= k) return n; int lengthIndex = 1; int cnt = 1; for (int j = 1; j < n; j++) { if (A[j] != A[j - 1]) { cnt = 1; A[lengthIndex++] = A[j]; } else { if (cnt < k) { A[lengthIndex++] = A[j]; cnt++; } } } return lengthIndex; } }Python
class Solution: def removeDuplicates(self, nums): """ :type nums: List[int] :rtype: int """ return self.removeDuplicatesHelper(nums, len(nums), 2) def removeDuplicatesHelper(self, A, n, k): if n <= k: return n lengthIndex = 1 cnt = 1 for j in range(1, n): if A[j] != A[j - 1]: cnt = 1 A[lengthIndex] = A[j] lengthIndex += 1 else: if cnt < k: A[lengthIndex] = A[j] cnt += 1 lengthIndex += 1 return lengthIndex復雜度
空間復雜度:o(1)
時間復雜度:o(n)
9月技術文章匯總
【Leetcode】79.單詞搜索
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://www.ezyhdfw.cn/yun/42614.html
摘要:題目給定一個排序鏈表,刪除所有含有重復數字的節(jié)點,只保留原始鏈表中沒有重復出現的數字。示例輸入輸出示例輸入輸出題解在所有題目中,我覺得鏈表題目是最簡單的。具體畫圖模擬一道題就可以了。 題目 給定一個排序鏈表,刪除所有含有重復數字的節(jié)點,只保留原始鏈表中 沒有重復出現 的數字。 示例 1: 輸入: 1->2->3->3->4->4->5 輸出: 1->2->5 示例 2: 輸入: 1->...
摘要:題目給定一個排序鏈表,刪除所有含有重復數字的節(jié)點,只保留原始鏈表中沒有重復出現的數字。示例輸入輸出示例輸入輸出題解在所有題目中,我覺得鏈表題目是最簡單的。具體畫圖模擬一道題就可以了。 題目 給定一個排序鏈表,刪除所有含有重復數字的節(jié)點,只保留原始鏈表中 沒有重復出現 的數字。 示例 1: 輸入: 1->2->3->3->4->4->5 輸出: 1->2->5 示例 2: 輸入: 1->...
前端LeetCode刷題 下面是已刷的題目的目錄。GitHub:https://github.com/cunzaizhuy...每日打卡更新中,歡迎關注。 數組類 26 刪除排序數組中的重復項 27 移除元素 35 搜索插入位置 66 加1 80 medium 刪除排序數組中的重復項2 88 合并兩個有序數組 167 兩數之和II - 輸入有序數組 118 楊輝三角 169 easy 求眾數 1...
摘要:分布式的管理和當我在談論架構時我在談啥狀態(tài)碼詳解無狀態(tài)協議和請求支持哪些方法分層協議棧有哪些數據結構運用場景說說你常用的命令為什么要有包裝類面向對象的特征是啥是啥有什么好處系統設計工程在線診斷系統設計與實現索引背后的數據結構及算法原理軟技能 HTTP 【HTTP】分布式session的管理 【HTTP】Cookie和Session 【HTTP】當我在談論RestFul架構時我在談啥?...
摘要:微信公眾號記錄截圖記錄截圖目前關于這塊算法與數據結構的安排前。已攻略返回目錄目前已攻略篇文章。會根據題解以及留言內容,進行補充,并添加上提供題解的小伙伴的昵稱和地址。本許可協議授權之外的使用權限可以從處獲得。 Create by jsliang on 2019-07-15 11:54:45 Recently revised in 2019-07-15 15:25:25 一 目錄 不...
閱讀 3845·2023-04-26 02:32
閱讀 4452·2021-11-23 10:05
閱讀 2462·2021-10-08 10:04
閱讀 2989·2021-09-22 16:06
閱讀 3775·2021-09-22 15:27
閱讀 909·2019-08-30 15:54
閱讀 1950·2019-08-30 13:50
閱讀 2869·2019-08-29 13:56