《程式設計之美》之尋找發帖水王與JOJ 1069

2021-09-30 03:40:45 字數 591 閱讀 6395

兩個題目解題思想非常相似。就是把乙個問題轉化為規模較小的問題,在轉化的過程中小問題與原問題本質上一致。這樣,可以通過把小問題轉化為更小的問題。

尋找發帖水王題目是找出一堆資料**現次數超過總數一半的那個資料。《程式設計之美》上的分析是:如果每次刪除兩個不同的資料,那麼剩下的資料列表中,我們要找的那個資料的出現次數仍然超過總數的一半。於是,可以在o(n)的時間複雜度內和o(1)的空間複雜度解決這個問題。

joj 1069是約瑟夫問題,說有2n個人圍成一圈,前n個人是好人,後n個人是壞人,第乙個人從1開始報數,每報到m的人將被處決,然後從被處決的人的下乙個人從1開始重新報數,如此迴圈,為了挽救前n個好人,要找出乙個m,使得後n個壞人最先被處決。程式設計找出最小的m。

我們從第乙個好人開始從1進行編號,那麼根據要求,在2n個人被處決剩下n個人之前,所有被處決的人的編號都應該是大於n的。如果對於乙個具體的數值m,它是答案的必要條件是面對這2n個人,第乙個被處決的人的編號大於n,之後,面對這2n-1個人,被處決的人的編號也應該大於n。這個題目不關心具體哪乙個人被處決,而只關心被處決的人的位置。

由上,可以令m初始為n+1,然後檢驗這個m是否滿足條件,若不滿足,令m取下乙個數,重新檢驗,否則,找到了答案。**如下:

程式設計之美 尋找發帖「水王」

描述 直接拍照,懶得打字 此題很容易轉換為,在乙個陣列中,有乙個數出現的次數超過了陣列元素個數的一半,請找出這個元素。方法一 對陣列排序進行排序,利用通常的排序方法,複雜度o nlgn 再遍歷一遍陣列,找出那個元素,複雜度為o n 空間複雜度o 1 方法二 空間換時間吧,在開闢乙個陣列,hash對映...

程式設計之美 尋找發帖「水王」

基礎問題 找出發帖數超過帖子總數一半的id.拓展問題 有三人發帖數都超過了帖子總數目n 的1 4 找出他們的 id.我們可以先排序然後找出中間的那個id 但可以考慮避免排序來改進時間複雜度。每次從列表刪除兩個不相同的id 剩餘的相同 id就是找到的 水王 type find type id,int ...

程式設計之美 尋找發帖水王

程式設計之美 尋找發帖水王.cpp 定義控制台應用程式的入口點。有乙個水王發帖超過一半 給你發帖所有的id 找到他 統計每個id出現次數 找到最大的 超過一半 include stdafx.h include include include using namespace std class id ...