Java數(shù)學(xué)算法題-00

數(shù)組中出現(xiàn)次數(shù)超過一半的數(shù)字

給一個長度為 n 的數(shù)組芙贫,數(shù)組中有一個數(shù)字出現(xiàn)的次數(shù)超過數(shù)組長度的一半,請找出這個數(shù)字互亮。
例如輸入一個長度為9的數(shù)組[1,2,3,2,2,2,5,4,2]汗捡。由于數(shù)字2在數(shù)組中出現(xiàn)了5次,超過數(shù)組長度的一半走搁,因此輸出2。

  • 兩件事迈窟。第一件事找眾數(shù)私植。第二件事檢查這個數(shù)有沒有超一半。
  • 我從前往后查 i 個數(shù)车酣。這 i 個數(shù)中的那個眾數(shù)曲稼,他的數(shù)量一定大于其他數(shù)出現(xiàn)的次數(shù)『保可以認為 臨時眾數(shù) - 其他數(shù)出現(xiàn)次數(shù) > 0贫悄。
  • 如果等于某次等于0了,說明有兩個候選的眾數(shù)了娘摔。此時不管窄坦,將新的那個數(shù)設(shè)為臨時眾數(shù)。因為按照題意凳寺,不管怎樣只會有一個眾數(shù)存在鸭津,如果存在兩個眾數(shù),一定不會超過數(shù)組長度一半肠缨。那假設(shè)存在一個符合題意的眾數(shù)逆趋。在查到 i 的時候,兩個數(shù)出現(xiàn)的次數(shù)相同怜瞒,那么在后續(xù)的遍歷中父泳,肯定會因為次數(shù)的原因而改變?yōu)檎_答案般哼。
  • 可以理解為查找眾數(shù)的一個算法吴汪。
  • 眾數(shù)找出來了惠窄,遍歷一下就可以知道出現(xiàn)幾次了。
public int MoreThanHalfNum_Solution(int[] nums) {
    int majority = nums[0];
    for (int i = 1, cnt = 1; i < nums.length; i++) {
        cnt = nums[i] == majority ? cnt + 1 : cnt - 1;
        if (cnt == 0) {
            majority = nums[i];
            cnt = 1;
        }
    }
    int cnt = 0;
    for (int val : nums)
        if (val == majority)
            cnt++;
    return cnt > nums.length / 2 ? majority : 0;
}

https://github.com/CyC2018/CS-Notes/blob/master/notes/39.%20%E6%95%B0%E7%BB%84%E4%B8%AD%E5%87%BA%E7%8E%B0%E6%AC%A1%E6%95%B0%E8%B6%85%E8%BF%87%E4%B8%80%E5%8D%8A%E7%9A%84%E6%95%B0%E5%AD%97.md


圓圈中最后剩下的數(shù)

讓小朋友們圍成一個大圈漾橙。然后杆融,隨機指定一個數(shù) m,讓編號為 0 的小朋友開始報數(shù)霜运。每次喊到 m-1 的那個小朋友要出列唱首歌脾歇,然后可以在禮品箱中任意的挑選禮物,并且不再回到圈中淘捡,從他的下一個小朋友開始藕各,繼續(xù) 0...m-1 報數(shù) .... 這樣下去 .... 直到剩下最后一個小朋友,可以不用表演焦除。

  • 經(jīng)典約瑟夫環(huán)激况。
  • 我們做題的時候,往往會不自覺的注重一道題的過程膘魄。比如這道題乌逐,我最開始的思路是哪些數(shù)死,死到最后创葡,哪個數(shù)活下來浙踢。但是,這道題的思路則要相反灿渴。直接想辦法確定哪個數(shù)活下來洛波,這個活下來的數(shù),對后面的答案的影響骚露。
  • 2個參數(shù)蹬挤。一個隨機數(shù)m,一個總?cè)藬?shù)n荸百∥帕妫看到兩個參數(shù),首先想到的肯定是f(n,m)够话,先不管是什么函數(shù)蓝翰,用的什么方法,肯定存在這個函數(shù)女嘲。
  • 那接下來就是找這個函數(shù)的對應(yīng)關(guān)系或者邏輯畜份。
  • 針對這道題,我的理解是先畫圖欣尼,根據(jù)結(jié)果爆雹,反推邏輯停蕉。
    紅色是第一個圈刪除 , 綠色是第二個圈刪除钙态,黑色是第三個圈即以上刪除慧起。
    a. m=2


    m=2.png

    b. m=3


    m=3.png
  • 結(jié)論是上一個數(shù)的答案往后數(shù)m個,就是本次的答案册倒。
public int LastRemaining_Solution(int n, int m) {
    if (n == 0)     /* 特殊輸入的處理 */
        return -1;
    if (n == 1)     /* 遞歸返回條件 */
        return 0;
    return (LastRemaining_Solution(n - 1, m) + m) % n;
}

https://github.com/CyC2018/CS-Notes/blob/master/notes/62.%20%E5%9C%86%E5%9C%88%E4%B8%AD%E6%9C%80%E5%90%8E%E5%89%A9%E4%B8%8B%E7%9A%84%E6%95%B0.md


從 1 到 n 整數(shù)中 1 出現(xiàn)的次數(shù)

