分享用is_sorted()解决单调数列问题

分享用is_sorted()解决单调数列问题_第1张图片


题目名称 896. 单调数列

目录

题目名称 896. 单调数列

1.题目

2.题目分析

3.题目知识

3.1 is_sorted()

3.2.迭代器与反向迭代器

3.2.1理解迭代器

3.2.2正向迭代器

3.2.3反向迭代器

 最后


推荐阅读顺序:

1.题目->2.题目分析->3.题目知识点


1.题目

如果数组是单调递增或单调递减的,那么它是 单调 的。

如果对于所有 i <= jnums[i] <= nums[j],那么数组 nums 是单调递增的。 如果对于所有 i <= jnums[i]> = nums[j],那么数组 nums 是单调递减的。

当给定的数组 nums 是单调数组时返回 true,否则返回 false


2.题目分析

这个解法不难,重点是相关函数的使用。

分享用is_sorted()解决单调数列问题_第2张图片


3.题目知识

3.1 is_sorted()

  is_sorted() 是算法库<algorithm.h>里面的函数,参数是两个迭代器。判断是否为升序排序,如果是升序排序,就返回true.

  如果用来排是不是降序排序可以用反向迭代器,是降序排序,就返回true.

分享用is_sorted()解决单调数列问题_第3张图片


3.2.迭代器与反向迭代器

3.2.1理解迭代器

迭代器 iterators ,迭代器是一个行为上像指针一样的东西,不同的容器它的底层实现是不一样的

string s1("hello world");//以string中的迭代器为例

s1就是一个对象,这个对象有一个指针,它指向一片空间,就像顺序表一样,这片空间存储的是字符
s1.begin()返回的是第一个有效字符的位置
s1.end()返回的是最后一个有效数据的下一个位置
it1=s1.begin();
*it1;//*it1就是这里第一个有效位置的数据
迭代器不一定是指针

迭代器的最大意义是 它是通用的访问形式

3.2.2正向迭代器

void test()
{
	//遍历string
	//迭代器,iterator像是在string类里面定义的一个类型,它是一个类型属于string这个类域
	string::iterator it1 = s1.begin();//begin返回他第一个位置的迭代器
	while (it1 != s1.end())//end返回的是最后一个数据的下一个位置的迭代器
	{
		*it1+=1;//对这个数据加一
		cout << *it1 << " ";//对这里的数据输出
		++it1;//迭代器前往下一个位置
	}

	//迭代器的通用性
	vector v;//vector是一个通用的类模板
	vector::iterator vit = v.begin();
	while (vit != v.end())
	{
		cout << *vit << " ";
		vit++;
	}
	cout << endl;
}

3.2.3反向迭代器

void test1()
{
	//反向迭代器 reverse_iterator
	//迭代器除了有正向迭代器还有反向迭代器
	//反向迭代器对应rbegin rend,类似一个反向的指针,必须对应使用
	//rbegin() rend()返回的就是反向迭代器

	string s1("1234");

	string::reverse_iterator rit = s1.rbegin();
	auto rit1 = s1.rbegin();//auto为了防止类型过长,可以自动识别
	
	while (rit != s1.rend())
	{
		cout << *rit << " ";
		++rit;//注意这里是++,反向迭代
	}


	//const迭代器
	print(s);
}

 最后

  加油!!!

c0bc156d7a414da0bf696f85f691de59.jpeg

你可能感兴趣的:(题目分享:一些容易遗忘的小点,算法,迭代器,力扣,算法库)