前言
学习算法就像去造楼,怎么让建筑设计的好看而且坚实,高端的大楼,恩 那么就少不了算法,我们需要在有限的地基上,造出好看闪耀同时又能抗的住极端天气的大楼,一直坚信用简单的去解开复杂的,写代码也是如此,我这就是我们为什么学习算法。
一、题目?
描述
山峰元素是指其值大于或等于左右相邻值的元素。给定一个输入数组nums,任意两个相邻元素值不相等,数组可能包含多个山峰。找到索引最大的那个山峰元素并返回其索引。假设 nums[-1] = nums[n] = -∞。
一、示例?
示例1
输入:[2,4,1,2,7,8,4]
返回值:5
二、解题思路
1.这道题是求什么?
从题目上看,这道题主要是输出最大值得索引。抓住重点:最大值,索引。当你理解了这些,那下面我们就可以针对性的去设计思路。
重点:最大值,最大值的索引
输出:最大值得索引
2.设计思路怎么想?
在设计思路前先想一下,什么是最大值?什么是最大值的索引?
当你明白了以上这些之后,下面我们开始正式分析。
1、 当数组a为空时?
数组为空,即索引为 index=0;直接输出就好了
2、 当数组a不为空时?
情况一. 如果a[i] < a[i+1]?
索引最大值:max=i+1;
if(a[i]<a[i+1]){
max=i+1;
}
情况二. 如果a[i] > a[i+1]
索引不变,交换前后值,找出数组最大值
int temp=a[i];
a[i]=a[i+1];
a[i+1]=a[i];
如果不交换值,则会出现以下情况
自测输入 [2,1,4,3]
输出 2
因此,在此步骤需要进行交换值
完整代码
public int solve (int[] a) {
int max=0;
if(a.length<=1 && a==null ){
max= 0;
}
for(int i=0;i<a.length-1;i++){
if(a[i]<a[i+1]){
max=i+1;
}
}
return max;
}
}
总结
学习算法就像盖楼,先易后难,循序渐进。