6.删排序数组中的重复项

6.删排序数组中的重复项

题目

在这里插入图片描述

题目分析

使用快慢指针的方式,双指针分别为 slow 和 fast,开始时都指向第一个元素。fast 指针向后遍历数组,如果发现不重复的元素,就将它移到 slow 指向的位置,然后 slow 指针右移一位。

这段代码实现了原地删除重复元素,并保持了相对顺序。最后返回的 slow + 1 即为唯一元素的个数。

#include <vector>

class Solution {
public:
    int removeDuplicates(std::vector<int>& nums) {
        if (nums.empty()) {
            return 0;
        }

        int slow = 0; // 慢指针
        for (int fast = 1; fast < nums.size(); ++fast) {
            if (nums[fast] != nums[slow]) {
                // 不重复的元素,慢指针右移并更新
                ++slow;
                nums[slow] = nums[fast];
            }
        }

        // 返回唯一元素的个数
        return slow + 1;
    }
};
···
在 C 语言中数组中的重复元素通常涉及到排序和遍历两个步骤。这里有一个基本的示例,展示了如何通过使用冒泡排序算法并利用临时数组来完成这个过程: ```c #include <stdio.h> // 数组中的重复元素并返回新的长度 int removeDuplicates(int arr[], int n) { if (n == 0 || n == 1) return n; // 如果数组为空或只有一个元素,直接返回 int temp[n]; // 创建临时数组 int j = 0; // 用于新数组的索引 // 冒泡排序,同时比较并移除重复项 for (int i = 0; i < n - 1; i++) { if (arr[i] != arr[i + 1]) { // 如果当前元素与下一个元素不同 temp[j++] = arr[i]; // 将它放入临时数组 } } // 将最后一个未检查的元素添加到结果数组中,如果需要的话 if (arr[n - 1] != temp[j - 1]) temp[j++] = arr[n - 1]; // 返回新数组的实际长度 return j; } // 测试函数 int main() { int arr[] = {1, 2, 2, 3, 4, 4, 5}; int n = sizeof(arr) / sizeof(arr[0]); int new_len = removeDuplicates(arr, n); printf("数组中的重复元素已除,新的长度为 %d:\n", new_len); // 输出处理后的数组 for (int i = 0; i < new_len; i++) printf("%d ", temp[i]); return 0; } ``` 在这个例子中,我们首先对原始数组进行冒泡排序,然后将非重复元素复制到临时数组。最后,返回临时数组的新长度作为处理后的数组长度。 注意:这种方法会改变原数组,如果你不想改变原数组,可以创建一个新的动态数组或使用其他数据结构(如链表)来实现。另外,这只是一个简单的实现,对于大数据集,更高效的解决方案可能是使用哈希集合(如 `std::unordered_set`)。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值