152.找出峰值(力扣)

2024-05-29 06:12
文章标签 力扣 峰值 找出 152

本文主要是介绍152.找出峰值(力扣),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

代码解决

class Solution {
public:// 函数用于找到山峰元素的索引vector<int> findPeaks(vector<int>& mountain) {vector<int> result;  // 用于存储山峰元素的索引// 遍历数组,从第二个元素到倒数第二个元素for(int i = 1; i + 1 < mountain.size(); i++) {// 如果当前元素大于前一个元素且大于后一个元素,则它是一个山峰if(mountain[i - 1] < mountain[i] && mountain[i] > mountain[i + 1]) {result.push_back(i);  // 将山峰的索引加入结果向量}}return result;  // 返回所有山峰的索引}
};

详细解释

  1. 函数签名

    • vector<int> findPeaks(vector<int>& mountain):函数接受一个引用类型的整数向量作为输入,并返回一个包含所有山峰元素索引的整数向量。
  2. 定义结果向量

    • vector<int> result;:用于存储山峰元素的索引。
  3. 遍历数组

    • for(int i = 1; i + 1 < mountain.size(); i++):从第二个元素(索引1)到倒数第二个元素(索引mountain.size() - 2)进行遍历。这样可以确保在检查mountain[i]时,mountain[i-1]mountain[i+1]都是有效的索引。
  4. 检查山峰条件

    • if(mountain[i - 1] < mountain[i] && mountain[i] > mountain[i + 1]):判断当前元素是否大于其前一个元素且大于其后一个元素。如果满足条件,则当前元素是一个山峰。
  5. 记录山峰索引

    • result.push_back(i);:将当前山峰的索引添加到结果向量中。
  6. 返回结果

    • return result;:返回包含所有山峰索引的结果向量。

例子

假设输入数组为:[1, 3, 7, 8, 7, 5, 3, 2]

根据代码逻辑:

  • 对于索引i = 1mountain[0] = 1mountain[1] = 3mountain[2] = 7,不满足山峰条件。
  • 对于索引i = 2mountain[1] = 3mountain[2] = 7mountain[3] = 8,不满足山峰条件。
  • 对于索引i = 3mountain[2] = 7mountain[3] = 8mountain[4] = 7,满足山峰条件,索引3加入结果。
  • 对于索引i = 4mountain[3] = 8mountain[4] = 7mountain[5] = 5,不满足山峰条件。
  • 对于索引i = 5mountain[4] = 7mountain[5] = 5mountain[6] = 3,满足山峰条件,索引5加入结果。

最终结果为[3, 5],表示输入数组中的山峰元素索引。

这篇关于152.找出峰值(力扣)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1012868

相关文章

两数之和--力扣1

两数之和 题目思路C++代码 题目 思路 根据题目要求,元素不能重复且不需要排序,我们这里使用哈希表unordered_map。注意题目说了只对应一种答案。 所以我们在循环中,使用目标值减去当前循环的nums[i],得到差值,如果我们在map中能够找到这个差值,就说明存在两个整数的和为目标值。 如果没有找到,就将当前循环的nums[i]以及下标i放入map中,以便后续查

找出php中可能有问题的代码行

前言 当你发现一个平时占用cpu比较少的进程突然间占用cpu接近100%时,你如何找到导致cpu飙升的原因?我的思路是,首先找到进程正在执行的代码行,从而确定可能有问题的代码段。然后,再仔细分析有问题的代码段,从而找出原因。 如果你的程序使用的是c、c++编写,那么你可以很容易的找到正在执行的代码行。但是,程序是php编写的,如何找到可能有问题的代码行呢?这个问题就是本文要解决的问题。 背景

力扣第347题 前K个高频元素

前言 记录一下刷题历程 力扣第347题 前K个高频元素 前K个高频元素 原题目: 分析 我们首先使用哈希表来统计数字出现的频率,然后我们使用一个桶排序。我们首先定义一个长度为n+1的数组,对于下图这个示例就是长度为7的数组。为什么需要一个长度为n+1的数组呢?假如说总共有三个数字都为1,那么我们需要把这个1放在数组下标为3的位置,假如说数组长度为n,对于这个例子就是长度为3,那么它的

【数据结构与算法 | 灵神题单 | 删除链表篇】力扣3217, 82, 237

总结,删除链表节点问题使用到列表,哈希表,递归比较容易超时,我觉得使用计数排序比较稳,处理起来也不是很难。 1. 力扣3217:从链表中移除在数组中的节点 1.1 题目: 给你一个整数数组 nums 和一个链表的头节点 head。从链表中移除所有存在于 nums 中的节点后,返回修改后的链表的头节点。 示例 1: 输入: nums = [1,2,3], head = [1,2,3,

找出有毒的那一瓶药

找出有毒的那一瓶药 找出有毒的那一瓶药问题描述求解方法二进制编码方法详细示例 找出有毒的那一瓶药 问题描述 有47瓶药,其中只有一瓶有毒。从中毒到死亡时间为4天,问最少准备几只老鼠,在4天时间内找出有毒的药? 求解方法 要在4天内确定有毒药瓶,最少需要 6 只老鼠。以下是如何使用这 6 只老鼠来找出有毒药瓶的方法。 二进制编码方法 药瓶编号: 将47瓶药瓶编号从1到

力扣 739. 每日温度【经典单调栈题目】

1. 题目 理解题意: 1.1. 给一个温度集合, 要返回一个对应长度的结果集合, 这个结果集合里面的元素 i 是 当前 i 位置的元素的下一个更高温度的元素的位置和当前 i 位置的距离之差, 若是当前元素不存在下一个更高温度的元素, 则这个位置用0代替; 2. 思路 本题用单调栈来求解;单调栈就适用于来求当前元素左边或者右边第一个比当前元素大或者小的元素;【单调栈:让栈中的元素保持单调

力扣接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 示例 2: 输入:height

每日一题,力扣leetcode Hot100之238.除自身以外数组的乘积

乍一看这个题很简单,但是不能用除法,并且在O(N)时间复杂度完成或许有点难度。 考虑到不能用除法,如果我们要计算输出结果位置i的值,我们就要获取这个位置左边的乘积和右边的乘积,那么我新设立两个数组L和R。 对于L来说,由于表达的是位置i左边的数的乘积,那么L[0]=1,因为第一个数字左边没数那么为了不影响乘积初始值就设置为1,那么L[1]=L[0]*nums[0],那么L[i]=L[i-1

力扣 797. 所有可能路径【DFS】

1. 题目 2. 代码 DFS , 直接见代码 class Solution {public:vector<int> path;vector<vector<int>> res; // 结果集void dfs(vector<vector<int>>& graph, int cur, int n){// 找出所有从节点 0 到节点 n-1 的路径// 下标从 0 开始的if (

Leetcode 152. 乘积最大子数组(Medium)

给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续  子数组 (该子数组中至少包含一个数字),并返回该子数组所对应的乘积。 测试用例的答案是一个 32-位 整数。 示例 1: 输入: nums = [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。 示例 2: 输入: nums = [-2,0,-1]输出: 0解释: 结果不能为 2,