本系列的演算法題目來自領扣網
在未排序的陣列中找到第k個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。
示例:
輸入: [3,2,1,5,6,4] 和 k = 2
輸出: 5
輸入: [3,2,3,1,2,4,5,5,6] 和 k = 4
輸出: 4
說明:
你可以假設 k 總是有效的,且 1 ≤ k ≤ 陣列的長度。
思路一:
看到這題的第乙個思路是:採用快速排序,排序後在取第k個元素。
**如下:
class
solution
public
static
void
questsort
(int
nums,
int _left,
int _right)
int temp = nums[left]
;while
(left < right)
nums[left]
= nums[right];if
(left < right && nums[left]
>= temp)
nums[right]
= nums[left];}
nums[right]
= temp;
questsort
(nums,_left,left-1)
;questsort
(nums,right+
1,_right);}
}// 用時153ms
後續思考:
感覺這個效率好低,然後寫完之後看了一下最佳答案,發現其實不用排序,只要採用快排的思路即可。
思路二:
快排可以使元素分成兩部分,在這裡前面部分是大於指定資料的,後面部分是小於指定資料的,這樣的話,只需要使得前面大於它的數有k個就好了。
**如下:
class
solution
else
if(k < loopvalue)
else
loopvalue =
questsortnum
(nums,left,right);}
}public
static
intquestsortnum
(int
nums,
int left,
int right)
int temp = nums[left]
;while
(left < right)
nums[left]
= nums[right];if
(left < right && nums[left]
>= temp)
nums[right]
= nums[left];}
nums[right]
= temp;
return left;}}
// 第一次用時54ms,第二次用時63ms,神奇,形同**,速度不一樣......
後續思考:
之前一直想著,利用快速排序的方法,先快排一遍,判斷當前排序後的參考值的位置,然後在使其中一邊等於參考值的位置,導致這個死活的迴圈不出來,後面想通了,如果迴圈到後面,兩個數相等,這個左右的位置就不會再變動,就會一直死迴圈在這個,這樣會有問題,然後就拋棄當前參考值的位置,反正判斷都不是那個位置。
領扣上面該題其他高質量範例:
class
solution
else
}return nums[k];}
intqsort
(int
nums,
int left,
int right)
}while
(i <= j);if
(j < left)
return left;
//防止j越界,陷入無限迴圈
return j;}}
// 用時2ms
後續思考:
第一眼看到這個程式時,總覺得判斷後直接 i++ 或者 j-- ,在某種特定的情況下會產生資料越界,測試後發現,無論什麼情況,都會有一種情況出現,就是數的本身不會小於或者大於它自己,所以不會再這裡不會造成資料越界,同時又需要返回值,不管是left,還是right,最後遍歷都有可能到資料的最右端或者最左端,所以需要判斷返回值是否越界。
至於為什麼比我上面那個速度要快,還沒想清楚在哪,後續在思考思考,想通了再補上、。
領扣網演算法學習筆記 283
本系列的演算法題目來自領扣網 給定乙個陣列nums,編寫乙個函式將所有0移動到陣列的末尾,同時保持非零元素的相對順序。示例 輸入 0,1,0,3,12 輸出 1,3,12,0,0 說明 必須在原陣列上操作,不能拷貝額外的陣列。儘量減少操作次數。思路一 看到這題的第乙個思路是 檢測到0後,將陣列後面的...
領扣網演算法學習筆記 167
本系列的演算法題目來自領扣網 給定乙個已按照 公升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。函式應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2。示例 輸入 numbers 2,7,11,15 target 9 輸出 1,2 解釋 2 ...
演算法 學習筆記
1.輸入輸出演算法至少有乙個或多個輸出 2.有窮性 3.確定性 4.可行性 1.正確性a.演算法程式沒有語法錯誤 b.演算法程式對於合法的輸入資料能夠產生滿足要求的輸出結果 c.演算法程式對於非法的輸入資料能夠得出滿足規格說明的結果 d.演算法對於精心選擇的,甚至刁難的測試資料都有滿足要求的輸出結果...