2019 10 18刷題小結

2021-09-28 18:36:14 字數 834 閱讀 8077

三道劍指offer一道leetcode。

1.陣列中超過一半的數。

申請兩個變數,乙個代表當前出現次數最多的數字,乙個代表相對出現的次數。分別初始化為陣列第乙個數和1.如果下乙個數和當前數相同,次數++,否則次數--。如果次數減為0,那麼就把當前數更新為此時遍歷的數,次數初始化為1.

最後再遍歷一遍陣列此時儲存的數是否出現次數超過一半。

int morethanhalfnum_solution(vectornumbers) 

int curnumber=numbers[0];

int count=1;

for(int i=1;i2.最小的k個數。

兩種做法。第一種利用快排的思想,找到第k個位置。則左邊的數即為最小的k個數。

第二種利用最大堆的概念,適合資料流。首先儲存乙個包含k個元素的堆。然後再來乙個元素的話與堆頂進行比較,比堆頂小的話刪除堆頂,把當前數加入進去即可。

typedef multiset>::iterator setit;

typedef multiset> se;

class solution

}return res;

}

4.判斷鍊錶是否有環(比昨天還簡單一點,讓我偷個懶吧,導師一直在邊上轉來轉去,不敢寫別的了)

bool hascycle(listnode *head) 

listnode *slow=head;

listnode *fast=head;

while(fast||fast->next)

if(fast==slow)

} }

2019 10 10刷題小結

今天的目標三道劍指offer,一道leetcode。完成 1.二維陣列查詢某個數是否存在,陣列是從左到右,從上到下依次增大的,可以從右上角和左下角開始查詢。以右上角為例。a 首先處理一下特殊情況,獲取一下二維陣列的行數,如果二維陣列為空直接返回false.b 再獲取列數。從右上角開始查詢的話則當前行...

2019 10 12刷題小結

三道劍指offer,一道leetcode,完成。1.斐波那契數列 num1 1 num2 1 next num2 num1 num1 num2 num2 next int fibonacci int n if n 1 n 2 int pre1 1 int pre2 1 int res 0 for i...

2019 10 15刷題小結

三道劍指offer,一道leetcode,完成。1.合併兩個排序鍊錶。a 如果任何乙個鍊錶為空,那麼返回另乙個煉表頭結點即可。b 申請兩個鍊錶節點變數,乙個用來當做返回的頭結點,乙個用來作為新鍊錶的遍歷。c 最後別忘了把剩下的加到新鍊錶的最後。listnode merge listnode phea...