返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++怎么求数组的局部峰值
  • 440
分享到

C++怎么求数组的局部峰值

2023-06-20 19:06:31 440人浏览 安东尼
摘要

本篇内容主要讲解“c++怎么求数组的局部峰值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++怎么求数组的局部峰值”吧!求数组的局部峰值这道题是求数组的一个峰值,如果这里用遍历整个数组找最大值

本篇内容主要讲解“c++怎么求数组的局部峰值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++怎么求数组的局部峰值”吧!

求数组的局部峰值

这道题是求数组的一个峰值,如果这里用遍历整个数组找最大值肯定会出现Time Limit Exceeded,但题目中说了这个峰值可以是局部的最大值,所以我们只需要找到第一个局部峰值就可以了。所谓峰值就是比周围两个数字都大的数字,那么只需要跟周围两个数字比较就可以了。既然要跟左右的数字比较,就得考虑越界的问题,题目中给了nums[-1] = nums[n] = -∞,那么我们其实可以把这两个整型最小值直接加入到数组中,然后从第二个数字遍历到倒数第二个数字,这样就不会存在越界的可能了。由于题目中说了峰值一定存在,那么有一个很重要的corner case我们要注意,就是当原数组中只有一个数字,且是整型最小值的时候,我们如果还要首尾垫数字,就会形成一条水平线,从而没有峰值了,所以我们对于数组中只有一个数字的情况在开头直接判断一下即可,参见代码如下:

C++ 解法一:

class Solution {public:    int findPeakElement(vector<int>& nums) {        if (nums.size() == 1) return 0;        nums.insert(nums.begin(), INT_MIN);        nums.push_back(INT_MIN);        for (int i = 1; i < (int)nums.size() - 1; ++i) {            if (nums[i] > nums[i - 1] && nums[i] > nums[i + 1]) return i - 1;        }        return -1;    }};

Java 解法一:

class Solution {    public int findPeakElement(int[] nums) {        if (nums.length == 1) return 0;        int[] newNums = new int[nums.length + 2];        System.arraycopy(nums, 0, newNums, 1, nums.length);        newNums[0] = Integer.MIN_VALUE;        newNums[newNums.length - 1] = Integer.MIN_VALUE;        for (int i = 1; i < newNums.length - 1; ++i) {            if (newNums[i] > newNums[i - 1] && newNums[i] > newNums[i + 1]) return i - 1;        }        return -1;    }}

我们可以对上面的线性扫描的方法进行一些优化,可以省去首尾垫值的步骤。由于题目中说明了局部峰值一定存在,那么实际上可以从第二个数字开始往后遍历,如果第二个数字比第一个数字小,说明此时第一个数字就是一个局部峰值;否则就往后继续遍历,现在是个递增趋势,如果此时某个数字小于前面那个数字,说明前面数字就是一个局部峰值,返回位置即可。如果循环结束了,说明原数组是个递增数组,返回最后一个位置即可,参见代码如下:

C++ 解法二:

class Solution {public:    int findPeakElement(vector<int>& nums) {        for (int i = 1; i < nums.size(); ++i) {            if (nums[i] < nums[i - 1]) return i - 1;        }        return nums.size() - 1;    }};

Java 解法二:

public class Solution {    public int findPeakElement(int[] nums) {        for (int i = 1; i < nums.length; ++i) {            if (nums[i] < nums[i - 1]) return i - 1;        }        return nums.length - 1;    }}

由于题目中提示了要用对数级的时间复杂度,那么我们就要考虑使用类似于二分查找法来缩短时间,由于只是需要找到任意一个峰值,那么我们在确定二分查找折半后中间那个元素后,和紧跟的那个元素比较下大小,如果大于,则说明峰值在前面,如果小于则在后面。这样就可以找到一个峰值了,代码如下:

C++ 解法三:

class Solution {public:    int findPeakElement(vector<int>& nums) {        int left = 0, right = nums.size() - 1;        while (left < right) {            int mid = left + (right - left) / 2;            if (nums[mid] < nums[mid + 1]) left = mid + 1;            else right = mid;        }        return right;    }};

Java 解法三:

public class Solution {    public int findPeakElement(int[] nums) {        int left = 0, right = nums.length - 1;        while (left < right) {            int mid = left + (right - left) / 2;            if (nums[mid] < nums[mid + 1]) left = mid + 1;            else right = mid;        }        return right;    }}

到此,相信大家对“C++怎么求数组的局部峰值”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: C++怎么求数组的局部峰值

