581 最短無序連續子陣列

2021-10-02 11:29:37 字數 1125 閱讀 7317

給定乙個整數陣列,你需要尋找乙個連續的子陣列,如果對這個子陣列進行公升序排序,那麼整個陣列都會變為公升序排序。

你找到的子陣列應是最短的,請輸出它的長度。

複製陣列,對該陣列排序,然後和原陣列相比較,得到兩頭第乙個不一樣元素的位置,這個區間的長度即為返回值。這種方式的負責度是 o(排序的複雜度)+o(n),效率較低,n

2n^2

n2的排序在leetcode上會超時。我這裡用的快排。快排用了隨機選取軸點會提高一定的效率。

class

solution

void

quicksort

( vector<

int>

& nums,

int lo,

int hi )

void

swap

( vector<

int>

& nums,

int a,

int b )

intpartition

( vector<

int>

& nums,

int lo,

int hi )

nums[lo]

= pivot;

return lo;}}

;

class

solution

}else}if

(!flag )

return0;

// 如果falg為false,則證明該陣列是有序的。

flag =

false

;for

(int i = nums.

size()

-2; i >=0;

--i )

}else

}int lo =

0, hi =0;

for(

int i =

0; i < nums.

size()

;++i )

}for

(int i = nums.

size()

-1; i >=0;

--i )

}return hi-lo+1;

}};

581 最短無序連續子陣列

給定乙個整數陣列,你需要尋找乙個連續的子陣列,如果對這個子陣列進行公升序排序,那麼整個陣列都會變為公升序排序。你找到的子陣列應是最短的,請輸出它的長度。輸入 2,6,4,8,10,9,15 輸出 5 解釋 你只需要對 6,4,8,10,9 進行公升序排序,那麼整個表都會變為公升序排序。輸入的陣列長度...

581 最短無序連續子陣列

581.最短無序連續子陣列 關鍵字 逆序數,單調棧 給定乙個整數陣列,你需要尋找乙個連續的子陣列,如果對這個子陣列進行公升序排序,那麼整個陣列都會變為公升序排序。你找到的子陣列應是最短的,請輸出它的長度。示例 1 輸入 2,6,4,8,10,9,15 輸出 5 解釋 你只需要對 6,4,8,10,9...

581 最短無序連續子陣列

給你乙個整數陣列nums,你需要找出乙個連續子陣列,如果對這個子陣列進行公升序排序,那麼整個陣列都會變為公升序排序。請你找出符合題意的最短子陣列,並輸出它的長度。示例 1 輸入 nums 2,6,4,8,10,9,15 輸出 5 解釋 你只需要對 6,4,8,10,9 進行公升序排序,那麼整個表都會...