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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode Search in Rotated Sorted Array II -- 有重复的旋转序列搜索

發(fā)布時間:2024/8/26 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode Search in Rotated Sorted Array II -- 有重复的旋转序列搜索 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


Follow up for "Search in Rotated Sorted Array":
What if?duplicates?are allowed?

Would this affect the run-time complexity? How and why?

Write a function to determine if a given target is in the array.

1 class Solution { 2 public: 3 bool search(int A[], int n, int target) { 4 int l=0,r=n-1; 5 while(l<=r){ 6 if(target==A[l]||target==A[r]) 7 return true; 8 int m =(l+r)/2; 9 if(target==A[m]) 10 return true; 11 if(A[l]<A[m]){ 12 if(target<A[m]&&target>A[l]) 13 r=m-1; 14 else 15 l=m+1; 16 }else if(A[l]>A[m]){ 17 if(target>A[m]&&target<A[r]) 18 l=m+1; 19 else 20 r=m-1; 21 }else 22 l++; 23 } 24 return false; 25 } 26 };

?

這道題是二分查找Search Insert Position的變體,思路在Search in Rotated Sorted Array中介紹過了,不了解的朋友可以先看看那道題哈。和Search in Rotated Sorted Array唯一的區(qū)別是這道題目中元素會有重復的情況出現(xiàn)。不過正是因為這個條件的出現(xiàn),出現(xiàn)了比較復雜的case,甚至影響到了算法的時間復雜度。原來我們是依靠中間和邊緣元素的大小關(guān)系,來判斷哪一半是不受rotate影響,仍然有序的。而現(xiàn)在因為重復的出現(xiàn),如果我們遇到中間和邊緣相等的情況,我們就丟失了哪邊有序的信息,因為哪邊都有可能是有序的結(jié)果。假設(shè)原數(shù)組是{1,2,3,3,3,3,3},那么旋轉(zhuǎn)之后有可能是{3,3,3,3,3,1,2},或者{3,1,2,3,3,3,3},這樣的我們判斷左邊緣和中心的時候都是3,如果我們要尋找1或者2,我們并不知道應(yīng)該跳向哪一半。解決的辦法只能是對邊緣移動一步,直到邊緣和中間不在相等或者相遇,這就導致了會有不能切去一半的可能。所以最壞情況(比如全部都是一個元素,或者只有一個元素不同于其他元素,而他就在最后一個)就會出現(xiàn)每次移動一步,總共是n步,算法的時間復雜度變成O(n)。代碼如下:

轉(zhuǎn)載于:https://www.cnblogs.com/zl1991/p/7079377.html

總結(jié)

以上是生活随笔為你收集整理的LeetCode Search in Rotated Sorted Array II -- 有重复的旋转序列搜索的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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