加载中...
面试题 10.11-峰与谷(Peaks and Valleys LCCI)
发表于:2021-12-03 | 分类: 中等
字数统计: 479 | 阅读时长: 2分钟 | 阅读量:

原文链接: https://leetcode-cn.com/problems/peaks-and-valleys-lcci

英文原文

In an array of integers, a "peak" is an element which is greater than or equal to the adjacent integers and a "valley" is an element which is less than or equal to the adjacent inte­gers. For example, in the array {5, 8, 4, 2, 3, 4, 6}, {8, 6} are peaks and {5, 2} are valleys. Given an array of integers, sort the array into an alternating sequence of peaks and valleys.

Example:

Input: [5, 3, 1, 2, 3]
Output: [5, 1, 3, 2, 3]

Note:

  • nums.length <= 10000

中文题目

在一个整数数组中,“峰”是大于或等于相邻整数的元素,相应地,“谷”是小于或等于相邻整数的元素。例如,在数组{5, 8, 4, 2, 3, 4, 6}中,{8, 6}是峰, {5, 2}是谷。现在给定一个整数数组,将该数组按峰与谷的交替顺序排序。

示例:

输入: [5, 3, 1, 2, 3]
输出: [5, 1, 3, 2, 3]

提示:

  • nums.length <= 10000

通过代码

高赞题解

解题思路

假设按照峰-谷-峰的顺序排列数组,那么遍历一遍数组:
(1)如果i为峰的位置,则判断当前位置是否小于前一个位置(前一个为谷),若小于,则交换,大于则不处理。即: if(nums[i]<nums[i-1]) swap(nums[i],nums[i-1]);
(2)如果i为谷的位置,则判断当前位置是否大于前一个位置(前一个为峰),若大于,则交换,大于则不处理。即: if(nums[i]>nums[i-1]) swap(nums[i],nums[i-1]);
image.png

代码

class Solution {
public:
    void wiggleSort(vector<int>& nums) {
        for(int i=1;i<nums.size();i++){
            if(i%2==0){
                if(nums[i]<nums[i-1]) swap(nums[i],nums[i-1]);
            }
            else{
                if(nums[i]>nums[i-1]) swap(nums[i],nums[i-1]);
            }
        }
    }
};

统计信息

通过次数 提交次数 AC比率
8222 12366 66.5%

提交历史

提交时间 提交结果 执行时间 内存消耗 语言
上一篇:
面试题 10.01-合并排序的数组(Sorted Merge LCCI)
下一篇:
面试题 08.06-汉诺塔问题(Hanota LCCI)
本文目录
本文目录