求数组最大值常用方法

今天六一儿童节,刷了一道leetcode题,是小孩子分糖果的题,也算是官方祝福了哈哈。

题中有求数组中最大值的问题(不用排序),我就是用最土的方法写的,写完看评论区,哎真是太low了,这种经常用到的代码块,还是有必要做得精简一点,于是借此罗列一下好看点的写法。

给出数组 K ,求其max_value.

最土方法

int n=K.size();
int max=K[0]; for(int i=1;i<n;i++){   if(max<K[i])
    max=K[i]; }
如果要定位最大值位置,就还要多一个变量pos;if语句里加一句:pos=i

此种方法最土,最没有水平,是学编程的第一节课就会用的方法。

C++使用max_element()函数

我们先看看max_element的源码:

template<class ForwardIterator>
ForwardIterator max_element(ForwardIterator first, ForwardIterator last)
{
    if(first == last)
        return first;
    ForwardIterator result = first; 
    while(++first != last)
        if(*result < *first)
            result = first;
    return result;
}

其返回的是迭代器,这里回顾下迭代器,迭代器是一种类型,可以用于指向容器中的元素,读取迭代器(*Iterator)可以读取元素,这一点类似指针。

向量的 begin()函数返回一个指向容器头部对象的迭代器,要注意的是,end()函数返回的迭代器,指向容器末再往后一个的位置。

我们可以从上述源码看出,结束条件是  ++first!=last,而不是我们常用的 i!=n-1,原因就在这里。

int max_value = *max_element(K.begin(), K.end());  K是vector
int max_value = *max_element(K, K+K_len);       K是数组

一句话就解决,这可好太多了。

……

 

上一篇:小说接入UC浏览器内核技术对话(一)


下一篇:70. 爬楼梯