在嚴格單調遞增的整數數組中找到a[x] == x的位置?

2021-01-14 七月在線實驗室

在一個嚴格單調遞增的

整數數組中找到a[x] == x的位置?

分析與解法
設整數x1>x2,並且有x1=x2+d。由於數組a是一個嚴格單調遞增的整數數組,所以必然有a[x1]⩾a[x2]+d。
兩邊同時減去x1,即a[x1]−x1⩾a[x2]+d−x2−d=a[x2]−x2。所以f(x)=a[x]−x 也是一個單調遞增的函數。

那麼原問題尋找a[x]=x的位置也就變成了查找單調遞增函數f(x)=0時對應的x。這樣就可以直接使用二分查找來做了,時間複雜度為O(logn)
void find(int a[], int l, int r)
{  
if (l > r)    
return -1;  
int k = (l + r) / 2;  
if (a[k] == k)    
return k;  
else if (a[k] > k)    
return find(a, l, k - 1);  
else    
return find(a, k + 1, r);
}

今日學習推薦

且兩人及兩人以上組團還能各減300元

有意的親們抓緊時間嘍


諮詢/報名/組團可添加微信客服

julyedukefu05

掃碼立刻查看詳情

有人說「數學決定了程式設計師的上限

我們決定把數學基礎課程免費送給大家

註:名額有限先到先得

後臺回覆:「100」   免費領【機器學習面試100題

後臺回覆:「乾貨」 免費領【全體系人工智慧學習資料

後臺回覆:「領資料」 免費領【NLP工程師必備乾貨資料


