国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

如何在旋轉(zhuǎn)排序數(shù)組中搜索目標(biāo)值

Java的二分查找算法可以在約束時(shí)間復(fù)雜度為O(logn)的情況下,快速地在有序數(shù)組中搜索目標(biāo)值。本篇經(jīng)驗(yàn)將介紹如何利用二分查找算法,在一個(gè)旋轉(zhuǎn)升序排序的數(shù)組中搜索目標(biāo)值。獲取旋轉(zhuǎn)點(diǎn)首先,我們需要編寫(xiě)

Java的二分查找算法可以在約束時(shí)間復(fù)雜度為O(logn)的情況下,快速地在有序數(shù)組中搜索目標(biāo)值。本篇經(jīng)驗(yàn)將介紹如何利用二分查找算法,在一個(gè)旋轉(zhuǎn)升序排序的數(shù)組中搜索目標(biāo)值。

獲取旋轉(zhuǎn)點(diǎn)

首先,我們需要編寫(xiě)一個(gè)函數(shù)來(lái)獲取旋轉(zhuǎn)點(diǎn)。旋轉(zhuǎn)點(diǎn)指的是從該索引值開(kāi)始向后為一個(gè)升序數(shù)組,其前面所有值也為一個(gè)升序數(shù)組。下面是圖示代碼:

```java

private int findRotationPoint(int[] nums) {

int left 0;

int right nums.length - 1;

while (left < right) {

int mid left (right - left) / 2;

if (nums[mid] > nums[right]) {

left mid 1;

} else {

right mid;

}

}

return left;

}

```

在有序區(qū)間內(nèi)搜索目標(biāo)值

接下來(lái),我們編寫(xiě)另一個(gè)函數(shù),用于在一個(gè)有序區(qū)間內(nèi)通過(guò)二分查找獲取目標(biāo)值的索引位置。如果數(shù)組中不存在目標(biāo)值,則返回-1。下面是相應(yīng)的代碼:

```java

private int searchInSortedRange(int[] nums, int target, int left, int right) {

while (left < right) {

int mid left (right - left) / 2;

if (nums[mid] target) {

return mid;

} else if (nums[mid] < target) {

left mid 1;

} else {

right mid - 1;

}

}

return -1;

}

```

在旋轉(zhuǎn)排序數(shù)組中搜索目標(biāo)值

現(xiàn)在,我們可以編寫(xiě)主函數(shù)來(lái)實(shí)現(xiàn)在一個(gè)旋轉(zhuǎn)排序的數(shù)組中搜索目標(biāo)值的功能。具體步驟如下:

1. 首先,利用上面的函數(shù)獲取旋轉(zhuǎn)點(diǎn)的索引位置。

2. 然后,根據(jù)旋轉(zhuǎn)點(diǎn)將數(shù)組分成兩個(gè)有序的區(qū)間。

3. 在這兩個(gè)區(qū)間中分別使用上面的函數(shù)來(lái)搜索目標(biāo)值的索引位置。

下面是相應(yīng)的代碼:

```java

public int search(int[] nums, int target) {

int rotationPoint findRotationPoint(nums);

int index searchInSortedRange(nums, target, 0, rotationPoint - 1);

if (index ! -1) {

return index;

}

return searchInSortedRange(nums, target, rotationPoint, nums.length - 1);

}

```

編寫(xiě)測(cè)試代碼

完成上述功能后,我們可以編寫(xiě)測(cè)試代碼來(lái)驗(yàn)證算法的正確性。具體代碼如下:

```java

public static void main(String[] args) {

Solution solution new Solution();

int[] nums {4, 5, 6, 7, 0, 1, 2};

int target 0;

int index (nums, target);

("目標(biāo)值 " target " 的索引位置是:" index);

}

```

運(yùn)行測(cè)試代碼

現(xiàn)在,我們可以運(yùn)行測(cè)試代碼,并觀察控制臺(tái)輸出結(jié)果。如果輸出符合預(yù)期,表示本地測(cè)試通過(guò)。

提交算法

最后,我們可以將代碼提交到相應(yīng)的平臺(tái)進(jìn)行測(cè)試。如果測(cè)試通過(guò),說(shuō)明我們成功地在旋轉(zhuǎn)排序數(shù)組中搜索到了目標(biāo)值。

標(biāo)簽: