Java旋轉(zhuǎn)數(shù)組中最小數(shù)字具體實(shí)現(xiàn)(圖文詳解版)
1.題目描述
有一個(gè)長度為 n 的非降序數(shù)組,比如[1,2,3,4,5],將它進(jìn)行旋轉(zhuǎn),即把一個(gè)數(shù)組最開始的若干個(gè)元素搬到數(shù)組的末尾,變成一個(gè)旋轉(zhuǎn)數(shù)組,比如變成了[3,4,5,1,2],或者[4,5,1,2,3]這樣的。請(qǐng)問,給定這樣一個(gè)旋轉(zhuǎn)數(shù)組,求數(shù)組中的最小值。
示例
輸入:[3, 4, 5, 1, 2]
返回值:1
2.題解
分析
題目中的數(shù)組為

題目要求我們找出其中的最小值
具體實(shí)現(xiàn)
方法一(遍歷):
尋找數(shù)組中的最小值,遍歷數(shù)組即可找到最小值
public class Solution {
public int minNumberInRotateArray(int[] nums) {
if(nums.length == 0){
return -1;
}
int min = nums[0];
for (int i = 1; i < nums.length; i++) {
if (min > nums[i]) {
min = nums[i];
}
}
return min;
}
}方法二(排序):
使用Arrays.sort方法對(duì)數(shù)組進(jìn)行降序排序,則nums[0]即為數(shù)組的最小值
import java.util.Arrays;
public class Solution {
public int minNumberInRotateArray (int[] nums) {
if(nums.length == 0){
return -1;
}
Arrays.sort(nums);
return nums[0];
}
}方法三(二分查找):
數(shù)組原本是一個(gè)升序數(shù)組,旋轉(zhuǎn)之后,數(shù)組被分成兩部分,前、后半部分分別為升序,后半部分小于前半部分,我們可以利用二分查找的思想,找到其旋轉(zhuǎn)點(diǎn),即可找到數(shù)組的最小值
首先找到數(shù)組首尾兩端元素,并求出數(shù)組中間的下標(biāo)

再將數(shù)組中間值與數(shù)組首尾兩端元素進(jìn)行比較,
若nums[mid] > nums[right],則left = mid + 1

若nums[mid] < nums[right],則right = mid

若nums[mid] = nums[right], 則將right向左移動(dòng)一位,即right--

然后進(jìn)入下一次循環(huán),循環(huán)的條件為left < right
通過不斷縮小范圍,最終能夠找到數(shù)組的最小值

完整代碼
public class Solution {
public int minNumberInRotateArray(int[] nums) {
if(nums.length == 0){
return -1;
}
int left = 0;
int right = nums.length - 1;
while(left < right){
//找到數(shù)組的中點(diǎn)
int mid = (left + right) / 2;
if(nums[mid] > nums[right]){
//旋轉(zhuǎn)點(diǎn)在[mid+1, j]中,跳過mid+1左邊元素
left = mid + 1;
} else if(nums[mid] < nums[right]){
//旋轉(zhuǎn)點(diǎn)在[left, mid]中,跳過mid右邊元素
right = mid;
}else{
//縮小right繼續(xù)查找
right--;
}
}
//返回旋轉(zhuǎn)點(diǎn)
return nums[left];
}
}注:題目出自??途W(wǎng),鏈接如下
旋轉(zhuǎn)數(shù)組的最小數(shù)字_??皖}霸_牛客網(wǎng) (nowcoder.com)
總結(jié)
到此這篇關(guān)于Java旋轉(zhuǎn)數(shù)組中最小數(shù)字具體實(shí)現(xiàn))的文章就介紹到這了,更多相關(guān)Java旋轉(zhuǎn)數(shù)組最小數(shù)字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot+Flowable?快速實(shí)現(xiàn)工作流的開發(fā)流程
這篇文章主要介紹了Springboot+Flowable?快速實(shí)現(xiàn)工作流的開發(fā)流程,本文通過實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
Jenkins遷移job插件Job Import Plugin流程詳解
這篇文章主要介紹了Jenkins遷移job插件Job Import Plugin流程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
詳解@ConfigurationProperties如何裝載到Spring容器中
這篇文章主要為大家詳細(xì)介紹了@ConfigurationProperties該如何裝載到Spring容器中,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考一下2023-07-07
elasticsearch設(shè)置賬號(hào)和密碼的完整代碼示例
這篇文章主要介紹了如何在Docker中安裝和配置Elasticsearch(ES)和Kibana,描述了如何設(shè)置Kibana的用戶和密碼,并解決由于ES默認(rèn)禁止使用超級(jí)用戶登錄Kibana的問題,需要的朋友可以參考下2025-01-01
JavaSwing GridLayout 網(wǎng)格布局的實(shí)現(xiàn)代碼
這篇文章主要介紹了JavaSwing GridLayout 網(wǎng)格布局的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12

