求旋轉陣列的最小數字

2022-04-17 12:40:05 字數 1413 閱讀 7187

package com.study;

/* * 求旋轉陣列的最小數字

* 設定:輸入遞增排序陣列的乙個旋轉

* 要求返回最小的數

* */

public class suanfa6 ;

//private static int arr = ;

private static int arr = ;

// private static int arr =

// private static int arr = ;

public static int rotate(int arr)

else if (after - pre == 1)

for (pre = 1, after = arr.length - 2; pre <= after; pre++, after--)

if (arr[pre] - arr[after] > dif) else

} return -1;

} public static int findindex(int arr, int pre, int after)

return pre;

} public static int rotatenew(int arr)

mid = (pre + after) / 2;

if (arr[pre] == arr[after] && arr[pre] == arr[mid])

mid = findindex(arr, pre, after);

if (arr[pre] <= arr[mid])

pre = mid;

else if (arr[pre] >= arr[mid])

after = mid;

} return arr[mid];

/** int mid = (pre + after) / 2; while (arr[pre] < arr[mid])

* * if (arr[pre] > arr[mid])

*/} public static void main(string args)

}

1.rotate函式是自己做的一版,自己選了多組測試例都通過了,好像沒啥問題。但是較為繁瑣。思路是通過首尾兩個指標,分別往中間靠攏,然後比較首尾之差,我的理解是因為前面部分也遞增,後面也是遞增,所以差會越來越大,終止條件就是首尾指標碰到一塊或者出現了負數,也就是兩個指標都跑到乙個遞增部分了。但是期間,要考慮各種不對稱情況,且演算法複雜度較高。

2.rotatenew函式是自己參照劍指offer書上的答案寫的,演算法複雜度降到了o(logn),是二分法的乙個發散,相當經典,值得學習。且考慮了 1,0,1,1類似這種非遞減序列的情況。

3.注釋部分是自己的另一種思路,實現過程中各種問題,還是沒有把二分的思路應用到解題中,汗!

旋轉陣列最小數字

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列 為的乙個旋轉,該陣列的最小值為1。code int min int numbers,int length int low 0 int high length 1 in...

旋轉陣列最小數字

旋轉陣列最小數字 劍指offer 二分查詢 題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。解題思路 題目要求找到最小元素,第一反應是排序,但陣列基本有序直接排序浪費效能。結合資料的特點前半部分遞增,後半部分遞減,...

6 求旋轉陣列的最小數字

旋轉陣列 把陣列的前一部分放到陣列的末尾,稱為旋轉陣列 eg 陣列 3,4,5,1,2 為陣列 1,2,3,4,5 的旋轉陣列。輸入乙個 非遞減 陣列的乙個旋轉陣列,求該陣列的最小元素,若陣列大小為0,返回0 普通解法 遍歷陣列,求取陣列的最小元素,時間複雜度o n 不作解釋,不貼 了 二分查詢法 ...