LeetCode刷題26-簡單-删除有序數組中的重複項

布小禪 2021-08-15 18:36:15 阅读数:538

本文一共[544]字,预计阅读时长:1分钟~
leetcode 26- 删除 有序

在這裏插入圖片描述

前言

算法作為極其重要的一點,是大學生畢業找工作的核心競爭力,所以為了不落後與人,開始刷力扣算法題!

第一遍,不求最優解,但求能過!!!

博客主頁:布小禪
作者專欄:
Python
Java
這是我刷第 17/100 道力扣簡單題

1. 題目描述

給你一個有序數組 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
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 題目解析

另外開辟一個數組肯定是不行的了,題目不允許

只要原地修改數組,而且數組是有序的

沒辦法,只能用雙指針的方法了

雙指針:

  • 創建一個記錄新數組長度的值,從1開始

  • 一個指針隨數組下標移動

  • 另一個指針記錄不重複元素的個數

  • 遍曆數組

  • 創建當前下標元素和下一個下標元素是否想等的判斷語句

  • 如果不相等,就將下一下標元素賦值給m下標,並令m+1

  • 操作結束後返回m的值

3. 代碼

1. python

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

2. java

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