日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode(81): 搜索旋转排序数组 II

發(fā)布時間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode(81): 搜索旋转排序数组 II 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Medium!

題目描述:

假設(shè)按照升序排序的數(shù)組在預(yù)先未知的某個點上進行了旋轉(zhuǎn)。

( 例如,數(shù)組?[0,0,1,2,2,5,6]?可能變?yōu)?[2,5,6,0,0,1,2]?)。

編寫一個函數(shù)來判斷給定的目標(biāo)值是否存在于數(shù)組中。若存在返回?true,否則返回?false。

示例?1:

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

示例?2:

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

進階:

  • 這是?搜索旋轉(zhuǎn)排序數(shù)組?的延伸題目,本題中的?nums? 可能包含重復(fù)元素。
  • 這會影響到程序的時間復(fù)雜度嗎?會有怎樣的影響,為什么?

解題思路:

這道是之前那道?Search in Rotated Sorted Array 在旋轉(zhuǎn)有序數(shù)組中搜索?的延伸,現(xiàn)在數(shù)組中允許出現(xiàn)重復(fù)數(shù)字,這個也會影響我們選擇哪半邊繼續(xù)搜索,由于之前那道題不存在相同值,我們在比較中間值和最右值時就完全符合之前所說的規(guī)律:如果中間的數(shù)小于最右邊的數(shù),則右半段是有序的,若中間數(shù)大于最右邊數(shù),則左半段是有序的。而如果可以有重復(fù)值,就會出現(xiàn)來面兩種情況,[3 1 1] 和 [1 1 3 1],對于這兩種情況中間值等于最右值時,目標(biāo)值3既可以在左邊又可以在右邊,那怎么辦么,對于這種情況其實處理非常簡單,只要把最右值向左一位即可繼續(xù)循環(huán),如果還相同則繼續(xù)移,直到移到不同值為止,然后其他部分還采用?Search in Rotated Sorted Array 在旋轉(zhuǎn)有序數(shù)組中搜索?中的方法,可以得到代碼如下。

C++解法一:

1 class Solution { 2 public: 3 bool search(int A[], int n, int target) { 4 if (n == 0) return false; 5 int left = 0, right = n - 1; 6 while (left <= right) { 7 int mid = (left + right) / 2; 8 if (A[mid] == target) return true; 9 else if (A[mid] < A[right]) { 10 if (A[mid] < target && A[right] >= target) left = mid + 1; 11 else right = mid - 1; 12 } else if (A[mid] > A[right]){ 13 if (A[left] <= target && A[mid] > target) right = mid - 1; 14 else left = mid + 1; 15 } else --right; 16 } 17 return false; 18 } 19 };

?

轉(zhuǎn)載于:https://www.cnblogs.com/ariel-dreamland/p/9159124.html

總結(jié)

以上是生活随笔為你收集整理的LeetCode(81): 搜索旋转排序数组 II的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。