<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ?LeetCode刷題實戰(zhàn)215:數(shù)組中的第K個最大元素

          共 3708字,需瀏覽 8分鐘

           ·

          2021-03-19 14:00

          算法的重要性,我就不多說了吧,想去大廠,就必須要經(jīng)過基礎(chǔ)知識和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個公眾號后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

          今天和大家聊的問題叫做 數(shù)組中的第K個最大元素,我們先來看題面:
          https://leetcode-cn.com/problems/kth-largest-element-in-an-array/

          Given an integer array nums and an integer k, return the kth largest element in the array.


          Note that it is the kth largest element in the sorted order, not the kth distinct element.

          題意


          在未排序的數(shù)組中找到第 k 個最大的元素。請注意,你需要找的是數(shù)組排序后的第 k 個最大的元素,而不是第 k 個不同的元素。

          示例


          示例 1:

          輸入: [3,2,1,5,6,4] 和 k = 2
          輸出: 5

          示例 2:

          輸入: [3,2,3,1,2,4,5,5,6] 和 k = 4
          輸出: 4

          說明:

          你可以假設(shè) k 總是有效的,且 1 ≤ k ≤ 數(shù)組的長度。


          解題


          利用快速排序,快速定位第k大的元素,具體可看代碼注釋


          class Solution {
              public int findKthLargest(int[] nums, int k) {
                  return find(nums, 0, nums.length-1, k);
              }
              
              int find(int[] nums, int s, int e, int k) {
                  // 設(shè)定flag,默認用nums[s]
                  int flag = nums[s];
                  int ss = s;
                  int ee = e;
                  while(ss<ee) {
                      // 從后向前找到第一個比flag大的數(shù)
                      while(ss<ee && nums[ee] <= flag)
                          ee--;
                      // 交換flag和比flag大的數(shù)
                      nums[ss] = nums[ee];
                      nums[ee] = flag;
                      // 從前向后找到第一個小于等于flag的數(shù)
                      while(ss<ee && nums[ss] > flag)
                          ss++;
                      // 交換flag和比flag小的數(shù)
                      nums[ee] = nums[ss];
                      nums[ss] = flag;
                  }
                  // 返回結(jié)果
                  if(ss + 1 == k)
                      return nums[ss];
                  // 找到的數(shù)比k小,更新s
                  else if(ss + 1 < k)
                      return find(nums, ss+1, e, k);
                  // 找到的數(shù)比k大,更新e
                  else 
                      return find(nums, s, ss-1, k);
              }
          }


          好了,今天的文章就到這里,如果覺得有所收獲,請順手點個在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動力 。

          上期推文:

          LeetCode1-200題匯總,希望對你有點幫助!

          LeetCode刷題實戰(zhàn)201:數(shù)字范圍按位與

          LeetCode刷題實戰(zhàn)202:快樂數(shù)

          LeetCode刷題實戰(zhàn)203:移除鏈表元素

          LeetCode刷題實戰(zhàn)204:計數(shù)質(zhì)數(shù)

          LeetCode刷題實戰(zhàn)205:同構(gòu)字符串

          LeetCode刷題實戰(zhàn)206:反轉(zhuǎn)鏈表

          LeetCode刷題實戰(zhàn)207:課程表

          LeetCode刷題實戰(zhàn)208:實現(xiàn) Trie (前綴樹)

          LeetCode刷題實戰(zhàn)209:長度最小的子數(shù)組

          LeetCode刷題實戰(zhàn)210:課程表 II

          LeetCode刷題實戰(zhàn)211:添加與搜索單詞

          LeetCode刷題實戰(zhàn)212:單詞搜索 II

          LeetCode刷題實戰(zhàn)213:打家劫舍 II

          LeetCode刷題實戰(zhàn)214:最短回文串


          瀏覽 46
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黄色一级在线观看 | 天堂男人网 | 一级黄色片免费看在干嘛呢 | 波多野结衣中文字幕乱码 | 精品91 |