牛課堂校招筆試面試算法題——第四課(js實(shí)現(xiàn))

題目一

給定一個(gè)矩陣matrix统求,其中的值有正、有負(fù)据块、有0码邻,返回子矩陣的最大累加和。

例如另假,矩陣matrix為:

-90    48    78  
 64   -40    64  
-81    -7    66

其中像屋,最大累加和的子矩陣為:

  48    78  
 -40    64  
  -7    66

所以返回累加和209。

解題思路:

讀題:

code:
function maxArraySum(arr){
    if (arr == null || arr.length==0){
        return 0;
    }
    var cur = 0,
        max = -1000000;
    for(var i = 0;i<arr.length;i++){
        cur += arr[i];
        max = max>cur?max:cur;
        cur = cur>0?cur:0;
    }
    return max;
}
function maxMatrixSum(arr){
    if (arr == null || arr.length == 0 || arr[0].length == 0){
        return 0;
    }
    var cur = 0,
        max = -1000000;
    var len = arr[0].length;
    var newArr = Array.apply(null, Array(len)).map(function(item, i) {
        return 0;
    });
    for (var i = 0;i<arr.length;i++){
        for (var j = i;j<arr.length;j++){
            for (var k = 0;k<len;k++){
                newArr[k] += arr[j][k];
            }
            max = max>maxArraySum(newArr)?max:maxArraySum(newArr);
        }
        newArr = Array.apply(null, Array(len)).map(function(item, i) {
            return 0;
        });
    }
    return max;
}
maxMatrixSum([[-90,48,78],[64,-40,64],[-81,-7,66]]);

題目二

給定一個(gè)數(shù)組边篮,每個(gè)位置的值代表一個(gè)高度己莺。那么整個(gè)數(shù)組可以看成是一個(gè)直方圖。如果把這個(gè)直方圖當(dāng)作容器的話戈轿,求這個(gè)容器能裝多少水凌受。

例如:

[3,1,2,4]

代表第一個(gè)位置高度為3,第二個(gè)位置高度為1思杯,第三個(gè)位置高度為2胜蛉,第四個(gè)位置高度為4挠进。所以[3,1,2,4]這個(gè)數(shù)組代表的容器可以裝3格的水。

解題思路:

讀題:

code:
function waterProblem (arr){
    if (arr == null || arr.length==0){
        return 0;
    }
    var left = 0,
        right =arr.length-1,
        max = 0,
        i = 0,
        j = arr.length-1;
        
        while ((i-1) != j){
            if (arr[left]<=arr[right]){
                if(arr[left]<arr[i]){
                    left = i;
                    i++;
                }else{
                    max += arr[left]-arr[i];
                    i++;
                }
            }else{
                if(arr[right]<arr[j]){
                    right = j;
                    j--;
                }else{
                    max += arr[right]-arr[j];
                    j--;
                }
            }
        }
        return max;
}
waterProblem ([3,1,2,4]);
//預(yù)處理數(shù)組解法

題目三

給定一個(gè)數(shù)組誊册,長度大于2领突。找出不相交的兩個(gè)數(shù)組,情況是很多的案怯。請返回這么多情況中君旦,兩個(gè)不相交子數(shù)組最大的和。

例如:

[-1,3,4,-9,1,2]

當(dāng)兩個(gè)不相交子數(shù)組為[3,4]和[1,2]時(shí)可以得到最大的和為10嘲碱。

解題思路:

讀題:不相交的兩個(gè)數(shù)組即從原數(shù)組中間任意位置隔開(不取最后一位)分別取左右數(shù)組的子數(shù)組金砍。即求 i (i>=0&&i<array.length-1)在某個(gè)位置上(左數(shù)組最大連續(xù)累加和)與(右數(shù)組最大連續(xù)累加和)之和最大。//i位置上隔開左數(shù)組包括i位置麦锯,右數(shù)組不包括恕稠。

code:
function twoSubArrayMaxSum(arr){
    var cur = 0,
        max = -1000000,
        maxSum = -100000,
        leftArr = [],
        rightArr = [];
    for (var j = arr.length-1;j>=0;j--){
        cur += arr[j];
        max = max>cur?max:cur;
        cur = cur>0?cur:0;
        rightArr[j] = max;
    } 
    max = -1000000;
    cur = 0;
    for (var i = 0;i<arr.length-1;i++){
        cur += arr[i];
        max = max>cur?max:cur;
        cur = cur>0?cur:0;
        maxSum = maxSum>max+rightArr[i+1]?maxSum:max+rightArr[i+1];
    }
    return maxSum;
}
twoSubArrayMaxSum([-1,3,4,-9,1,2]);

題目四

給定一個(gè)長度為N(N>1)的整形數(shù)組arr,可以劃分成左右兩個(gè)部分离咐,左部分為arr[0..K]谱俭,右部分為arr[K+1..N-1]奉件,K可以取值的范圍是[0宵蛀,N-2]。求這么多劃分方案中县貌,左部分中的最大值減去右部分最大值的絕對值中术陶,最大是多少?

