日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

leetcode 162. Find Peak Element | 162. 寻找峰值(二分法找局部最大值)

發布時間:2024/2/28 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode 162. Find Peak Element | 162. 寻找峰值(二分法找局部最大值) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

https://leetcode.com/problems/find-peak-element/

題解

2021-7-21 16:28:31 更新版思路:

根據左神在 課上 說的,可以使用二分法找到局部最小值,看上升或下降坡度,則有點類似于羅爾定理的感覺。同理,也可以用二分找到局部最大值,具體可以參考本題 英文版官方題解中文版圖解.
羅爾定理:如果 R 上的函數 f(x) 滿足以下條件:
(1)在閉區間 [a,b] 上連續
(2)在開區間 (a,b) 內可導
(3)f(a)=f(b)
則至少存在一個 ξ∈(a,b),使得 f’(ξ)=0。
實際上,當我們找到一個上升沿的時候,可以推斷它的右邊必然有一個山峰,如果沒有的話,它就是最后一個上升沿,而最后一個上升沿的右端點,或者第一個下降沿的左端點也是山峰。

不嚴謹的證明過程,不保證正確…可以參考一下:

class Solution {public int findPeakElement(int[] nums) {int L = 0,R = nums.length - 1;while(L < R){int M = L + ((R - L) >> 1);if(nums[M] > nums[M+1]) R = M;else L = M+1;}return L;} }
寫題時的原思路

看題目要求是 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);} }

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的leetcode 162. Find Peak Element | 162. 寻找峰值(二分法找局部最大值)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。