164. 最大間距

題目

輸入一個整數數組职抡,實現一個函數來調整該數組中數字的順序葬燎,使得所有的奇數位于數組的前半部分,所有的偶數位于數組的后半部分缚甩,并保證奇數和奇數谱净,偶數和偶數之間的相對位置不變。請嘗試在線性時間復雜度和空間復雜度的條件下解決此問題擅威。

程序核心思想

題目中說要在線性時間復雜度和空間復雜度下完成這個題目壕探。可以考慮用桶排序來做郊丛。
如果給定len個數李请,那么準備len+1個桶。最小的數進0號桶厉熟,最大的數進最后一個桶导盅,然后每個數進相應的桶(每個桶代表一定的范圍,代碼見下方)揍瑟。對于每個桶記錄3個值:最小值白翻、最大值、是否有值绢片。這樣滤馍,i號桶的最小值跟i-1號桶的最大值便是挨著的了。所以最大間距不可能會出現在桶的內部底循,因為必定存在一個空桶巢株,所以求出相鄰的非空桶之間的差值,最大的即為最大間距熙涤。

Tips

難點是如何確定一個數該進哪個桶阁苞?代碼為return (int) ((num - min) * len / (max - min));
但是還是發(fā)現有錯誤,結果是因為一個數據類型的原因祠挫,把numd的數據類型從int改為long即可猬错。

代碼

class Solution {
    public int maximumGap(int[] nums) {
                
        int len = nums.length;
        if(len < 2)     return 0;
        int min = nums[0];
        int max = nums[0];
        for(int i = 0; i < len; i++){
            if(nums[i] < min)   min = nums[i];
            if(nums[i] > max)   max = nums[i];
        }
        if(min == max)  return 0;
        
        int[] BuckMin = new int[len + 1];
        int[] BuckMax = new int[len + 1];
        boolean[] BuckBool = new boolean[len + 1];
        
        
        for (int i = 0; i < len; i++) {
            int loc = bucket(nums[i], len, min, max);
             if(BuckBool[loc] == true){
                if(BuckMax[loc] < nums[i])  BuckMax[loc] = nums[i];
                if(BuckMin[loc] > nums[i])  BuckMin[loc] = nums[i];
            }else{
                BuckBool[loc] = true;
                BuckMin[loc] = nums[i];
                BuckMax[loc] = nums[i];
            }
        }
                
        int answer = 0;
        int cur = BuckBool.length - 1;
        while(cur > 0){
            for(int i = cur - 1; i >= 0; i--){
                if(BuckBool[i] == true){
                    int temp = BuckMin[cur] - BuckMax[i];
                    if(temp > answer)   answer = temp;
                    cur = i;
                    break;  
                }else{
                    continue;
                }
            }
        }
        
        return answer;
    }
    
    public static int bucket(long num, int len, int min, int max) {
        return (int) ((num - min) * len / (max - min));
    }
}
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市茸歧,隨后出現的幾起案子倦炒,更是在濱河造成了極大的恐慌,老刑警劉巖软瞎,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逢唤,死亡現場離奇詭異拉讯,居然都是意外死亡,警方通過查閱死者的電腦和手機鳖藕,發(fā)現死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門魔慷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人著恩,你說我怎么就攤上這事院尔。” “怎么了喉誊?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵邀摆,是天一觀的道長。 經常有香客問我伍茄,道長栋盹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任敷矫,我火速辦了婚禮例获,結果婚禮上,老公的妹妹穿的比我還像新娘曹仗。我一直安慰自己榨汤,他們只是感情好,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布怎茫。 她就那樣靜靜地躺著件余,像睡著了一般。 火紅的嫁衣襯著肌膚如雪遭居。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天旬渠,我揣著相機與錄音俱萍,去河邊找鬼。 笑死告丢,一個胖子當著我的面吹牛枪蘑,可吹牛的內容都是我干的。 我是一名探鬼主播岖免,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼岳颇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了颅湘?” 一聲冷哼從身側響起话侧,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎闯参,沒想到半個月后瞻鹏,有當地人在樹林里發(fā)現了一具尸體悲立,經...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年新博,在試婚紗的時候發(fā)現自己被綠了薪夕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡赫悄,死狀恐怖原献,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情埂淮,我是刑警寧澤姑隅,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站同诫,受9級特大地震影響粤策,放射性物質發(fā)生泄漏。R本人自食惡果不足惜误窖,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一叮盘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧霹俺,春花似錦柔吼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至想际,卻和暖如春培漏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背胡本。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工牌柄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人侧甫。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓珊佣,卻偏偏與公主長得像,于是被迫代替她去往敵國和親披粟。 傳聞我的和親對象是個殘疾皇子咒锻,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內容

  • 在我的博客冒泡排序、插入排序守屉、快速排序惑艇、堆排序、歸并排序總結中介紹了幾種經典的排序方法拇泛,其中快速排序敦捧、堆排序和歸并...
    小怪獸大作戰(zhàn)閱讀 2,099評論 1 6
  • 給定一個無序的數組须板,找出數組在排序之后,相鄰元素之間最大的差值兢卵。 如果數組元素個數小于 2习瑰,則返回 0。 說明: ...
    薄荷糖的味道_fb40閱讀 117評論 0 0
  • 1. 找出數組中重復的數字 題目:在一個長度為n的數組里的所有數字都在0到n-1的范圍內秽荤。數組中某些數字是重復的甜奄,...
    BookThief閱讀 1,748評論 0 2
  • https://leetcode.windliang.cc/ 第一時間發(fā)布 題目描述(困難難度) 已知兩個有序數組...
    windliang閱讀 272評論 0 0
  • 夢夕城是座沿海的小城。 茶肆中的說書人窃款,今日講的是海上的一段邂逅课兄。 在夢夕海邊,每日都會有玉蘭花瓣隨水漂來晨继,被海浪...
    花梨er閱讀 367評論 8 4