国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

leetcode 一些算法題目記錄

mayaohua / 3494人閱讀

摘要:題目全部用做的,基本上每天一題的節(jié)奏。題目這里記錄自己對(duì)一些題目的思路和想法數(shù)字回文,說不能用額外的空間一下子懵逼了,第一概念就是換成字符串比較,但是感覺這樣子做就沒有意義了。找出任意兩條線段與軸組成的木桶,可以盛水最大的值。

前言

原文地址

無意間發(fā)現(xiàn) LeetCode 這個(gè)網(wǎng)站,一下子就陷進(jìn)去了,大學(xué)時(shí)候看舍友參加 acm 一天到晚刷題,對(duì)算法總有點(diǎn)特殊的情懷。本以為我永遠(yuǎn)是接觸不到這個(gè)了,沒想到 leetcode 卻讓我感覺到 Accepted 這個(gè)單詞的特殊魅力。

個(gè)人

首先自己并不是為了找工作去刷題的,純粹享受做題的過程和ac的快感。題目全部用 JavaScript 做的,基本上每天一題的節(jié)奏。開始總是想著怎么把答案解出來就好,經(jīng)常 TLE ,感覺一路做下來自己慢慢會(huì)考慮復(fù)雜度,邏輯嚴(yán)謹(jǐn)性也在逐步加強(qiáng),對(duì)特殊值的考慮越來越多,相比于算法能力的提升我更欣喜看到自己邏輯嚴(yán)謹(jǐn)性加強(qiáng),感覺這對(duì)自己后面的道路幫助會(huì)很大。

題目

這里記錄自己對(duì)一些題目的思路和想法

Palindrome Number

`

1         =>   true;
21         =>   false;
303        =>   true;

`

數(shù)字回文,說不能用額外的空間一下子懵逼了,第一概念就是換成字符串比較,但是感覺這樣子做就沒有意義了。看了別人思路發(fā)現(xiàn)給的數(shù)字每次取 10 的余數(shù)拼起來正好是數(shù)字倒過來寫。如果只取出一半,原數(shù)字也舍棄一半 正好就是回文的兩個(gè)內(nèi)容。有了思路就好做了判斷下特殊條件,比較最后兩個(gè)數(shù)字就可以了,如果是奇數(shù)位數(shù)字就減掉中間一位再比較。

    var max = Math.pow(2,31) - 1
    var isPalindrome = function(x) {
        if (x < 0 || x > max || (x != 0 && x % 10 == 0)) return false
        if (x < 10) return true
        var num = 0
        while(x > num) {
            num = num * 10 + x % 10
            x = Math.floor(x / 10)
        }
        return num == x || (x != 0 && Math.floor(num / 10) == x)
    };
    
Container With Most Water

`

給定一個(gè)數(shù)組,想象成一個(gè)二位坐標(biāo)系,數(shù)組中每一個(gè)元素 a[i] => n 就是坐標(biāo)系上的一條線段[ (i,0) => (i,x) ]。找出任意兩條線段與 x 軸組成的木桶,可以盛水最大的值。

`

看到題目想了一下就想著兩層循環(huán)去計(jì)算,果然就超時(shí)了,看了看別人的思路,開始就算出0到最后一個(gè)線段組成的木桶的面積,然后找出線段比較短的一條向中間靠攏,如果下一條線段比當(dāng)前線段還短就忽略,反之就繼續(xù)循環(huán)計(jì)算。想了想這樣做也是合理的如果下一條線段比當(dāng)前的還短那組成的面積肯定比較小。有了思路就好做了

    var maxArea = function(height) {
        let i = 0, l = height.length -1, res = 0
            
        while(i < l) {
            var h = Math.min(height[i],height[l])
            res = Math.max(res, (l-i) * h)
            if(height[i] < height[l]) {
                while(height[i] <= h && i < l){i++}
            } else {
                while(h >= height[l] && i < l){l--}
            }
        }
        return res
    }
    
Regular Expression Matching

`

實(shí)現(xiàn)正則,
"." Matches any single character.
"*" Matches zero or more of the preceding element.
isMatch("aa","a") → false 
isMatch("ab", ".*") → true     
isMatch("aab", "c*a*b") → true

`
剛開始看到這題目還是比較懵的,感覺要判斷的好多,后面從遞歸判斷做就有思路了,從正則表達(dá)式入手,先判斷第二位是不是 * ,如果不是就判斷第一位然后截取一位遞歸,如果是就先去除正則前兩位遞歸,不行再判斷第一個(gè)是不是相等然后循環(huán)遞歸

    var isMatch = function(s, p) {
        if(p[0] === undefined) return s[0] === undefined
        if (p[1] != "*") {
           if (s[0] === p[0] || (p[0] === "." && s[0] !== undefined)) 
               return isMatch(s.substr(1), p.substr(1))
           else 
               return false
        } else {
            if (isMatch(s, p.substr(2)))return true
            let index = 0
            while(index <= s.length && (s[index] === p[0] || p[0] === ".")){
                if(isMatch(s.substr(++index), p.substr(2))) return true
            }
            return false
        }
    }
    
Is Circular

看到一個(gè)面試題,JSON.stringify 是 javascript 的一個(gè)方法返回一個(gè)json格式的字符串,效果如下

    const obj = {a:1, b:2}
    JSON.stringify(obj) // => "{"a":1,"b":2}"
   

