力扣刷题:寻找峰值(java实现)(代码片段)

谦谦均 谦谦均     2022-12-08     791

关键词:

题目:峰值元素是指其值严格大于左右相邻值的元素。
给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。
你可以假设 nums[-1] = nums[n] = -∞
你必须实现时间复杂度为 O(log n) 的算法来解决此问题。

示例 1:

输入:nums = [1,2,3,1]
输出:2
解释:3 是峰值元素,你的函数应该返回其索引 2

示例 2:

输入:nums = [1,2,1,3,5,6,4]
输出:15 
解释:你的函数可以返回索引 1,其峰值元素为 2;
     或者返回索引 5, 其峰值元素为 6

提示:

  • 1 <= nums.length <= 1000
  • -2^31 <= nums[i] <= 2^31 - 1
  • 对于所有有效的 i 都有 nums[i] != nums[i + 1]

相关标签:数组二分查找

题目比较简单,看代码注释吧…

public int findPeakElement(int[] nums) 
        //如果数组长度是1或者第一个元素就是峰值
        if(nums.length==1||nums[0]>nums[1])
            //返回第一个元素的下标
            return 0;
        
        //对索引在1和数组长度-2范围内的元素进行判断
        //如果是峰值就返回索引
        for (int i = 1; i < nums.length-1; i++) 
            if(nums[i]>nums[i-1]&&nums[i]>nums[i+1])
                return i;
            
        
        //程序运行到这里说明前面都没峰值
        //如果数组最后一个元素是峰值,就返回索引
        if(nums[nums.length-1]>nums[nums.length-2])
            return nums.length-1;
        
        //没有峰值
        return -1;
    

总要尝遍所有的苦,再对生活充满期待。

力扣刷题:括号生成(java实现)(代码片段)

数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。有效括号组合需满足:左括号必须以正确的顺序闭合。示例1:输入:n=3输出:["((()))","(()())",&... 查看详情

力扣刷题:合并区间(java实现)(代码片段)

题目描述:以数组intervals表示若干个区间的集合,其中单个区间为intervals[i]=[starti,endi]。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。示例1:输入:in... 查看详情

力扣刷题:岛屿数量(java实现)(代码片段)

给你一个由'1'(陆地)和'0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以... 查看详情

力扣刷题:全排列(java实现)(代码片段)

题目:给定一个不含重复数字的数组nums,返回其所有可能的全排列。你可以按任意顺序返回答案。示例1:输入:nums=[1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例2:输入:nums=[0,1]输出&#x... 查看详情

力扣刷题:字母异位词分组(java实现)(代码片段)

题目:给你一个字符串数组,请你将字母异位词组合在一起。可以按任意顺序返回结果列表。字母异位词是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母都恰好只用一次。示例1:输入:strs=["eat... 查看详情

力扣刷题:单词搜索(java实现)(代码片段)

题目:给定一个mxn二维字符网格board和一个字符串单词word。如果word存在于网格中,返回true;否则,返回false。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相... 查看详情

力扣刷题:快乐数(java实现)(代码片段)

题目描述:编写一个算法来判断一个数n是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为1,也可能是无限循环但始终变... 查看详情

力扣刷题:最长回文子串(java实现)(代码片段)

题目:给你一个字符串s,找到s中最长的回文子串。示例1:输入:s="babad"输出:"bab"解释:"aba"同样是符合题意的答案。【个人建议最好取第一个】示例2:输入:s="cbbd"... 查看详情

力扣刷题:前k个高频元素(java实现)(代码片段)

题目:给你一个整数数组nums和一个整数k,请你返回其中出现频率前k高的元素。你可以按任意顺序返回答案。示例1:输入:nums=[1,1,1,2,2,3],k=2输出:[1,2]示例2:输入:nums=[1],k=1输出:[1]提示:1<=nums.length<=... 查看详情

力扣刷题:电话号码的字母组合(java实现)(代码片段)

题目:给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回。给出数字到字母的映射如下(与电话按键相同)。注意1不对应任何字母。示例1:输入:digits="23"... 查看详情

力扣刷题:矩阵置零(java实现)(代码片段)

题目:给定一个mxn的矩阵,如果一个元素为0,则将其所在行和列的所有元素都设为0。请使用原地算法。进阶:一个直观的解决方案是使用O(mn)的额外空间,但这并不是一个好的解决方案。一个简单的改进方案... 查看详情

力扣刷题:三数之和(java实现)(代码片段)

题目:给你一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b,c,使得a+b+c=0?请你找出所有和为0且不重复的三元组。标签:数组,双指针,排序注意:答案中不可以包... 查看详情

力扣刷题:无重复字符的最长子串(java实现)(代码片段)

题目:给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。示例1:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串是“abc”,所以其长度为3。示例2:输入:s="bbbbb"输出:1解释:因为... 查看详情

力扣刷题:从前序与中序遍历序列构造二叉树(java实现)(代码片段)

题目:给定一棵树的前序遍历preorder与中序遍历inorder。请构造二叉树并返回其根节点。示例1:Input:preorder=[3,9,20,15,7],inorder=[9,3,15,20,7]Output:[3,9,20,null,null,15,7]示例2:Input:preorder=[-1],inorder=[-1]Output:[- 查看详情

力扣刷题:填充每个节点的下一个右侧节点指针(java实现)(代码片段)

题目:给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:structNodeintval;Node*left;Node*right;Node*next;填充它的每个next指针,让这个指针指向其下一个右侧节点。如果... 查看详情

力扣刷题详解(含代码动态展示)(代码片段)

(文章目录)一、448.找到所有数组中消失的数字1.完整过程动态展示2.代码实现int*findDisappearedNumbers(int*nums,intnumsSize,int*returnSize)int*ptr=(int*)malloc(sizeof(int)*numsSize);intindex=0;intnoindex=0;while(index<numsSize)if(num 查看详情

力扣刷题每日打卡(代码片段)

​力扣刷题:重新排列数组:/***Note:Thereturnedarraymustbemalloced,assumecallercallsfree().*/int*shuffle(int*nums,intnumsSize,intn,int*returnSize)if(numsSize==1)*returnSize=1;returnnums;in 查看详情

力扣刷题每日打卡(代码片段)

​力扣刷题:重新排列数组:/***Note:Thereturnedarraymustbemalloced,assumecallercallsfree().*/int*shuffle(int*nums,intnumsSize,intn,int*returnSize)if(numsSize==1)*returnSize=1;returnnums;in 查看详情