本文链接: https://lsjlt.com/news/299262.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++怎么求数组的局部峰值
    本篇内容主要讲解“C++怎么求数组的局部峰值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++怎么求数组的局部峰值”吧!求数组的局部峰值这道题是求数组的一个峰值,如果这里用遍历整个数组找最大值...
    99+
    2023-06-20
  • C++实现LeetCode(162.求数组的局部峰值)
    [LeetCode] 162.Find Peak Element 求数组的局部峰值 A peak element is an element that is greater than...
    99+
    2024-04-02
  • c++怎么求数组的最大和最小值
    本篇内容主要讲解“c++怎么求数组的最大和最小值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“c++怎么求数组的最大和最小值”吧!求数组元素最大最小值函数#include<iostream...
    99+
    2023-07-02
  • C语言怎么求数组最大最小值
    可以通过遍历数组的方式找到最大值和最小值。```c#include int main() {int arr[] = {10, 5, ...
    99+
    2023-10-11
    C语言
  • mongodb怎么求数组最大值
    在MongoDB中,可以使用$max运算符来求数组的最大值。下面是一个示例:假设有一个名为"students"的集合,其中每个文档包...
    99+
    2023-09-05
    mongodb
  • es6怎么求数组最大值
    本教程操作环境:windows7系统、ECMAScript 6版、Dell G3电脑。取数组的最大值的几种方法// 写法一: Math.max.apply(null, [14, 3, 77, 30]); // 写法二: Math.max(...
    99+
    2022-11-22
    javascript ES6 es6数组
  • mongodb数组最大值怎么求
    可以使用MongoDB的$unwind和$group操作来求解数组的最大值。假设有一个名为"collection"的集合,其中有一个...
    99+
    2023-08-23
    mongodb
  • php怎么求数组的最大差值
    求数组最大差值的步骤:1、使用max()函数获取数组的最大值,语法“max($arr)”;2、使用min()函数获取数组的最小值,语法“min($arr)”;3、使用“-”运算符将获取的数组最大值和最小值相减计算数组最大差值即可,语法“最大...
    99+
    2022-08-18
    php php数组
  • c#怎么输入数组的值
    c# 中输入数组值的方法有四种:使用索引器访问元素,使用赋值运算符初始化数组,使用循环逐个元素输入,或使用数组初始化器同时声明和初始化数组。 如何在 C# 中输入数组的值 在 C# 中...
    99+
    2024-05-14
    c#
  • php怎么求数组最大值和最小值的差值
    求差值的步骤:1、使用max()函数获取数组最大值,语法“max($arr)”;2、使用min()函数获取数组最小值,语法“min($arr)”;3、使用“-”运算符将获取的最大值和最小值相减计算差值即可,语法“最大值 - 最小值”。本教程...
    99+
    2022-07-07
    php数组 php
  • php怎么求数组平均值avg
    实现步骤:1、利用array_sum()函数计算数组中所有元素的总和,语法“$sum=array_sum($arr);”;2、利用count()函数计算数组的长度,语法“$len=count($arr);”;3、使用“/”运算符将元素总和除...
    99+
    2024-04-02
  • php中怎么求数组最大值
    这篇文章主要介绍了php中怎么求数组最大值的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php中怎么求数组最大值文章都会有所收获,下面我们一起来看看吧。php中求数组最大值的函数是“max()”。max()函数...
    99+
    2023-07-02
  • php怎么去掉数组的部分值
    两种方法:1、用“array_splice($arr,位置,个数)”从指定位置开始删除指定个数的值,若删除个数不设置(第三个参数省略)则会删除从指定位置开始的全部值。2、用“array_slice($arr,位置)”删除指定位置前的全部值。...
    99+
    2022-06-14
    php php数组
  • c++求数组最大最小值函数的实现
    目录求数组元素最大最小值函数c++中min和max函数求数组元素最大最小值函数 #include<iostream> #include<algorithm> ...
    99+
    2024-04-02
  • 怎么在php中求数组的最小值
    在php中求数组最小值的方法有:1.使用min函数求数组最小值;2.使用for循环求数组最小值;使用min函数求数组的最小值$arr = ['10','100','50','90','2','5'];$min = min($arr); //...
    99+
    2024-04-02
  • java怎么求二维数组的最大值
    可以通过遍历二维数组的每个元素,找出其中的最大值。以下是一个示例代码: public class Main { public...
    99+
    2024-03-14
    java
  • php二维数组怎么求平均值
    实现步骤:1、定义一个变量并赋值0,用于存储二维数组的元素和,语法“$s=0;”;2、遍历二维数组,计算二维数组的元素和,语法“foreach(数组 as $v){if(is_array($v)){$s+=array_sum($v);}el...
    99+
    2022-08-08
    php数组 php
  • c#怎么求最大值
    在 c# 中求最大值可以使用以下方法:使用内置的 math.max() 方法,适用于任意数量的数字。使用 enumerable.max() 方法,适用于存储在集合中的数字。使用比较运算符...
    99+
    2024-05-12
    c#
  • c#最小值怎么求
    c# 中求最小值的方法有两种:使用 math.min() 方法比较数值表达式并返回最小值。使用 linq 的 min() 方法求取集合中最小元素的值。 C# 中的最小值求法 在 C# ...
    99+
    2024-05-12
    c#
  • 利用Java_int怎么求数组中的最大值
    本篇文章为大家展示了利用Java_int怎么求数组中的最大值,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。具体方法如下:public class ArrayUtils ...
    99+
    2023-05-31
    java ava int
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作