相關焦點

  • 用導數求函數y=x+1/x的單調區間
    主要內容:求解函數y=x+1/x的一階導數判斷函數的單調性。一階導數為零(駐點)或不存在的點可能恰好是單調區間的分界點,這些分界點將函數的定義域分劃成若干個部分單調區間。解:函數單調區間分析過程如下:當x=0時,函數y=x+1/x無定義, 故函數在x=0處不可導;當x≠0時,導函數為y'=1-1/x^2=(x^2-1)/x^2;令y'=0得:x=±1。
  • f(x)是奇函數具體如圖,點(4,0)是f(x)中心對稱點?證明方向是?
    該文章中並沒有給出x在R上的解析式,所以面對要判斷出「點(4,0)是函數y=f(x)圖像的一個對稱中心」就會讓很多同學不知所措,不知道求解的方向。選項C選項C問的是函數y=f(x)在區間[-6,-2]上單調遞增,即判斷函數的單調性。因為當x∈[0,2)時,f(x)=2^x-1,而此時的函數f(x)=2^x-1是增函數。
  • MATLAB數組的常用函數
    3.1 函數數組運算規則的定義對於(m´n)的數組,函數的數組運算規則是指:也就是說函數的數組運算是指將函數作用於矩陣中的每一個元素,並將最後的結果儲存為與原矩陣行列數相同的矩陣。3.2 進行數組運算的常用函數本小節列出進行數組運算的常用函數。常用基本數學函數見表2-2,常用三角函數見表2-3,常用適用於向量的函數見表2-4。
  • NumPy數組中的廣播機制及結構化數組
    前面講過,在NumPy中,如何通過用表示數組各個維度長度的元素(也就是數組的型)把數組轉換成多維數組。因此,若兩個數組的各維度兼容,也就是兩個數組的每一維等長,或其中一個數組為一維,那麼廣播機制就適用。如果這兩個條件都不能滿足,NumPy就會拋出異常,說這兩個數組不兼容。執行完代碼之後,我們就得到了兩個數組:4x4的數組以及一個一行四列的數組。
  • 反正切函數 arctanx (ATAN(Y/X))
    其中k為整數}。4、兩者的單調區間不同(1)tanx有單調區間(-π/2+kπ,+π/2+kπ),k為整數,且在該區間為單調增函數。(2)arctanx為單調增函數,單調區間為(-∞,﹢∞)。3.反正切函數的圖像與性質4.matlab 中tan
  • 「每日一題」求f(x)=sin(x/2-π/3)的單調增區間和最大值時x的集合
    本文主要內容:求函數f(x)=sin(x/2-π/3)的單調增區間和最大值時x的集合。一、先求函數的單調增區間對於正弦函數y=sinx的單調增區間為:2kπ-π/2<=x<=2kπ+π/2,k∈Z,則對於本題有:2kπ-π/2<=x/2-π/3&
  • 判斷h(x)=e^x-sinx-1在區間(-π,0)上零點的個數?好的方法不嫌多
    即當0<x<1時,f'(x)>0,所以函數f(x)此時為單調遞增;當x>1時,f'(x)<0,所以函數f(x)此時為單調遞減。所以當x=1處是函數f(x)極大值,因為函數f(x)與g(x)有相同的極值點,所以將x=1代入g(x)的導數中,則該一次導數g'(x)=0.
  • 高中:給出x,y的不等式求x+y的值?關鍵在於如何構建函數
    原題原題:已知實數x,y滿足3x-y≤ln(x+2y-3)+ln(2x-3y+5),則x+y=?圖一題中只給出了一個關於x,y的不等式,想導出x+y的值是非常困難的,那這道題該如何解決呢?當t∈(0,2-ln2)時,二次導數h"(t)<0,所以一次導數h'(t)單調遞減的;當t∈(2-ln2,+∞)時,二次導數h"(t)>0,則一次導數h'(t)單調遞增的。我們二次求導的目的是為了得到原函數h(t)圖像的變化,所以得出一次導數h'(t)的圖像變化是不夠的,好要得出特殊點的值。
  • 在XGBoost和LightGBM模型中強制執行單調約束的python教程
    使模型輸出更實用的一種創新稱為單調約束。什麼是單調性?單調是一個函數或數量的變化。單調遞增函數:如果對所有 x和 y,當 x≤y時,都有f(x)≤ f(y),則該函數被稱為單調遞增函數(見圖1)。這個函數不一定要增加,只是不能減少。
  • 看圖學NumPy:掌握n維數組基礎知識點,看這一篇就夠了
    在NumPy中,可以用arange或者linspace來初始化單調序列數組:., 2.]的浮點數組,可以更改arange輸出的類型:arange(3).astype(float)。但是有更好的方法:arange函數對數據類型敏感,如果將整數作為參數,生成整數數組;如果輸入浮點數(例如arange(3.)),則生成浮點數組。但是arange在處理浮點數方面並不是特別擅長:
  • Python語言中使用array模塊實現動態數組的操作
    動態數組的創建創建方式為:array.array(typecode[, initializer]),第1個參數typecode定義了數組元素的類型,第2個可選參數給出了數組中的初始值。如下面的代碼創建了一個int型的包含3個元素的數組x,其初始值為分別為1、2、3。其索引方式同列表類似,下標從0開始,如x[1]代表取數組x中的第2個元素。
  • 【ADAMS】矩陣/數組函數
    (1)矩陣/數組的基本操作函數ALIGN 將數組轉換到從特定值開始ALLM 返回矩陣元素的邏輯值ANGLES 將方向餘弦矩陣轉換為指定旋轉順序下的角度矩陣ATAN(x) 數字表達式x 的反正切值ATAN2(x1,x2) 兩個數字表達式x1,x2 的四象限反正切值(3)取整函數INT(x)
  • LeetCode 47.674.最長連續遞增序列
    描述給定一個未經排序的整數數組,找到最長且連續的的遞增序列,並返回該序列的長度。
  • 「每日一題」f(x)=x-2ax+4在區間「-1,3」上都≥2,求整數a的值
    本文介紹函數f(x)=x-2ax+4在區間[-1,3]上都不小於2,求整數a的值的方法和步驟。解:這個要討論函數的對稱軸x=a與區間的關係。1.當x=a<-1的時候,由於拋物線函數開口向上,此時區間[-1,3]在對稱軸的右邊,要使f(x)>=2,則有:f(-1)>=2,即:(-1)^2-2*a*(-1)+4>=2即:2a>=-3a>=-3/2. 則在區間[-3/2,-1]上整數a=-1.
  • 整數反轉,Z 字形變換
    整數反轉難度簡單給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。
  • 若f(x)有兩個不同的零點求證x1x2
    當x>a時,f(x)極小值為f(e),即f(e)=e(a-e/4)。當0<a<e/4時,因為f(x)在(a,e)上單調遞減,在(e,+∞)上單調遞增,且f(a)>0,f(e^2)=e^2/4>0,f(e)=e(a-e/4)<0,所以根據零點存在定理,函數f(x)有兩個不同的零點。
  • Number of Squareful Arrays 平方數組的個數
    Example 2:Input: [2,2,2]Output: 1Note:1<=A.length<=120<=A[i]<=1e9這道題給了一個非負整數組成的數組A,定義了一種平方數組,即任意兩個相鄰的數字之和是個完全平方數,現在讓找出有多少個A