三道劍指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...