返回
刷题打卡:LeetCode 26. 删除有序数组中的重复项
前端
2023-12-11 05:36:06
各位题友大家好,我是技术博客作者 [昵称],很高兴与大家分享我刷 LeetCode 的解题思路和心得。今天我们来解决第 26 题:删除有序数组中的重复项。
题目
给定一个有序数组 nums
,请原地删除重复的元素,使得每个元素只出现一次。返回数组的新长度。
例如:
输入:nums = [1,1,2]
输出:2, nums = [1,2]
解题思路:
这道题本质上要求我们遍历数组并删除重复的元素。我们可以使用双指针法来解决这个问题。
算法步骤:
- 定义两个指针
i
和j
,其中i
为慢指针,j
为快指针。 - 从
j = 0
开始,遍历数组。 - 如果
nums[i] != nums[j]
,则说明当前元素与前一个元素不同,我们将其赋值给nums[i+1]
,并将i
加 1。 - 否则,如果
nums[i] == nums[j]
,则说明当前元素与前一个元素相同,我们只需将j
加 1,继续遍历即可。 - 重复步骤 3-4,直到
j
遍历完数组。 - 返回
i+1
,表示数组的新长度。
代码示例:
C++:
int removeDuplicates(vector<int>& nums) {
if (nums.empty()) return 0;
int i = 0;
for (int j = 1; j < nums.size(); j++) {
if (nums[i] != nums[j]) {
nums[++i] = nums[j];
}
}
return i + 1;
}
Java:
public class Solution {
public int removeDuplicates(int[] nums) {
if (nums.length == 0) return 0;
int i = 0;
for (int j = 1; j < nums.length; j++) {
if (nums[i] != nums[j]) {
nums[++i] = nums[j];
}
}
return i + 1;
}
}
Python:
def removeDuplicates(nums):
if not nums: return 0
i = 0
for j in range(1, len(nums)):
if nums[i] != nums[j]:
nums[i+1] = nums[j]
i += 1
return i + 1
Rust:
fn remove_duplicates(nums: &mut [i32]) -> usize {
if nums.is_empty() {
return 0;
}
let mut i = 0;
for j in 1..nums.len() {
if nums[i] != nums[j] {
nums[i + 1] = nums[j];
i += 1;
}
}
i + 1
}
Go:
func removeDuplicates(nums []int) int {
if len(nums) == 0 {
return 0
}
i := 0
for j := 1; j < len(nums); j++ {
if nums[i] != nums[j] {
nums[i+1] = nums[j]
i++
}
}
return i + 1
}
总结:
使用双指针法可以高效地删除有序数组中的重复元素。只要注意指针的移动顺序和条件即可。希望这篇文章对各位刷题打卡有所帮助,让我们一起努力,提高编程技能!