2019-10-13 刷題總結(jié) sort2

  1. Intersection of Two Arrays
    求兩個array的intersection,恰好昨天剛想了想這個問題肝集,一個方法是A的每個元素和B的每個元素做對比野舶,這種情況下復(fù)雜度為O(n^2), 并且還要考慮到重復(fù)元素的問題峦耘,用HashSet來解決可能有重復(fù)的問題砌们。
    另一種方法是先將兩個array排序,在用兩個pointer挪動來獲得intersection催烘,時間復(fù)雜度是O(n lg n)沥阱。但這種情況下一定要注意重復(fù)的問題。
class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        Arrays.sort(nums1);
        Arrays.sort(nums2);
        int i = 0, j = 0;
        List<Integer> list = new ArrayList<>();
        while (i < nums1.length && j < nums2.length) {
            if (nums1[i] == nums2[j]) {
                list.add(nums1[i]);
                while (i < nums1.length - 1 && nums1[i] == nums1[i+1]) {
                    i++;
                }
                while (j < nums2.length - 1 && nums2[j] == nums2[j+1]) {
                    j++;
                }
                i++;
                j++;
            } else if (nums1[i] < nums2[j]) {
                i++;
            } else {
                j++;
            }
        }
        int[] res = new int[list.size()];
        int k = 0;
        for (int e: list) {
            res[k] = e;
            k++;
        }
        return res;
    }
}
  1. Largest Number
    需要比較ab大還是ba大伊群,就把這兩個concat起來再比較考杉。
    答案中比較好的方法是把他們作為String來進行比較,而不要轉(zhuǎn)化為integer舰始。
    因為原來是個int array崇棠,也必須要轉(zhuǎn)化為integer array才能利用comparator進行比較。
class Solution {
    private class LargerNumberComparator implements Comparator<String> {
        @Override
        public int compare(String a, String b) {
            String order1 = a + b;
            String order2 = b + a;
           return order2.compareTo(order1);
        }
    }

    public String largestNumber(int[] nums) {
        // Get input integers as strings.
        String[] asStrs = new String[nums.length];
        for (int i = 0; i < nums.length; i++) {
            asStrs[i] = String.valueOf(nums[i]);
        }

        // Sort strings according to custom comparator.
        Arrays.sort(asStrs, new LargerNumberComparator());

        // If, after being sorted, the largest number is `0`, the entire number
        // is zero.
        if (asStrs[0].equals("0")) {
            return "0";
        }

        // Build largest number from sorted array.
        String largestNumberStr = new String();
        for (String numAsStr : asStrs) {
            largestNumberStr += numAsStr;
        }

        return largestNumberStr;
    }
}
  1. Valid Anagram
    判斷s是否是t的permutation丸卷。
    先檢查兩者的長度是否相同枕稀。
    因為只包含lower case,可以用一個array來記錄每個character出現(xiàn)的次數(shù)谜嫉。
    traverse s的時候增加萎坷,traverse t的時候減少。當(dāng)其中有個數(shù)量小于0沐兰,返回false哆档。
class Solution {
    public boolean isAnagram(String s, String t) {
        if (s.length() != t.length()) {
            return false;
        }
        int[] chars = new int[26];
        for (char c: s.toCharArray()) {
            int index = c - 'a';
            chars[index] += 1;
        }
        for (char c: t.toCharArray()) {
            int index = c - 'a';
            chars[index] -= 1;
            if (chars[index] < 0) {
                return false;
            }
        }
        return true;
    }
}
  1. Maximum Gap
    bucket sort
    t = (max - min)/(n-1)
    t 是所有元素的平均距離,至少有兩個元素的距離比t要大住闯,因此我們要找的maximum gap肯定不會存在于同一個bucket中的兩個元素瓜浸,而是相鄰的兩個bucket。
class Solution {
    public int maximumGap(int[] nums) {
        if (nums.length < 2) {
            return 0;
        }
        int minNum = Integer.MAX_VALUE, maxNum = Integer.MIN_VALUE;
        for (int num: nums) {
            minNum = Math.min(minNum, num);
            maxNum = Math.max(maxNum, num);
        }
        // consider about the case all are the same
        int bucketSize = Math.max(1, (maxNum - minNum) / (nums.length - 1));
        // need to +1 to store the maximum element
        int numOfBucket = (maxNum - minNum)/bucketSize + 1;
        // store the maximum element of the bucket
        int[] max = new int[numOfBucket];
        int[] min = new int[numOfBucket];
        Arrays.fill(max, Integer.MIN_VALUE);
        Arrays.fill(min, Integer.MAX_VALUE);
        for (int num: nums) {
            int i = (num - minNum) / bucketSize;
            max[i] = Math.max(max[i], num);
            min[i] = Math.min(min[i], num);
        }
        int pre = max[0];
        int maxGap = 0;
        for (int j = 1; j < numOfBucket; j++) {
            if (pre == Integer.MIN_VALUE) {
                pre = max[j];
            } else {
                if (min[j] == Integer.MAX_VALUE) {
                    continue;
                } else {
                    maxGap = Math.max(maxGap, min[j] - pre);
                    pre = max[j];
                }
            }
        }
        return maxGap;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寞秃,一起剝皮案震驚了整個濱河市斟叼,隨后出現(xiàn)的幾起案子偶惠,更是在濱河造成了極大的恐慌春寿,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忽孽,死亡現(xiàn)場離奇詭異绑改,居然都是意外死亡谢床,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門厘线,熙熙樓的掌柜王于貴愁眉苦臉地迎上來识腿,“玉大人,你說我怎么就攤上這事造壮《伤希” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵耳璧,是天一觀的道長成箫。 經(jīng)常有香客問我,道長旨枯,這世上最難降的妖魔是什么蹬昌? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮攀隔,結(jié)果婚禮上皂贩,老公的妹妹穿的比我還像新娘。我一直安慰自己昆汹,他們只是感情好明刷,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著满粗,像睡著了一般遮精。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上败潦,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天本冲,我揣著相機與錄音,去河邊找鬼劫扒。 笑死檬洞,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的沟饥。 我是一名探鬼主播添怔,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼贤旷!你這毒婦竟也來了广料?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤幼驶,失蹤者是張志新(化名)和其女友劉穎艾杏,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盅藻,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡购桑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年畅铭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勃蜘。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡硕噩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缭贡,到底是詐尸還是另有隱情炉擅,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布阳惹,位于F島的核電站坑资,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏穆端。R本人自食惡果不足惜袱贮,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望体啰。 院中可真熱鬧攒巍,春花似錦、人聲如沸荒勇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沽翔。三九已至兢孝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間仅偎,已是汗流浹背跨蟹。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留橘沥,地道東北人窗轩。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像座咆,于是被迫代替她去往敵國和親痢艺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

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