删除有序数组中重复项C++实现
时间: 2024-09-29 18:14:11 浏览: 52
在C++中删除有序数组中的重复项可以采用双指针技巧。这里是一个简单的线性时间复杂度O(n)的解决方案:
```cpp
#include <iostream>
#include <vector>
std::vector<int> removeDuplicates(std::vector<int>& nums) {
if (nums.empty()) return nums;
int i = 0; // 左指针,用于检查是否遇到新值
for (int j = 1; j < nums.size(); ++j) { // 右指针,遍历整个数组
if (nums[i] != nums[j]) { // 如果当前值与前一个不同
i++; // 更新左指针
nums[i] = nums[j]; // 把新值移到有效位置
}
}
nums.resize(i + 1); // 调整大小,去掉多余的元素
return nums;
}
int main() {
std::vector<int> nums = {1, 1, 2, 2, 3, 4, 4, 5};
removeDuplicates(nums);
for (const auto& num : nums) {
std::cout << num << " ";
}
std::cout << "\n";
相关问题
用C++删除有序数组中的重复项的代码
在C++中,可以使用`std::unique`函数配合自定义比较函数来删除数组中的重复元素,因为这个函数可以保留数组中的第一次出现的元素,并自动移除后续的相等元素。以下是一个简单的示例,假设我们有一个整数数组:
```cpp
#include <algorithm> // 包含 unique 函数
#include <iostream>
// 自定义比较函数,用于判断两个元素是否相等
bool compare(int a, int b) {
return a == b;
}
void removeDuplicates(int arr[], int size) {
if (size > 0) {
std::unique(arr, arr + size, compare); // 使用自定义比较函数
size = std::distance(arr, std::unique(arr, arr + size)); // 更新大小到新结束位置
for (int i = 0; i < size; ++i) {
std::cout << arr[i] << " ";
}
} else {
std::cout << "Array is empty.";
}
}
int main() {
int arr[] = {1, 2, 2, 3, 4, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
removeDuplicates(arr, size);
c++实现一个有序数组,请你原地删除重复出现的元素,让出现次数超过三次的元素只出现三次,返回删除删除后数组长度 在 C++ 中,我们可以使用双指针和哈希集合
来实现这个功能。首先创建一个`unordered_set`用于存储已经遇到过的唯一元素,同时维护两个指针`i`和`j`。`i`遍历输入数组,而`j`则是更新后的去重序列的下标。
```cpp
#include <iostream>
#include <unordered_set>
int removeDuplicates(int arr[], int n) {
// 使用 unordered_set 存储 unique elements
std::unordered_set<int> seen;
int j = 0; // 新的序列下标
for (int i = 0; i < n; ++i) {
// 如果元素未见过,或者仅出现过一次,将其添加到 seen 和新序列
if (seen.find(arr[i]) == seen.end() || seen.count(arr[i]) <= 1) {
seen.insert(arr[i]);
arr[j++] = arr[i];
}
}
return j; // 返回去重后的新数组长度
}
int main() {
int arr[] = {1, 2, 2, 3, 4, 4, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
int lengthAfterRemoval = removeDuplicates(arr, n);
for (int i = 0; i < lengthAfterRemoval; ++i)
std::cout << arr[i] << " ";
std::cout << "
阅读全文