輸入一個整數(shù) n 蚓挤,求 1~n 這 n 個整數(shù)的十進制表示中 1 出現(xiàn)的次數(shù)
例如, 1~13 中包含 1 的數(shù)字有 1 驻子、 10 灿意、 11 、 12 崇呵、 13 因此共出現(xiàn) 6 次
注意:11 這種情況算兩次

  • 先明確思路啊缤剧,按位計算1出現(xiàn)的次數(shù),然后加起來域慷。
  • 問題變成每一個位上1出現(xiàn)的次數(shù)荒辕,怎么計算。
  • 123123芒粹,比如計算百位上1出現(xiàn)的次數(shù)時兄纺,開頭的123算往上計算,后面的23算向下計算化漆。
  • 考慮2種情況估脆。
    a. 這個位上的數(shù)字為1。
    和123200百位上1出現(xiàn)的次數(shù)不同的是座云,最后一次循環(huán)疙赠,沒有123124-123199。
    在往前的計算過程中朦拖,通過前3位123*100圃阳,即為1出現(xiàn)的次數(shù)。
    在往后計算的過程中璧帝。通過最后兩位的可能性可知捍岳,有00-23的次數(shù),為24次睬隶。即最后兩位+1锣夹。
    b. 這個位上的數(shù)字為2-9。
    和123200百位上1出現(xiàn)的次數(shù)類似苏潜,最后一次循環(huán)银萍,包含了123124-123199。
    在往前的計算過程中恤左,前3位123+1贴唇,得到124搀绣,124*100即為1出現(xiàn)的次數(shù)。
    沒有必要往后計算戳气。
    c. 這個位上的數(shù)字位0链患。
    假設(shè)為123023。
    往前計算物咳,123*100锣险。
    往后計算不了蹄皱。最后一次循環(huán)览闰,達不到1。
  • 分類的計算方式巷折,代碼上看一眼就明白了压鉴。+8確實很精彩。
public int NumberOf1Between1AndN_Solution(int n) {
    int cnt = 0;
    for (int m = 1; m <= n; m *= 10) {
        int a = n / m, b = n % m;
        cnt += (a + 8) / 10 * m + (a % 10 == 1 ? b + 1 : 0);
    }
    return cnt;
}

https://github.com/CyC2018/CS-Notes/blob/master/notes/43.%20%E4%BB%8E%201%20%E5%88%B0%20n%20%E6%95%B4%E6%95%B0%E4%B8%AD%201%20%E5%87%BA%E7%8E%B0%E7%9A%84%E6%AC%A1%E6%95%B0.md


引用倉庫:https://github.com/CyC2018/CS-Notes/blob/master/notes/%E5%89%91%E6%8C%87%20Offer%20%E9%A2%98%E8%A7%A3%20-%20%E7%9B%AE%E5%BD%95.md

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锻拘,一起剝皮案震驚了整個濱河市油吭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌署拟,老刑警劉巖婉宰,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異推穷,居然都是意外死亡心包,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門馒铃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蟹腾,“玉大人,你說我怎么就攤上這事区宇⊥拗常” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵议谷,是天一觀的道長炉爆。 經(jīng)常有香客問我,道長卧晓,這世上最難降的妖魔是什么芬首? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮禀崖,結(jié)果婚禮上衩辟,老公的妹妹穿的比我還像新娘。我一直安慰自己波附,他們只是感情好艺晴,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布昼钻。 她就那樣靜靜地躺著,像睡著了一般封寞。 火紅的嫁衣襯著肌膚如雪然评。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天狈究,我揣著相機與錄音碗淌,去河邊找鬼。 笑死抖锥,一個胖子當著我的面吹牛亿眠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播磅废,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼纳像,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拯勉?” 一聲冷哼從身側(cè)響起竟趾,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宫峦,沒想到半個月后岔帽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡导绷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年犀勒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诵次。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡账蓉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出逾一,到底是詐尸還是另有隱情铸本,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布遵堵,位于F島的核電站箱玷,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏陌宿。R本人自食惡果不足惜锡足,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望壳坪。 院中可真熱鬧舶得,春花似錦、人聲如沸爽蝴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至九孩,卻和暖如春先馆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背躺彬。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工煤墙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宪拥。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓仿野,卻偏偏與公主長得像,于是被迫代替她去往敵國和親江解。 傳聞我的和親對象是個殘疾皇子设预,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 斐波那契數(shù)列 求斐波那契數(shù)列的第 n 項,n <= 39犁河。 我對動態(tài)規(guī)劃的理解是,一個問題的答案可以通過直接得出的...
    檸檬樹LeTr閱讀 335評論 0 0
  • 調(diào)整數(shù)組順序使奇數(shù)位于偶數(shù)前面 輸入一個長度為 n 整數(shù)數(shù)組魄梯,實現(xiàn)一個函數(shù)來調(diào)整該數(shù)組中數(shù)字的順序桨螺,使得所有的奇數(shù)...
    檸檬樹LeTr閱讀 121評論 0 0
  • 從尾到頭打印鏈表 從尾到頭反過來打印出每個結(jié)點的值。 感覺更優(yōu)-遞歸打123的逆序酿秸,先打23逆序再打1灭翔,先打3逆序...
    檸檬樹LeTr閱讀 316評論 0 0
  • 重建二叉樹 根據(jù)二叉樹的前序遍歷和中序遍歷的結(jié)果,重建出該二叉樹辣苏。假設(shè)輸入的前序遍歷和中序遍歷的結(jié)果中都不含重復(fù)的...
    檸檬樹LeTr閱讀 133評論 0 0
  • 重復(fù)數(shù)字 在一個長度為 n 的數(shù)組里的所有數(shù)字都在 0 到 n-1 的范圍內(nèi)肝箱。數(shù)組中某些數(shù)字是重復(fù)的,但不知道有幾...
    檸檬樹LeTr閱讀 291評論 0 1