鍍金池/ 問答/HTML/ 找出數(shù)組中最大遞增子數(shù)組,找出二叉樹節(jié)點的最長距離,JS怎么寫

找出數(shù)組中最大遞增子數(shù)組,找出二叉樹節(jié)點的最長距離,JS怎么寫

今天面試遇到的兩個問題,用JS寫出:
1、找出二叉樹節(jié)點的最長距離
2、找出數(shù)組中的最長遞增序列

想了半天是在沒想出來,求大佬們賜教(代碼來點注釋可好,算法渣很無力呀。。。)

回答
編輯回答
逗婦乳

其實細(xì)想一下題目并不復(fù)雜,二叉樹計算一下每個節(jié)點左邊最大深度和右邊最大深度之和,最后選擇最大的就可以。
數(shù)組題計算每個節(jié)點之前最長遞增序列,再加上本節(jié)點,就是包括當(dāng)前節(jié)點之前的最長子序列,記住長度和前一個節(jié)點的下標(biāo),從第一個節(jié)點開始遍歷到最后一個,選擇計算出的所有的節(jié)點最大長度,就是最長的了。
方法比代碼重要

2017年7月9日 09:32
編輯回答
冷眸

希望你去看一下動態(tài)規(guī)劃算法...

2017年1月23日 04:15
編輯回答
只愛你

我寫過最長遞增子序列,僅作參考,二叉樹問題應(yīng)該類似,都是動態(tài)規(guī)劃問題,可以看看左程云的《程序員代碼面試指南》

// 給定數(shù)組arr,返回arr的最長遞增子序列的長度,比如arr=[2,1,5,3,6,4,8,9,7],最長遞增子序列為[1,3,4,8,9]返回其長度為5.
// dp[i]表示以必須arr[i]這個數(shù)結(jié)束的情況下產(chǎn)生的最大遞增子序列的長度。對于第一個數(shù)來說,很明顯dp[0]為1,當(dāng)我們計算dp[i]的時候,
// 我們?nèi)タ疾靑位置之前的所有位置,找到i位置之前所有比arr[i]小的位置中最大的那個值,記為dp[j](0=<j<i),
// dp[j]代表以arr[j]結(jié)尾的最長遞增序列,而dp[j]又是之前計算過的最大的那個值,
// 則dp[i]=dp[j]+1.計算完dp之后,我們找出dp中的最大值,即為這個串的最長遞增序列
let arr=[2,1,5,3,6,4,8,9,7];
function search(arr) {
    let temp=[1];
    for(let i=1;i<arr.length;i++){
        let temp_arr=arr.slice(0,i);
        let flag=[];
        for(let j=0;j<temp_arr.length;j++){
            if(arr[j]<arr[i]){
                flag.push(temp[j])
            }
        }
        if(flag.length===0){
            temp.push(1)
        }else{
            temp.push(Math.max(...flag)+1)
        }
    }
    return Math.max(...temp)
}
2017年9月1日 12:43
編輯回答
澐染
2017年2月26日 12:27
編輯回答
野橘

這2題目稍微百度一下都有,而且?guī)ё⑨尅?/p>

2017年6月16日 03:34
編輯回答
帥到炸

這樣的問題還需要問……?搜索一下鋪天蓋地!

http://www.cnblogs.com/miloyi...
http://www.cnblogs.com/whyand...

2018年8月2日 02:35