当前位置: 首页 > 后端技术 > Java

LeetCode-162-FindPeak

时间:2023-04-01 22:53:50 Java

FindPeak题目说明:peak元素是指值大于左右相邻值的元素。给定一个输入数组nums,找到峰值元素并返回其索引。该数组可能包含多个峰,在这种情况下,返回任何一个峰的位置就足够了。您可以假设nums[-1]=nums[n]=-∞。例子见LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。方案一:数组遍历首先判断两种特殊情况:如果只有一个元素,直接返回第一个元素的索引位;如果有两个元素,直接根据两个元素的大小返回对应的索引位。如果数组nums的元素多于2个,从第一个元素开始遍历,判断是否是峰:先判断数组的第一个数位,如果大于第二个数位的值,则返回0;否则,从1遍历到nums。length-2元素,判断是否为峰值,如果是峰值,直接返回对应的索引位;最后,如果没有找到峰值,则判断最后一个元素是否大于前一个元素的值,如果是,则返回最大索引位,否则返回-1,表示没有峰值。publicclassLeetCode_162{publicstaticintfindPeakElement(int[]nums){//如果只有一个元素,直接返回第一个元素的索引位if(nums.length==1){return0;}//如果有两个元素,则根据两个元素的大小直接返回对应的索引位if(nums.length==2){if(nums[0]>nums[1]){return0;}else{返回1;}}//特殊判断数组的第一位,如果大于第二位的值,则返回0if(nums[0]>nums[1]){return0;}整数索引=1;//遍历从1到nums.length-2的元素,判断是否为峰值for(;indexnums[index-1]){if(nums[index]>nums[index+1]){返回索引;}}else{if(nums[index]>nums[index+1]){index++;}}}//如果之前没有找到peak,则判断最后一个元素是否大于前一个元素值,如果是,则返回最大的索引位,否则,返回-1表示没有peakif(nums[nums.length-1]>nums[nums.length-2]){返回nums。长度-1;}else{返回-1;}}publicstaticvoidmain(String[]args){int[]nums=newint[]{1,2,1,3,5,6,4};//测试用例,预期返回值:1或5System.out.println(findPeakElement(nums));}}【每日留言】想要赚到这点钱,就得吃这份苦,做人生的强者,不能计较得失。