算法题-vector+unique+distance

1、distance与unique都是STL中的函数,使用时需引入头文件#include //STL 通用算法
2、例题
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。

不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array

代码

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
      
        return distance(nums.begin(),unique(nums.begin(),nums.end()));
    }
};

3、思考
1)nums.begin()返回的是迭代器(迭代器是一种对象,它能够用来遍历STL容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。迭代器修改了常规指针的接口,所谓迭代器是一种概念上的抽象:那些行为上象迭代器的东西都可以叫做迭代器。)
2)distance() 函数用于计算两个迭代器表示的范围内包含元素的个数
3)unique()unique的作用unique函数的去重过程实际上就是不停的把后面不重复的元素移到前面来,也可以说是用不重复的元素占领重复元素的位置,如下:

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;
int main() {
	vector<int>nums = { 1,1,2 };
	cout << "1、vector的内容为:" << endl;//无法直接输出
	for (int i = 0; i < nums.size(); i++) {
		cout << nums[i] << '\t';
	}
	cout << endl;
	cout<<"2、去重之后的元素个数" << distance(nums.begin(),unique(nums.begin(),nums.end())) << endl;
	cout << "3、此时数组情况:" << endl;
	for (int i = 0; i < nums.size(); i++) {
		cout << nums[i] << '\t';
	}
		
	return 1;
}
/*
返回结果:
1、vector的内容为:
1       1       2
2、去重之后的元素个数2
3、此时数组情况:
1       2       2

*/


unique函数的执行过程类似下面这个函数

iterator My_Unique (iterator first, iterator last)
{
  if (first==last) return last;
 
  iterator result = first;
  while (++first != last)
  {
    if (!(*result == *first)) 
      *(++result)=*first;
  }
  return ++result;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值