龙空技术网

打基础之,LeetCode算法题第9日刷,数组最大值问题

吾是我师 686

前言:

而今姐妹们对“java数组求最大值”大致比较重视,大家都需要知道一些“java数组求最大值”的相关内容。那么小编同时在网上搜集了一些有关“java数组求最大值””的相关知识,希望我们能喜欢,小伙伴们一起来学习一下吧!

一直很纠结算法的文章应该怎么写。最后觉得还是从最简单的level开始写吧,一开始就弄些重量级的,什么人工智能,机器学习的算法,还要有大量的数学以及优化的知识,小白们估计会很郁闷,当然我也不一定能做出来对吧。

我计划每题给出两种语言的解决方案,一种静态语言,一种动态语言。

我选择C语言和Python,本来考虑Java,但是篇幅有限,有兴趣的朋友自己试试。

LeetCode 852. 求一个山峰数组中最大值元素的索引(Peak Index in a Mountain Array)

问题描述:

满足如下两个条件的叫做“山峰数组”:

A.length >= 3 ;如果 0 < i < A.length - 1 则 A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1] 成立;

现在给定一个山峰数组,求出i的值。

注:

3 <= A.length <= 100000 <= A[i] <= 10^6A是一个山峰数组示例:C语言实现:

这是一个很简单的问题,其实就是求数组最大值的索引。我们遍历一次数组就可求得。不要被题目备注的那些条件所迷惑。有些时候你暂时忽略一些条件,站在一个更加宽泛的角度去思考,问题很可能没有那么复杂。

时间复杂度O(n)。

python语言实现:

我们很自然会想到一句return A.index(max(A))就可以了。这样写虽然简单直接,但是效率要差一些,想想,max(A)实际上是需要遍历一次A的。A.index()也要遍历一次A,所以基本上等于要对A遍历2次。

我的写法是仿照上面C语言的实现,这样只需要对A遍历一次即可。

我看了其他人提交的代码,比较复杂,我觉得用python就是为了提升编码效率。对于这一个小问题,弄个二十几行的代码出来似乎很不划算,上面C的实现也不过用了9行。

用C来解决一个问题,基本上表明性能是我们应该重点考虑的,如果要求用python来解决一个问题的时候,往往意味着性能不是最重要的。

所以用python开发的时候,不要把总期望去压榨性能,除非简单的实现导致性能表现的不尽人意而且我们有不太麻烦的更改可以解决,否则的话,我还是比较建议python的代码尽量写的简单直接些。

标签: #java数组求最大值