2021-08-14 LeetCode 1224, 1201

LeetCode 1224

鏈接:https://leetcode.com/problems/maximum-equal-frequency/

方法:

時間復(fù)雜度:O(n)
想法:我當(dāng)時沒想出來倔喂,能想到解法但時間復(fù)雜度壓不下去×玖常看的大佬的解答https://www.acwing.com/solution/content/5271/。這題說前綴里面去掉一個元素刻恭,其余元素出現(xiàn)的頻數(shù)全部相同晚顷,那么可以分成以下幾種情況:

  • 1, 1, 1, ..., 1, 1
  • 1, k, k, ..., k, k
  • k, k, ..., k, k + 1
    由此發(fā)現(xiàn)要記錄每個數(shù)字出現(xiàn)的次數(shù)count,并且還要記錄每個“每個數(shù)字出現(xiàn)的次數(shù)”出現(xiàn)的次數(shù)freq浸卦,也就是說每種count的頻數(shù)是多少。我們還要記錄最大的freq的值就是頻數(shù)是多少案糙。那么根據(jù)上述分析的結(jié)論限嫌,寫一個if里面放三種可能性即可。這個題我感覺主要還是靠分析題目特點...感覺LeetCode里有好多不大好做的題都得找那個題的特有的規(guī)律和性質(zhì)时捌。雖然說這種東西也不是很好歸納怒医,但我打算找個機(jī)會把這種找特有性質(zhì)的題目一起復(fù)習(xí)一下。
    代碼:
class Solution {
    public int maxEqualFreq(int[] nums) {
        int n = nums.length;
        int[] cnt = new int[100010];
        int[] freq = new int[100010];
        int maxFreq = 0, res = 0;
        
        for (int i = 0; i < n; i++) {
            int num = nums[i];
            if (cnt[num] > 0) {
                freq[cnt[num]]--;
            }
            
            cnt[num]++;
            freq[cnt[num]]++;
            
            maxFreq = Math.max(maxFreq, cnt[num]);
            
            if (maxFreq == 1 || maxFreq * freq[maxFreq] + 1 == i + 1 || (maxFreq - 1) * (freq[maxFreq - 1] + 1) + 1 == i + 1) {
                res = i + 1;
            }
        }
        
        return res;
    }
}

LeetCode 1201

鏈接:https://leetcode.com/problems/ugly-number-iii/

方法:二分答案+數(shù)學(xué)(gcd+lcm)

時間復(fù)雜度:O(logm * logm), m代表數(shù)據(jù)范圍
想法:看一眼發(fā)現(xiàn)數(shù)據(jù)規(guī)模太大了奢讨,>=線性時間復(fù)雜度的統(tǒng)統(tǒng)沒戲稚叹。于是用數(shù)學(xué)方法做。所以說數(shù)學(xué)還是要學(xué)好,最起碼常見的問題什么gcd扒袖,lcm蛤奥,篩數(shù)法啊什么玩意的要會寫。那么選用二分法僚稿,每次分出來一個數(shù)mid,然后算小于等于mid的數(shù)里面蟀伸,丑數(shù)的個數(shù)是不是小于n個蚀同。怎么計算小于等于一個數(shù)的條件下,丑數(shù)的個數(shù)有多少個呢啊掏?我們會發(fā)現(xiàn)所謂丑數(shù)啊蠢络,就是a, b, c各自的倍數(shù)。一個直觀想法是(num / a) + (num / b) + (num / c)迟蜜。但我們會發(fā)現(xiàn)這里面會算重刹孔,因為比方說a和b的公倍數(shù),在第一項里面加了一次娜睛,在第二項里面又加了一次髓霞,所以應(yīng)該刪掉這樣的元素一次,所以是減去(num / lcm(a, b))畦戒,當(dāng)然對b和c方库,a和c同理。那對于a, b, c共同的公倍數(shù)呢障斋?它們會在(num / a) + (num / b) + (num / c)里面加了三次纵潦,然后后面減,又給減了三次垃环,但實際上應(yīng)該對它們計一次數(shù)邀层。所以最后加上lcm(a, b, c)。這里用結(jié)論lcm(a,b,c) = lcm(a,lcm(b,c))遂庄。
代碼:

class Solution {
    public int nthUglyNumber(int n, int a, int b, int c) {
        int low = 1, high = Integer.MAX_VALUE;
        
        while (low + 1 < high) {
            int mid = low + (high - low) / 2;
            
            if (count(a, b, c, mid) < n) {
                low = mid;
            }
            else {
                high = mid;
            }
        }
        
        if (count(a, b, c, low) >= n) {
            return low;
        }
        
        return high;
    }
    
    private long gcd(long a, long b) {
        if (a == 0)
            return b;

        return gcd(b % a, a);
    }

    private long lcm(long a, long b) {
        return (a * b) / gcd(a, b);
    }

    private int count(long a, long b, long c, long num) {
        return (int) ((num / a) + (num / b) + (num / c)
                - (num / lcm(a, b))
                - (num / lcm(b, c))
                - (num / lcm(a, c))
                + (num / lcm(a, lcm(b, c))));
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寥院,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子涛目,更是在濱河造成了極大的恐慌只磷,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泌绣,死亡現(xiàn)場離奇詭異钮追,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)阿迈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門元媚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事刊棕√可梗” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵甥角,是天一觀的道長网严。 經(jīng)常有香客問我,道長嗤无,這世上最難降的妖魔是什么震束? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮当犯,結(jié)果婚禮上垢村,老公的妹妹穿的比我還像新娘。我一直安慰自己嚎卫,他們只是感情好嘉栓,可當(dāng)我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拓诸,像睡著了一般侵佃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上奠支,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天趣钱,我揣著相機(jī)與錄音,去河邊找鬼胚宦。 笑死首有,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的枢劝。 我是一名探鬼主播井联,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼您旁!你這毒婦竟也來了烙常?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鹤盒,失蹤者是張志新(化名)和其女友劉穎蚕脏,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侦锯,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡驼鞭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了尺碰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挣棕。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡译隘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出洛心,到底是詐尸還是另有隱情固耘,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布词身,位于F島的核電站厅目,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏法严。R本人自食惡果不足惜损敷,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望渐夸。 院中可真熱鬧,春花似錦渔欢、人聲如沸墓塌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽苫幢。三九已至,卻和暖如春垫挨,著一層夾襖步出監(jiān)牢的瞬間韩肝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工九榔, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留哀峻,地道東北人。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓哲泊,卻偏偏與公主長得像剩蟀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子切威,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,960評論 2 355

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