當(dāng)要轉(zhuǎn)化的對(duì)象有“環(huán)”存在時(shí)(子節(jié)點(diǎn)屬性賦值了父節(jié)點(diǎn)的引用),為了避免死循環(huán),JSON.stringify 會(huì)拋出異常,例如:

    var a = [1]
    a.push(a)
    JSON.stringify(a) // => Uncaught TypeError: Converting circular structure to JSON

寫一個(gè)函數(shù)判斷參數(shù)是否包含 環(huán),自己想到的是用 map 對(duì)象把是對(duì)象的值做為鍵存儲(chǔ)值,然后判斷值是否存在來判斷是否回環(huán), 要注意每一次要用一個(gè)新的 map 對(duì)象,避免同級(jí)別相互引用判斷錯(cuò)誤的情況

    let isCircular = (o) => {
        var flag = false
        const func = (obj, map = new Map()) => {
            map.set(obj, true)
            Object.values(obj).forEach(d=> {
                if (flag) return
                if (typeof d == "object") {
                    if (map.get(d)) {
                        flag = true
                        return
                    } else {
                        let newmap = new Map(map)
                        func(d, newmap)
                    }
                }
            })
        }
        func(o)
        return flag
    }
Submission Details
給一個(gè)數(shù)字,寫一個(gè)函數(shù)根據(jù)數(shù)字生成所有形式良好的括號(hào)組合
2 => ["()()", "(())"]
3 => 
    [
      "((()))",
      "(()())",
      "(())()",
      "()(())",
      "()()()"
    ]

想了一下有一個(gè)思路,就是根據(jù) () 里面的包含幾個(gè)子 () 來得出所有情況。 比如給出的數(shù)字是5, 那么循環(huán)到5,第n 就有 ( [func(n)的結(jié)果] ) * func(4-n)的結(jié)果

一直想著以一個(gè)優(yōu)雅的方式處理邊界的問題,但是想半天都沒結(jié)果,只能寫的丑陋點(diǎn)了。

    var generateParenthesis = function(n) {
        if(n == 0) return []
        if(n == 1) return ["()"]
        let arr = []
        for(let i = 0; i < n; i++) {
            if( i == 0) {
                arr = arr.concat(generateParenthesis([n-1]).map(d => "()" + d ))
            } else if (i == n-1){
                arr = arr.concat(generateParenthesis([n-1]).map(d => "(" + d + ")"))
            } else {
                generateParenthesis(i).forEach(d => {
                    let eachres = "(" + d +")"
                    generateParenthesis(n- i -1).forEach(c => {
                        arr.push(eachres + c)
                    })
                })
            }
        }
        return arr
    };

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/85109.html

相關(guān)文章

  • LeetCode 攻略 - 2019 年 8 月上半月匯總(109 題攻略)

    摘要:每天會(huì)折騰一道及以上題目,并將其解題思路記錄成文章,發(fā)布到和微信公眾號(hào)上。三匯總返回目錄在月日月日這半個(gè)月中,做了匯總了數(shù)組知識(shí)點(diǎn)。或者拉到本文最下面,添加的微信等會(huì)根據(jù)題解以及留言內(nèi)容,進(jìn)行補(bǔ)充,并添加上提供題解的小伙伴的昵稱和地址。 LeetCode 匯總 - 2019/08/15 Create by jsliang on 2019-08-12 19:39:34 Recently...

    tracy 評(píng)論0 收藏0
  • LeetCode 攻略 - 2019 年 7 月上半月匯總(55 題攻略)

    摘要:微信公眾號(hào)記錄截圖記錄截圖目前關(guān)于這塊算法與數(shù)據(jù)結(jié)構(gòu)的安排前。已攻略返回目錄目前已攻略篇文章。會(huì)根據(jù)題解以及留言內(nèi)容,進(jìn)行補(bǔ)充,并添加上提供題解的小伙伴的昵稱和地址。本許可協(xié)議授權(quán)之外的使用權(quán)限可以從處獲得。 Create by jsliang on 2019-07-15 11:54:45 Recently revised in 2019-07-15 15:25:25 一 目錄 不...

    warmcheng 評(píng)論0 收藏0
  • LeetCode 攻略 - 2019 年 7 月下半月匯總(100 題攻略)

    摘要:月下半旬攻略道題,目前已攻略題。目前簡(jiǎn)單難度攻略已經(jīng)到題,所以后面會(huì)調(diào)整自己,在刷算法與數(shù)據(jù)結(jié)構(gòu)的同時(shí),攻略中等難度的題目。 Create by jsliang on 2019-07-30 16:15:37 Recently revised in 2019-07-30 17:04:20 7 月下半旬攻略 45 道題,目前已攻略 100 題。 一 目錄 不折騰的前端,和咸魚有什么區(qū)別...

    tain335 評(píng)論0 收藏0
  • Python 后端開發(fā)面試記錄

    摘要:辛苦面試了好多家大小公司,在面試中也發(fā)現(xiàn)了自己的很多不足,也有很多的感悟,這里記錄一下,為的是之后的學(xué)習(xí)與提高更有針對(duì)性。面試中的的題目就是準(zhǔn)備不足的充分表現(xiàn)。其實(shí)大部分面試官都不會(huì)給什么反饋,只是機(jī)械地聽答案,記錄評(píng)價(jià)。 辛苦面試了好多家大小公司,在面試中也發(fā)現(xiàn)了自己的很多不足,也有很多的感悟,這里記錄一下,為的是之后的學(xué)習(xí)與提高更有針對(duì)性。 關(guān)于刷題 LeetCode 要刷,面試...

    PascalXie 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<