布小禪 2021-08-15 18:36:15 阅读数:538
算法作為極其重要的一點,是大學生畢業找工作的核心競爭力,所以為了不落後與人,開始刷力扣算法題!
第一遍,不求最優解,但求能過!!!
給你一個有序數組 nums ,請你 原地 删除重複出現的元素,使每個元素 只出現一次 ,返回删除後數組的新長度。
不要使用額外的數組空間,你必須在 原地 修改輸入數組 並在使用 O(1) 額外空間的條件下完成。
說明:
為什麼返回數值是整數,但輸出的答案是數組呢?
請注意,輸入數組是以「引用」方式傳遞的,這意味著在函數裏修改輸入數組對於調用者是可見的。
你可以想象內部操作如下:
// nums 是以“引用”方式傳遞的。也就是說,不對實參做任何拷貝
int len = removeDuplicates(nums);
// 在函數裏修改輸入數組對於調用者是可見的。
// 根據你的函數返回的長度, 它會打印出數組中 該長度範圍內 的所有元素。
for (int i = 0; i < len; i++) {
print(nums[i]);
}
示例 1:
輸入:nums = [1,1,2]
輸出:2, nums = [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]
解釋:函數應該返回新的長度 5 , 並且原數組 nums 的前五個元素被修改為 0, 1, 2, 3, 4 。不需要考慮數組中超出新長度後面的元素。
提示:
0 <= nums.length <= 3 * 104
-104 <= nums[i] <= 104
nums 已按昇序排列
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
另外開辟一個數組肯定是不行的了,題目不允許
只要原地修改數組,而且數組是有序的
沒辦法,只能用雙指針的方法了
雙指針:
創建一個記錄新數組長度的值,從1開始
一個指針隨數組下標移動
另一個指針記錄不重複元素的個數
遍曆數組
創建當前下標元素和下一個下標元素是否想等的判斷語句
如果不相等,就將下一下標元素賦值給m下標,並令m+1
操作結束後返回m的值
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
m = 1
for i in range(len(nums)-1):
if nums[i] != nums[i+1]:
nums[m] = nums[i+1]
m += 1
return m
class Solution {
public int removeDuplicates(int[] nums) {
int m = 1;
int n = (nums.length)-1;
for (int i=0;i<n;i++){
if (nums[i] != nums[i+1]){
nums[m] = nums[i+1];
m++;
}
}
return m;
}
}
堅持最重要,每日一題必不可少!
版权声明:本文为[布小禪]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/08/20210815183559801y.html