力扣刷題筆記 面試題 08 03 魔術索引 C

2021-10-08 20:25:18 字數 803 閱讀 7986

7 月 31 日簽到題,題目如下:

魔術索引。 在陣列a[0...n-1]中,有所謂的魔術索引,滿足條件a[i] = i。給定乙個有序整數陣列,編寫一種方法找出魔術索引,若有的話,在陣列a中找出乙個魔術索引,如果沒有,則返回-1。若有多個魔術索引,返回索引值最小的乙個。

示例1:

輸入:nums = [0, 2, 3, 4, 5]

輸出:0

說明: 0下標的元素為0

示例2:

輸入:nums = [1, 1, 1]

輸出:1

說明:nums長度在[1, 1000000]之間

此題為原書中的 follow-up,即陣列中可能包含重複元素的版本

最簡單的方法就是,直接遍歷一遍陣列,第一次滿足條件的時候就返回結果。

看完題解才知道可以用二分的思路查詢,大致思路:

遞迴判斷中點左側,如果有魔術索引,返回結果,否則到步驟2

如果中點時魔術索引,返回結果,否則到步驟3

遞迴判斷中點右側(遞迴過程也是優先判斷左側),如果有魔術索引,返回結果,否則返回 -1;

複雜度分析:

最壞情況要遍歷整個陣列,時間複雜度o(n)。

空間複雜度同時間複雜度o(n)。

使用直接遍歷陣列和二分遞迴方法提交的效率都差不多。

以下為自己提交的二分遞迴的**:

public class solution 

int findindex(int left,int right,int nums)

}

面試題 08 03 魔術索引

難度 簡單 題目描述 解題思路 如果不想複雜的話就很簡單嘛 看起來也不太像是二分的樣子啊 public intfindmagicindex int nums public intfindhelper int nums,int left,int right int mid left right lef...

面試題 08 03 魔術索引

魔術索引。在陣列a 0.n 1 中,有所謂的魔術索引,滿足條件a i i。給定乙個有序整數陣列,編寫一種方法找出魔術索引,若有的話,在陣列a中找出乙個魔術索引,如果沒有,則返回 1。若有多個魔術索引,返回索引值最小的乙個。示例1 輸入 nums 0,2,3,4,5 輸出 0 說明 0下標的元素為0 ...

面試題 08 03 魔術索引

魔術索引。在陣列a 0.n 1 中,有所謂的魔術索引,滿足條件a i i。給定乙個有序整數陣列,編寫一種方法找出魔術索引,若有的話,在陣列a中找出乙個魔術索引,如果沒有,則返回 1。若有多個魔術索引,返回索引值最小的乙個。示例1 輸入 nums 0,2,3,4,5 輸出 0說明 0下標的元素為0 示...