面试题 10.11. 峰与谷 【中等题】【数组】

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

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

题目讲解

【历史重难点题目】

  • 历史重难点题目总结

【思路】

  • 让我们假设“峰”在偶数位,“谷”在奇数位(倒过来也一样)
  • 那么遍历一遍数组,有以下两个情况:
  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])

【代码】

public void wiggleSort(int[] nums) {for(int i = 1;i < nums.length; i++){if((i%2 == 0 && nums[i] < nums[i-1])||(i%2 != 0 && nums[i] > nums[i-1])){int temp = nums[i];nums[i] = nums[i-1];nums[i-1] = temp;}}
}

【备注】

  • 这里有一个加速的小技巧,判断奇偶的时候,如果用取余运算%速度会慢一点。这里用位运算的话速度会稍稍快一点。i&1==1即奇数,i&1==0即偶数。&是“与”操作。大家可以试一下两段代码的速度,的确是有差别的。
public void wiggleSort(int[] nums) {for(int i = 1;i < nums.length; i++){if(((i&1) == 0 && nums[i] < nums[i-1])||((i&1) == 1 && nums[i] > nums[i-1])){int temp = nums[i];nums[i] = nums[i-1];nums[i-1] = temp;}}
}

微信关注我,带你拿大厂offer

面试题 10.11. 峰与谷相关推荐

  1. 面试题 10.11. 峰与谷 ( 思维 )

    LeetCode:面试题 10.11. 峰与谷 有点巧妙, 一开始弄复杂了,想着先把峰和谷存在两个 list 中, 然后再覆盖原数组, 然后发现有些样例的数中既不是峰也不是谷的( 如: nums[i− ...

  2. 面试题 10.11. 峰与谷-快速排序

    面试题 10.11. 峰与谷-快速排序 在一个整数数组中,"峰"是大于或等于相邻整数的元素,相应地,"谷"是小于或等于相邻整数的元素.例如,在数组{5, 8, ...

  3. 【程序员面试金典】面试题 10.11. 峰与谷

    [程序员面试金典]面试题 10.11. 峰与谷 题目描述 解题思路 题目描述 描述:在一个整数数组中,"峰"是大于或等于相邻整数的元素,相应地,"谷"是小于或等 ...

  4. 程序员面试金典 - 面试题 10.11. 峰与谷(排序/不排序)

    1. 题目 在一个整数数组中,"峰"是大于或等于相邻整数的元素,相应地,"谷"是小于或等于相邻整数的元素. 例如,在数组{5, 8, 2, 6, 3, 4, 3 ...

  5. 【LeetCode】面试题 10.11. 峰与谷

    在一个整数数组中,"峰"是大于或等于相邻整数的元素,相应地,"谷"是小于或等于相邻整数的元素.例如,在数组{5, 8, 6, 2, 3, 4, 6}中,{8, ...

  6. 面试题 10.11. 峰与谷-贪心-Java

    1.题目 2.思路 一定是要读懂题意!读懂题意!读懂题意!重要的事情说三遍.理解以下几个问题 什么是峰? 小大小.这个大的数就是峰.比如1,3,2中3就是峰.这里就是谷峰谷. 什么是谷? 大小大.这个 ...

  7. 程序员面试金典 - 面试题 10.11. 峰与谷

    题目难度: 中等 原题链接 今天继续更新程序员面试金典系列, 大家在公众号 算法精选 里回复 面试金典 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 在一个整数数组中,"峰& ...

  8. LeetCode——面试题 10.11. 峰与谷(JAVA)

    在一个整数数组中,"峰"是大于或等于相邻整数的元素,相应地,"谷"是小于或等于相邻整数的元素.例如,在数组{5, 8, 6, 2, 3, 4, 6}中,{8, ...

  9. 力扣 面试题 10.11. 峰与谷

    题目 在一个整数数组中,"峰"是大于或等于相邻整数的元素,相应地,"谷"是小于或等于相邻整数的元素.例如,在数组{5, 8, 4, 2, 3, 4, 6}中,{ ...

最新文章

  1. 搜索目录下 匹配文件中 最新的文件 路径
  2. 一根29cm长的尺子,只允许在它上面刻7个刻度。
  3. python--面向对象--14
  4. tornado学习笔记day01-高并发性能web框架
  5. Laravel核心解读--异常处理
  6. C语言取小于自身的最大整数,C语言整数类型(含取值范围和长度)
  7. timestamp和recycle同时开启,导致连接成功率降低
  8. 批标准化(batch normalization)与层标准化(layer normalization)比较
  9. 对比学习(Contrastive Learning) (1)
  10. linux系统文件名颜色含义
  11. 为你的兔小巢加上实时消息推送
  12. 3G模块驱动运用开发总结
  13. CSAPP第七章家庭作业参考答案
  14. unity tags的坑
  15. 微信小程序5-真机测试
  16. java返回图片base64_java将图片转为base64返回给前端
  17. ELK高级搜索四之Mapping映射和分词器
  18. eNSP 路由器配置-静态路由和缺省路由
  19. ahri8.php,文件上传处理 - [ php中文手册 ] - 在线原生手册 - php中文网
  20. 算法学习之“Big Oh Notation”

热门文章

  1. dvi dp hdmi_HDMI vs DisplayPort vs DVI:您要在新计算机上使用哪个端口?
  2. iOS开发——加载、滑动翻阅大量图片解决方案详解
  3. platformIO 自定义板子方法
  4. matlab用jc法计算可靠度,用MATLAB实现JC法计算结构可靠度程序
  5. 将表格导出为excel
  6. python读取pdf文件_深入学习python解析并读取PDF文件内容的方法
  7. SEO人员,怎么将网站关键词排进SERP前十名?
  8. 邮件群发数量多少?如何邮件群发数量日发10W?
  9. 洛谷P1873 砍树(二分)
  10. 【题解】CH5202 自然数拆分Lunatic版 完全背包