【LeetCode每日一题】——面试题10.11.峰与谷

2023-09-15 14:44:55

一【题目类别】

  • 排序

二【题目难度】

  • 中等

三【题目编号】

  • 面试题10.11.峰与谷

四【题目描述】

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

五【题目示例】

  • 示例:
    • 输入: [5, 3, 1, 2, 3]
    • 输出: [5, 1, 3, 2, 3]

六【题目提示】

  • n u m s . l e n g t h < = 10000 nums.length <= 10000 nums.length<=10000

七【解题思路】

  • 首先对数组从小到大排序
  • 排序之后我们仔细思考题目的要求,题目要求数组按照“大-小”的顺序对数组重新组合
  • 现在对于排序后的任意一个位置i的数字来说,i-1位置的数字小于位置i的数组,位置i+1的数字大于位置i的数字,而位置i+1的数字又大于位置i-1和位置i的数字
  • 所以我们只需要将位置i的数字和位置i+1的数字进行交换,这样位置i的数字就大于位置i+1的数字了,而且位置i的数字也大于位置i-1的数字,就形成了“峰”和“谷”
  • 只需要每两个数字为一组遍历数组即可
  • 本题不需要返回值

八【时间频度】

  • 时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn) n n n为传入的数组的长度
  • 空间复杂度: O ( l o g n ) O(logn) O(logn) n n n为传入的数组的长度

九【代码实现】

  1. Java语言版
class Solution {
    public void wiggleSort(int[] nums) {
        Arrays.sort(nums);
        for(int i = 0;i < nums.length - 1;i+=2){
            int temp = nums[i];
            nums[i] = nums[i + 1];
            nums[i + 1] = temp;
        }
    }
}
  1. C语言版
int compare(const void *a, const void *b)
{
    return *(int *)a - *(int *)b;
}

void wiggleSort(int* nums, int numsSize)
{
    qsort(nums, numsSize, sizeof(int), compare);
    for(int i = 0;i < numsSize - 1;i += 2)
    {
        int temp = nums[i];
        nums[i] = nums[i + 1];
        nums[i + 1] = temp;
    }
}
  1. Python语言版
class Solution:
    def wiggleSort(self, nums: List[int]) -> None:
        nums.sort()
        for i in range(0, len(nums) - 1, 2):
            temp = nums[i]
            nums[i] = nums[i + 1]
            nums[i + 1] = temp
  1. C++语言版
class Solution {
public:
    void wiggleSort(vector<int>& nums) {
        if(nums.size() == 0){
            return;
        }
        sort(nums.begin(), nums.end());
        for(int i = 0;i < nums.size() - 1;i += 2){
            int temp = nums[i];
            nums[i] = nums[i + 1];
            nums[i + 1] = temp;
        }
    }
};

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. C语言版
    在这里插入图片描述

  3. Python语言版
    在这里插入图片描述

  4. C++语言版
    在这里插入图片描述

更多推荐

嵌入式笔试面试刷题(day5 IIC详解)

文章目录前言一、IIC需要几根线分别是什么线二、IIC优势三、IIC可以挂载多少个从设备,主设备1.从设备数量2.主设备数量四、IIC是全双工还是半双工五、SDA和SCL为什么配置为上拉开漏输出模式1.为什么要配置为开漏输出不能是推挽输出a.实现线与功能b.保护设备不会被短路2.上拉电阻的作用a.确保空闲状态保持高电平

Java synchronized关键字常见面试题

1、什么是线程同步,为什么需要线程同步?线程同步是一种机制,用于控制多个线程对共享资源的访问,以防止并发问题。它需要确保在同一时刻只有一个线程可以访问共享资源,以避免数据竞争和不一致性。2、请解释Java中synchronized关键字的作用和用法。synchronized关键字用于实现线程同步。它可以应用于方法或代码

0021Java程序设计-SSM框架图书管理系统

文章目录摘要目录系统设计开发环境摘要伴随着时代的进步,以及科学技术的不断发展,越来越多的人会从图书馆中借阅书籍,从而获得新的知识。但是,传统的图书管理方法有着很多不便之处,而且还容易丢失,因此,很有必要设计出一个易于操作,具有高便捷性,还可以提高工作效率的图书管理系统。该系统采用了Java技术,采用了计算机技术,取代了

python经典百题之请问他多少岁

题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?方法1:迭代deffind_fifth_person_age_iterative():age=10#第一个

Multitor:一款带有负载均衡功能的多Tor实例创建工具

关于MultitorMultitor是一款带有负载均衡功能的多Tor实例创建工具,Multitor的主要目的是以最快的速度完成大量Tor进程的初始化,并将大量实例应用到我们日常使用的程序中,例如Web浏览器和聊天工具等等。除此之外,在该工具的帮助下,我们还可以在进行渗透测试和对基础设施安全性进行审计时提高隐蔽性和匿名性

4、wireshark使用教程

文章目录一、wireshark简介二、环境三、wireshark抓包三、wireshark过滤器使用一、wireshark简介Wireshark是使用最广泛的一款「开源抓包软件」,常用来检测网络问题、攻击溯源、或者分析底层通信机制。Wireshark抓包原理:单机情况:电脑直连互联网的单机环境。Wireshark直接抓

HR对职业发展进行思考

如果你还没有职业发展方面的思考,请不要怪自己,这很正常。没有谁是一开始就会如此清晰理性地对职业发展进行思考。笔者对职业发展有关话题进行系统性的思考,得益于两本书:第一本是哈佛大学泰勒·本-沙哈尔教授的《幸福的方法》,第二本书是美国学者比尔·博内特和戴夫·伊万斯写的《斯坦福大学人生设计课》,这两本书给了笔者很大的启发,并

【无标题】

未来,该算法可以在低延迟视频编码领域得到广泛应用。例如,该算法可以用于实时视频传输、视频会议、视频监控等场景,以提高视频编码的效率和质量。此外,该算法还可以扩展到其他编码平台,如H.264/AVC、VP9等,以满足不同应用场景的需求。关于每个图和公式的位置,以下是简要说明:图1:位于第2页,显示了所提出的速率控制算法的

MySQL备份与恢复

目录一、数据库备份二、数据备份的重要性三、MySQL完全备份优缺点实例:完全备份MySQL物理冷备份及恢复完全备份指定库中的部分表完全备份MySQL,服务器中所有的库完全备份一个或多个完的库(包括其中所有的表)查看备份文件MySQL完全恢复恢复数据库恢复数据表MySQL增量备份基于位置恢复基于时间点恢复一、数据库备份备

MySQL安装(1)

安装环境:Win1064位软件版本:MySQL5.7.24解压版一、下载点开下面的链接:https://downloads.mysql.com/archives/community/选择选择和自己系统位数相对应的版本点击右边的Download,此时会进到另一个页面,同样在接近页面底部的地方找到如下图所示的位置:不用理会

数据库知识

1、count(1),count(*),count(列名)的区别和联系?当表的数据量很大时候,count(1)比count(*)更加消耗时间,如果count(1)是聚索引那么count(*)会更快一些,因为count(*)会自动优化指定哪一字段。综上所述,count(1)和count(*)基本没有区别!count(1)

热文推荐