例如:

[2,7,3,1,1]

當(dāng)左部為[2,7,3]煤痕,右部為[1,1]時(shí)梧宫,左部分中的最大值減去右部分最大值的絕對值最大為6。最終返回6摆碉。

解題思路:

讀題:左部分中的最大值減去右部分最大值的絕對值最大塘匣,意味著左部分中的最大值減去右部分最大值的值最大或者右部分中的最大值減去左部分最大值的值最大。即可理解為左右數(shù)組最大值之差最大巷帝。
將數(shù)組劃分成左右兩部分忌卤,原數(shù)組array中最大值MAX必定存在并且可以隨意劃分在左數(shù)組或右數(shù)組中且為所在部分?jǐn)?shù)組最大值。結(jié)果必定為(MAX-左數(shù)組最大值)或者(MAX-右數(shù)組最大值)楞泼,此時(shí)就轉(zhuǎn)為求解存在最小的(左數(shù)組最大值)或最小的(右數(shù)組最大值)驰徊,由于MAX可以隨意劃分到左數(shù)組或右數(shù)組,并且左數(shù)組必定包含左邊界array[0]堕阔,右數(shù)組必定包含右邊界array[array.length-1]即(左數(shù)組最大值)>=array[0]棍厂,(右數(shù)組最大值)>=array[array.length-1] 。所以只要求得min(array[0]超陆,array[array.length-1])即可得到答案牺弹。結(jié)果為MAX-min(array[0],array[array.length-1])。(min求兩者較小值例驹,相等時(shí)隨意染韬)。

code:
function maxABSBetweenLeftAndRight(arr){
    var max = -1000000;
    for (var i = 0;i < arr.length;i ++){
        max = max>arr[i]?max:arr[i];
    }
    return max = (max-arr[0]>max-arr[arr.length-1])?max-arr[0]:max-arr[arr.length-1];
}
 maxABSBetweenLeftAndRight([2,7,3,1,1]);
已上解題思路均來自左神噴火龍講解~~ js代碼原創(chuàng)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鹃锈,一起剝皮案震驚了整個(gè)濱河市荤胁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌屎债,老刑警劉巖仅政,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異盆驹,居然都是意外死亡圆丹,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門躯喇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辫封,“玉大人,你說我怎么就攤上這事廉丽【胛ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵正压,是天一觀的道長欣福。 經(jīng)常有香客問我,道長焦履,這世上最難降的妖魔是什么拓劝? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮嘉裤,結(jié)果婚禮上郑临,老公的妹妹穿的比我還像新娘。我一直安慰自己屑宠,他們只是感情好厢洞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著侨把,像睡著了一般犀变。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上秋柄,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天获枝,我揣著相機(jī)與錄音,去河邊找鬼骇笔。 笑死省店,一個(gè)胖子當(dāng)著我的面吹牛嚣崭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播懦傍,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼雹舀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了粗俱?” 一聲冷哼從身側(cè)響起说榆,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎寸认,沒想到半個(gè)月后签财,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡偏塞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年唱蒸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灸叼。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡神汹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出古今,到底是詐尸還是另有隱情屁魏,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布沧卢,位于F島的核電站蚁堤,受9級(jí)特大地震影響醉者,放射性物質(zhì)發(fā)生泄漏但狭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一撬即、第九天 我趴在偏房一處隱蔽的房頂上張望立磁。 院中可真熱鬧,春花似錦剥槐、人聲如沸唱歧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽颅崩。三九已至,卻和暖如春蕊苗,著一層夾襖步出監(jiān)牢的瞬間沿后,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國打工朽砰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尖滚,地道東北人喉刘。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像漆弄,于是被迫代替她去往敵國和親睦裳。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

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

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)撼唾。 張土汪:刷leetcod...
    土汪閱讀 12,744評(píng)論 0 33
  • 從來沒有發(fā)現(xiàn)陪在你的身邊是那么少廉邑,那么短…… 從來沒有想過你的離開是那么不經(jīng)意,曾經(jīng)幻想過得無數(shù)次的場景倒谷,還是發(fā)生...
    南山最相思閱讀 335評(píng)論 0 0
  • I was dropped in a sudden panic. I was lack the strength ...
    GoldenRainbows閱讀 123評(píng)論 0 0
  • 回頭看鬓催,最值得回憶的日子不是開心快樂的日子,而是辛苦奮斗的日子恨锚! 最值得珍惜的也是一起奮斗的人宇驾。 回頭看,值得嘆息...
    生活毛渣渣閱讀 594評(píng)論 0 4
  • 內(nèi)容:試著做不同的同的事猴伶,而非更難的事 想法:史蒂夫記憶數(shù)字在遇到瓶頸后课舍,沒有加大強(qiáng)度的練習(xí),而是對自己的記憶模式...
    周衍杰閱讀 189評(píng)論 0 0