2022-04-06

LeetCode 心得:

数组问题

数组中有一类问题是设计到了数组的内可能存在的重复数据的问题,通常有几种常见的处理方式:

1.使用集合(set)数据结构,可以直接将重复的元素删除掉,具体方法:

Set<Integer> set = new HashSet<>(); //创建set集合
set.add();//这个函数如果遇到重复的元素会返回false

2.若是目标就是这些重复的元素则有:

1.可以先考虑对数组进行排序操作,这样可以将重复的元素都放在一起便于操作。

2.可以使用hashMap来对数组进行操作:

HashMap<int,int> map=new HashMap<>;
//先把数组nums1的所有元素都存放到map中,其中key是数组中的元素,value是这个元素出现在数组中的次数
for(int i = 0;i <  nums.length();i++)
{
      map.put(nums[i],map.getOrDefault(nums[i],0) + 1);
}

迭代器

迭代器的一些小操作:

1.简单的介绍:

要访问顺序容器和关联容器中的元素,需要通过“迭代器(iterator)”进行。迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。迭代器可以指向容器中的某个元素,通过迭代器就可以读写它指向的元素。从这一点上看,迭代器和指针类似。

迭代器按照定义方式分成以下四种。

  1. 正向迭代器,定义方法如下:

容器类名::iterator 迭代器名;

  1. 常量正向迭代器,定义方法如下:

容器类名::const_iterator 迭代器名;

  1. 反向迭代器,定义方法如下:

容器类名::reverse_iterator 迭代器名;

  1. 常量反向迭代器,定义方法如下:

容器类名::const_reverse_iterator 迭代器名;

迭代器用法示例

通过迭代器可以读取它指向的元素,*迭代器名就表示迭代器指向的元素。通过非常量迭代器还能修改其指向的元素。

迭代器都可以进行++操作。反向迭代器和正向迭代器的区别在于:

  • 对正向迭代器进行++操作时,迭代器会指向容器中的后一个元素;
  • 而对反向迭代器进行++操作时,迭代器会指向容器中的前一个元素。

begin 成员函数返回指向容器中第一个元素的迭代器。++i 使得 i 指向容器中的下一个元素。end 成员函数返回的不是指向最后一个元素的迭代器,而是指向最后一个元素后面的位置的迭代器,因此循环的终止条件是i != v.end()。

后置++要多生成一个局部对象 tmp,因此执行速度比前置的慢。同理,迭代器是一个对象,STL 在重载迭代器的++运算符时,后置形式也比前置形式慢。在次数很多的循环中,++ii++可能就会造成运行时间上可观的差别了。因此,本教程在前面特别提到,对循环控制变量i,要养成写++i、不写i++的习惯。

同时,介绍三种迭代器的功能:

1.正向

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容