leetcode 162. Find Peak Element | 162. 寻找峰值(待完善)
2021/7/14 6:08:14
本文主要是介绍leetcode 162. Find Peak Element | 162. 寻找峰值(待完善),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
题目
https://leetcode.com/problems/find-peak-element/
题解
看题目要求是 O(log n),想到每次删一半,但是写完之后才发现并不符合要求。。先将错就错吧,后面有空再完善下。
第一次比较次数为 n/2,第二次比较次数为 n/4,第三次8/n,…,总比较次数为 n/2+n/4+n/8+n/16+…= ?
根据《算法导论》“同时找最大最小元素的最小比较次数”的原理,也是每次删一半,即不重复的两两比较。
所以每次淘汰一半后,最后剩下的是最大值,也就是 Peak Element。
class Solution { public int findPeakElement(int[] nums) { ArrayList<Integer> list = new ArrayList<>(); ArrayList<Integer> index = new ArrayList<>(); for (int i = 0; i < nums.length; i++) { list.add(nums[i]); index.add(i); } while (list.size() != 1) { ArrayList<Integer> newList = new ArrayList<>(); ArrayList<Integer> newIndex = new ArrayList<>(); for (int i = 0; i < list.size() - 1; i += 2) { // 两两比较,每次扔掉一半 if (list.get(i) > list.get(i + 1)) { newList.add(list.get(i)); newIndex.add(index.get(i)); } else { newList.add(list.get(i + 1)); newIndex.add(index.get(i + 1)); } } if (list.size() % 2 == 1) { // 奇数个数情况,简单起见,末尾元素无条件进入下一轮判断 newList.add(list.get(list.size() - 1)); newIndex.add(index.get(index.size() - 1)); } list = newList; index = newIndex; } return index.get(0); } }
这篇关于leetcode 162. Find Peak Element | 162. 寻找峰值(待完善)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-23DevExpress 怎么实现右键菜单(Context Menu)显示中文?-icode9专业技术文章分享
- 2024-12-22怎么通过控制台去看我的页面渲染的内容在哪个文件中呢-icode9专业技术文章分享
- 2024-12-22el-tabs 组件只被引用了一次,但有时会渲染两次是什么原因?-icode9专业技术文章分享
- 2024-12-22wordpress有哪些好的安全插件?-icode9专业技术文章分享
- 2024-12-22wordpress如何查看系统有哪些cron任务?-icode9专业技术文章分享
- 2024-12-21Svg Sprite Icon教程:轻松入门与应用指南
- 2024-12-20Excel数据导出实战:新手必学的简单教程
- 2024-12-20RBAC的权限实战:新手入门教程
- 2024-12-20Svg Sprite Icon实战:从入门到上手的全面指南
- 2024-12-20LCD1602显示模块详解