1. 程式人生 > >【Python】求陣列區域性最大值

【Python】求陣列區域性最大值

求陣列區域性最大值

給定一個無重複元素的陣列A[0…N-1],求找到一個該陣列的區域性最大值。規定:在陣列邊界外的值無窮小。即:A[0]>A[-1],A[N-1] >A[N]。
顯然,遍歷一遍可以找到全域性最大值,而全域性最大值顯然是區域性最大值。
可否有更快的辦法?

演算法描述

使用索引left、right分別指向陣列首尾。
求中點 mid = ( left + right ) / 2
A[mid]>A[mid+1],丟棄後半段:right=mid
A[mid+1]>A[mid],丟棄前半段:left=mid+1
遞迴直至left==right
時間複雜度為O(logN)。

Python程式碼

def local_maximum(li):
    if li is None:
        return
    left = 0
    right = len(li) - 1
    while left < right:
        mid = int((left + right) / 2)
        if li[mid] > li[mid + 1]:
            right = mid
        else:
            left = mid + 1
    return li[left]


if
__name__ == '__main__': li = [1, 5, 2, 3, 4, 0] result = local_maximum(li) print(result)

輸出結果:4

相關推薦

Python陣列區域性

求陣列區域性最大值 給定一個無重複元素的陣列A[0…N-1],求找到一個該陣列的區域性最大值。規定:在陣列邊界外的值無窮小。即:A[0]>A[-1],A[N-1] >A[N]。 顯然,遍歷一遍可以找到全域性最大值,而全域性最大值顯然是區域性最大值。

pythonnp.argmax() 返回索引號

import numpy as np a = np.array([[2, 4, 6, 1], [1, 5, 2, 9]]) print(np.argmax(a)) print(np.argmax(a, axis=0)) #豎著比較,返回行號 print(np.argmax(a, axis=1))

再回首Python之美矩陣矩陣中元素/小元素的行列座標 For 層次聚類演算法Hierarchical Clustering Alg

求多維矩陣中最小元素的行列座標,這個在層次聚類演算法中用到,這裡實現記錄一下。1.簡介矩陣M: [[1 3 2] [2 6 0] [9 8 5]]最大元素是9,對應的行列座標為(2,0)最小元素是

ArcGIS|空間分析年度NDVI影象和NDVI出現日期影象

1.利用像元統計工具統計多個柵格影象的最大值或總和。 2.模型中的柵格迭代器可以將柵格資料輸出為資料檔案和檔名稱。 3.在模型中使用解析路徑工具將迭代器輸出的檔名稱去掉字尾。 4.使用柵格計算器時若需要輸出多個檔案,可以將名稱命名為“%name%.img”(新增檔案字尾名),並且存放

DP三角形面積問題

【題目描述】       聖誕節快到了。你接受了一件光榮的任務,就是製作聖誕樹頂上的那顆大星星。不過當你拿到製作用的三角形銀紙的時候,你發現銀紙上面有許多洞。原來你的妹妹已經在銀紙上剪下了一些小的三角形來製作小星星。你唯有尋找一個演算法,告訴你在每張銀紙上還能切出來的最大的三

YTUOJ——類模板---陣列

題目描述   類模板---求陣列的最大值    找出一個數組中的元素的最大值,陣列大小為10。(用類模板來實現)    陣列元素型別作為類模板的引數。    在下面的程式段基礎上完成設計,只提交begin到en

佇列滑動視窗的序列,帶max函式的佇列

視窗即佇列,本質是一樣的。 面試題59-1:滑動視窗的最大值序列 給定一個數組和滑動視窗的大小,請找出所有滑動窗口裡的最大值。例如,如果輸入陣列{2, 3, 4, 2, 6, 2, 5, 1}及滑動視窗的大小3,那麼一共存在6個滑動視窗,它們的最大值分別為{4

java中陣列

java中陣列中求最大值 public class Max { public static void main(String[] args) { double[] myList = {1.9, 2.9, 3.4, 3.5,10,11,15,100,-1,-4.5

java陣列

通過遍歷陣列來求最大最小值 預設最大值是第一個元素 預設最小值也是第一個元素 這裡有兩種方式來求 一種是記下最大值和最小值 另一種方式是記下最大值最小值在陣列中的下標 輸出的時候再通過下標輸出最大最小

陣列,次

在期末微機原理考試的時候,老師給我們出了一個題是求一段數的最大值,次大值,當時題目的要求使用匯編語言寫的,這裡我使用C++將相關演算法表現出來。 求陣列的最大值是很簡單的,基本上每個會程式設計的人都會求,但是求次大值就稍微有點彎了…… 我當時的思路是這樣的: 因為這一段數字

c++陣列

用algorithm中的max_elementmin_element這兩個函式返回的是位置指標,*max_element可以獲得最大值1)普通陣列用法!#include <algorithm>int main(){    int a[5] = { 2, 3, 5,

分治演算法陣列

分治演算法是指將一個複雜的問題分成兩個或者幾個相同的小問題,再把子問題分成更小的問題,一直這樣迴圈下去,直到最後可以簡單的求解。原問題的解是子問題解的合併。 此演算法是許多高效演算法的基礎。今天是一個簡單的用分治法求一維陣列最大值最小值的問題。 在這裡使用了二分法來劃分。程

定義一個2維陣列3行4列,陣列平均值js

function shuzu(arr){  var sum=0;   for(var i=0;i<3;i++) { for(var j=0;j<4;j++) { sum+=arr[i][j

c++知識點---函式模板實現陣列

題目: 編寫一個函式模板,求陣列中的最大元素,並寫出呼叫此函式模板的完整程式,使的到函式呼叫時,陣列的型別可以是整型也可以是雙精度型別。 知識點:利用函式模板來解決陣列問題,使用陣列的引用來傳遞引數不

陣列、平均值

/** * 用程式碼實現求陣列的最大值、最小值、平均值 * @author  * */public class ArrayMaxMinPjTest {    public static void main(String[] args) {        int a[] = {

MT16利用柯西不等式三角的

技術分享 com style img 不等式 bsp nbsp png 均值 評:此題也可以設$1+cos\theta=t$,平方後變成$t$的單變量利用均值去做. 柯西平衡系數法其實就是待定系數法,利用等號取到的條件。MT【16】利用柯西不等式求三角的最大值

python+numpy按行一個二維陣列

問題描述: 給定一個二維陣列,求每一行的最大值 返回一個列向量 如: 給定陣列【1,2,3;4,5,3】 返回[3;5] import numpy as np x = np.array([[1,2,3],[4,5,3]]) # 先求每行最大值得下標 index

leetcode#陣列Python120. Triangle 三角形小路徑和

連結: 題目: 給定一個三角形,找出自頂向下的最小路徑和。每一步只能移動到下一行中相鄰的結點上。 例如,給定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 自頂向下的最小路徑和為 11(即,2

演算法拾遺陣列乘積

    給定一個長度為N的整數陣列,只允許使用乘法,不能使用除法,計算任意N-1個數的組合乘積的最大值。    這道題目重點要注意陣列中有負數、0的情況。最直觀的做法就是把所有可能的N-1個數的組合找出