中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

golang刷leetcode技巧之如何實現排序變形

發布時間:2021-12-16 09:14:36 來源:億速云 閱讀:182 作者:小新 欄目:大數據

小編給大家分享一下golang刷leetcode技巧之如何實現排序變形,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

尋找旋轉排序數組中的最小值

假設按照升序排序的數組在預先未知的某個點上進行了旋轉。

( 例如,數組 [0,1,2,4,5,6,7] 可能變為 [4,5,6,7,0,1,2] )。

請找出其中最小的元素。

你可以假設數組中不存在重復元素。

示例 1:

輸入: [3,4,5,1,2]

輸出: 1

示例 2:

輸入: [4,5,6,7,0,1,2]

輸出: 0

解題思路:

1,因為兩部分仍然有序所以可以二分查找

2,如果arr[mid]<arr[r]著在左部分查找,否則在右部分

func findMin(nums []int) int {  return find(nums,0,len(nums)-1)}
func find(nums[]int ,l,r int)int{    mid:=(l+r)/2    if mid==l ||mid==r{        if nums[l]<nums[r]{            return nums[l]        }        return nums[r]    }    if nums[mid]<nums[r]{        return find(nums,l,mid)    }    return find(nums,mid,r)}
部分排序

給定一個整數數組,編寫一個函數,找出索引m和n,只要將索引區間[m,n]的元素排好序,整個數組就是有序的。注意:n-m盡量最小,也就是說,找出符合條件的最短序列。函數返回值為[m,n],若不存在這樣的m和n(例如整個數組是有序的),請返回[-1,-1]。

示例:

輸入:[1,2,4,7,10,11,7,12,6,7,16,18,19]

輸出:[3,9]

提示:

0 <= len(array) <= 1000000

解題思路:

1,將數組劃分成三部分,左邊的最大值一定小于中間和右邊部分

從左往右遍歷,依次取最大值,最后一個比最大值小的位置,是中間部分的右邊界(因為右邊部分,比中間和左邊大)

2,右邊最小值比中間和左邊部分大,從最右往左遍歷,取最小值,最后一個比最小值大的位置就是左邊界

3,看左邊界是不是比右邊界小

代碼實現:

func subSort(array []int) []int {  le:=len(array)-1  if le<1{      return []int{-1,-1}  }  min:=1000000  max:=-1000000  l:=le  r:=0
 /**1,2,4, || 7,10,11,7,12,6,7, || 16,18,19左邊               中間                  右邊最后是三個部分,左邊的最大值必須小于其右邊(中間和右邊)的最小值,右邊的最小值必須大于其左邊(左邊和中間)的最大值;那么從左往右找的是最大值,如果出現小于左邊最大值的情況,那么更新 rightindex,最后的 rightindex 右邊的必然大于這個最大值;從右往左找的是最小值,如果出現大于這個值的情況,那么更新 leftindex,最后的 leftindex 左邊的必然小于這個最小值;  */  for i:=0;i<=le;i++{      if array[i]>=max{          max=array[i]      }else{          r=i      }
     if array[le-i]<=min{          min=array[le-i]      }else{          l=le-i      }  }  if l<r{    return []int{l,r}  }  return []int{-1,-1}}

以上是“golang刷leetcode技巧之如何實現排序變形”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

盱眙县| 柞水县| 武清区| 永仁县| 黄梅县| 中方县| 察哈| 平和县| 巴彦淖尔市| 五大连池市| 宣汉县| 潮州市| 来凤县| 塔城市| 桑植县| 油尖旺区| 甘南县| 阿坝县| 广元市| 黄龙县| 车险| 克东县| 怀柔区| 高邑县| 万源市| 无棣县| 慈溪市| 彭水| 思南县| 盘锦市| 阿拉尔市| 海南省| 阳信县| 石林| 延庆县| 浏阳市| 依安县| 万源市| 焉耆| 尼玛县| 阳曲县|