c++删除排序数组中重复项

class Solution {
public:
    int removeDuplicates(vector<int>& nums) 
    {
        if(nums.empty())  //需判断数组长度 如果为空直接结束   若不判断则会出错
           return 0;     
        int len = 1;
        for(int i=1;i<nums.size();i++)
        {
            if(nums[i-1]!=nums[i])
            {                
                nums[len++]=nums[i];      //一定看清题目,是原地修改,还是nums这个数组
            }
        }
        return len;
    }
};
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是代码实现: ```c++ #include <iostream> #include <algorithm> #include "contact.h" // 假设结构体定义在contact.h中 using namespace std; // 显示联系人信息 void display(Contact *c, int n) { for (int i = 0; i < n; i++) { cout << "ID: " << c[i].id << endl; cout << "Name: " << c[i].name << endl; cout << "Phone: " << c[i].phone << endl; cout << "Email: " << c[i].email << endl; cout << endl; } } // 删除a数组中在b数组中重复出现的联系人信息 // 返回删除后a数组中联系人信息的个数 int deleteRepeat(Contact *a, int n, Contact *b, int m) { int count = n; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (a[i].id == b[j].id) { // 在a数组中删除该联系人信息 for (int k = i; k < n - 1; k++) { a[k] = a[k + 1]; } i--; // 因为删除了一个元素,所以i要减1 count--; // 删除后联系人信息的个数减1 break; } } } return count; } // 将a数组中的联系人信息合并到b数组中 // 返回合并后b数组中联系人信息的个数 int merge(Contact *a, int n, Contact *b, int m) { int count = m; for (int i = 0; i < n; i++) { b[count++] = a[i]; } return count; } // 按联系人id值升序排序 void sort(Contact *c, int n) { sort(c, c + n, [](Contact a, Contact b) { return a.id < b.id; }); } int main() { // 声明结构数组a、b并用测试数据初始化 Contact a[5] = {{1, "Tom", "123456", "tom@abc.com"}, {2, "Jack", "234567", "jack@abc.com"}, {3, "Mary", "345678", "mary@abc.com"}, {4, "Bob", "456789", "bob@abc.com"}, {5, "Alice", "567890", "alice@abc.com"}}; Contact b[8] = {{1, "Tom", "123456", "tom@abc.com"}, {3, "Mary", "345678", "mary@abc.com"}, {4, "Bob", "456789", "bob@abc.com"}, {6, "John", "678901", "john@abc.com"}, {7, "Lucy", "789012", "lucy@abc.com"}, {8, "David", "890123", "david@abc.com"}, {9, "Sarah", "901234", "sarah@abc.com"}, {10, "Mike", "012345", "mike@abc.com"}}; int n = 5; // a数组中联系人信息的个数 int m = 8; // b数组中联系人信息的个数 // 显示a,b数组中数据 cout << "Array a:" << endl; display(a, n); cout << "Array b:" << endl; display(b, m); // 调delete函数从a数组中删除在b数组中重复出现的联系人信息,显示a数组中数据 n = deleteRepeat(a, n, b, m); cout << "After deleting repeat contacts, array a:" << endl; display(a, n); // 调merge函数将a数组中全部联系人信息合并到b数组,显示b数组中数据 m = merge(a, n, b, m); cout << "After merging contacts, array b:" << endl; display(b, m); // 调sort函数对a数组中数据排序,显示a数组中数据 sort(a, n); cout << "After sorting, array a:" << endl; display(a, n); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值