国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

33.搜索旋轉(zhuǎn)排序數(shù)組

這篇具有很好參考價值的文章主要介紹了33.搜索旋轉(zhuǎn)排序數(shù)組。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

33.搜索旋轉(zhuǎn)排序數(shù)組

整數(shù)數(shù)組 nums 按升序排列,數(shù)組中的值 互不相同

在傳遞給函數(shù)之前,nums 在預先未知的某個下標 k0 <= k < nums.length)上進行了 旋轉(zhuǎn),使數(shù)組變?yōu)?[nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下標 從 0 開始 計數(shù))。例如, [0,1,2,4,5,6,7] 在下標 3 處經(jīng)旋轉(zhuǎn)后可能變?yōu)?[4,5,6,7,0,1,2] 。

給你 旋轉(zhuǎn)后 的數(shù)組 nums 和一個整數(shù) target ,如果 nums 中存在這個目標值 target ,則返回它的下標,否則返回 -1 。

你必須設計一個時間復雜度為 O(log n) 的算法解決此問題。

示例 1:

輸入:nums = [4,5,6,7,0,1,2], target = 0
輸出:4

示例 2:

輸入:nums = [4,5,6,7,0,1,2], target = 3
輸出:-1

示例 3:

輸入:nums = [1], target = 0
輸出:-1

提示:

  • 1 <= nums.length <= 5000
  • -104 <= nums[i] <= 104
  • nums 中的每個值都 獨一無二
  • 題目數(shù)據(jù)保證 nums 在預先未知的某個下標上進行了旋轉(zhuǎn)
  • -104 <= target <= 104

官方題解思路:這道題中,數(shù)組本身不是有序的,進行旋轉(zhuǎn)后只保證了數(shù)組的局部是有序的,這還能進行二分查找嗎?答案是可以的

將數(shù)組從中間分開成左右兩部分的時候,一定有一部分的數(shù)組是有序的。

拿示例來看,[0,1,2,4,5,6,7]分開以后數(shù)組變成了 [4, 5, 6,7] 和 [0, 1, 2] 兩個部分,其中左邊 [4, 5, 6,7] 這個部分的數(shù)組是有序的,其他也是如此。

我們可以在常規(guī)二分查找的時候查看當前 mid 為分割位置分割出來的兩個部分 [l, mid] 和 [mid + 1, r] 哪個部分是有序的,并根據(jù)有序的那個部分確定我們該如何改變二分查找的上下界,因為我們能夠根據(jù)有序的那部分判斷出 target 在不在這個部分

  • 如果 [l, mid - 1] 是有序數(shù)組,且 target 的大小滿足 [nums[l],nums[mid]),則我們應該將搜索范圍縮小至 [l, mid - 1],否則在 [mid + 1, r] 中尋找。
  • 如果 [mid, r] 是有序數(shù)組,且 target 的大小滿足 (nums[mid+1],nums[r]],則我們應該將搜索范圍縮小至 [mid + 1, r],否則在 [l, mid - 1] 中尋找。

33.搜索旋轉(zhuǎn)排序數(shù)組,algorithm,數(shù)據(jù)結(jié)構(gòu),java,算法文章來源地址http://www.zghlxwxcb.cn/news/detail-789611.html

public class Problem_0033_SearchInRotatedSortedArray {
	public int search(int[] nums, int target) {
		// 題目提示中已經(jīng)表示1 <= nums.length,不需要判空
		int start = 0, end = nums.length - 1;
		while (start <= end) {
			int mid = start + ((end - start) >> 1);
			if (nums[mid] == target) {
				return mid;
			}
			// 前半段有序
			if (nums[mid] > nums[end]) {
				if (nums[start] <= target && nums[mid] > target) {
					end = mid - 1;
				} else {
					start = mid + 1;
				}
			} else {
				if (nums[mid] < target && nums[end] >= target) {
					start = mid + 1;
				} else {
					end = mid - 1;
				}
			}
		}
		return -1;
	}
}

到了這里,關于33.搜索旋轉(zhuǎn)排序數(shù)組的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包