麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 網站 > WEB開發 > 正文

LeetCode解題筆記(1)

2024-04-27 15:13:12
字體:
來源:轉載
供稿:網友
前天開始知道有LeetCode的存在,抱著試一試的心態,嘗試著做了幾道題,幾乎都是暴力求解,也看到自己在這方面的欠缺。下面是做題的一些體會。1.Two SumGiven an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may not use the same element twice.大意:給定一個整數數組,找出其中兩個數滿足相加等于你指定的目標數字。你可以假設每一個輸入肯定只有一個結果。

將我的暴力求解貼出來:

/** * @param {number[]} nums * @param {number} target * @return {number[]} */var twoSum = function(nums, target) {    for(var i = 0;i < nums.length;i++){        for(var j = i+1;j < nums.length;j++ ){            if((nums[i]+nums[j]) === target){                return [i,j];            }        }    }};時間復雜度O(n^2)想了一下改進方法:可以先將數組內的元素排好序,設置一個low指針,一個high指針,分別指向頭、尾元素。將兩指針指向的元素相加,若大于target,high指針向前移;若小于target,low指針向后移。(還沒實踐,不知正確否)

13.Roman To Integer

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999

大意:將給定的羅馬數字轉換成整數,范圍是1-3999

雖然特意挑的難度為easy的題目,但是不知道羅馬數字規則的我,一下子有些蒙,故百度之。

羅馬數字符號對應的數值如下:

I

1

V

5

X

10

L

50

C

100

D

500

M

1000

計數規則:相同的數字連寫,所表示的數等于這些數字相加得到的數,例如:III = 3小的數字在大的數字右邊,所表示的數等于這些數字相加得到的數,例如:VIII = 8小的數字,限于(I、X和C)在大的數字左邊,所表示的數等于大數減去小數所得的數,例如:IV = 4正常使用時,連續的數字重復不得超過三次在一個數的上面畫橫線,表示這個數擴大1000倍(本題只考慮3999以內的數,所以用不到這條規則)其次,羅馬數字轉阿拉伯數字規則(僅限于3999以內):從前向后遍歷羅馬數字,如果某個數比前一個數小,則加上該數。反之,減去前一個數的兩倍然后加上該數加粗即為解題關鍵了~ 
/** * @param {string} s * @return {number} */var romanToInt = function(s) {    var array = s.split("");    for(var i = 0;i < array.length;i++){        switch(array[i]){            case "I" :                array[i] = 1;                break;            case "V" :                array[i] = 5;                break;            case "X" :                array[i] = 10;                break;            case "L" :                array[i] = 50;                break;            case "C" :                array[i] = 100;                break;            case "D" :                array[i] = 500;                break;            case "M" :                array[i] = 1000;                break;        }    }        var total = array[0];    for(var j = 1;j < array.length;j++){       if(array[j] <= array[j-1]){           total += array[j];       }       else{           total = total - 2 * array[j-1] + array[j];       }    }        return total;};7.Reverse Integer

Reverse digits of an integer.

Example1: x = 123, return 321Example2: x = -123, return -321

Note:The input is assumed to be a 32-bit signed integer. Your function shouldreturn 0 when the reversed integer overflows.

這題的溢出條件當時給我折磨壞了!一個是32位,一個是當reverse完之后的數溢出返回0!因為這兩點沒注意到,wrong answer 和 running  error好幾次。。

先說下我的思路吧:因為我知道數組有一個array.reverse()方法,很方便。所以先用一個變量存正負狀態,然后將傳進來的數字轉換為字符串在轉化為數組再reverse再變成字符串再返回數字(我腦子可能有問題用了這么麻煩的辦法。。)代碼如下:

/** * @param {number} x * @return {number} */var reverse = function(x) {    var flag = 0;    if(x<=0){        flag = 0;        x = -x;    }else {        flag = 1;    }    var tem = x.toString().split("").reverse().join("");    var a = parseInt(tem);        var max = 0x7fffffff;        var min = 0x80000000;      if(a > max || a < -min) {           return 0;    }else{        if(flag){            return a;        }else{            return -a;        }     }};后來百度到一些大牛的方法,簡直秒殺我

 while(x > 0){ rev = x %10 +rev *10;  x = x/10;}

461.Hamming Distance

Example:

Input: x = 1, y = 4Output: 2Explanation:1   (0 0 0 1)4   (0 1 0 0)       ↑   ↑The above arrows point to positions where the corresponding bits are different. 直接放例子了 比較易懂

做這道題的一個困難的地方是 js 沒有直接十進制轉換為二進制的方法?

查到ArrayBuffer和TypedArray(這是真的不知道了。。)還有就是toString(2)轉換成二進制的字符串

我的思路:將傳進來的兩個數字轉換成二進制后split成數組,再將兩數組位數湊成一樣。(將長度短的數組前面補0,我怎么這么喜歡數組2333)

遍歷數組,有不同即flag++(就是按位異或,真的不知道js中的按位異或怎么實現?)

/** * @param {number} x * @param {number} y * @return {number} */var hammingDistance = function(x, y) {    x = x.toString(2).split("");    y = y.toString(2).split("");    if(x.length < y.length){        newarray(x,y);    }    else if(x.length > y.length){        newarray(y,x);    }        function newarray (a,b){        var arr = new Array(b.length - a.length);        for(var i = 0;i < arr.length;i++){            arr[i] = "0";        }        a = arr.concat(a);         return a,b;    }        var flag = 0;    for(var n = x.length,m = y.length;n > 0 , m > 0 ;n--,m--){        if(x[n] != y[m]){            ++flag;        }    }        return flag;};

這題肯定有更簡單的法子的!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 中国洗澡偷拍在线播放 | 国产成人精品区一区二区不卡 | av免费在线播放网址 | 欧美成人精品一区二区三区 | 小视频在线看 | 欧美黄色大片免费观看 | 久久久鲁| 免费午夜视频 | 欧美一级美国一级 | 欧美人成在线视频 | 成人毛片网站 | 日本高清黄色片 | 亚洲人成综合第一网 | 亚洲福利视频52 | 久久夜夜视频 | 色999久久久精品人人澡69 | 午夜视频福利 | 国产成年人视频 | 中午字幕无线码一区2020 | 久色成人网 | 97青青草视频 | 538任你躁在线精品视频网站 | 免费观看三级毛片 | 2019中文字幕在线播放 | 久久99精品久久久久久国产越南 | 日韩欧美综合在线 | 午夜视频在线免费观看 | 狠狠干五月 | 久久久三区 | 久草热久草视频 | 双性精h调教灌尿打屁股的文案 | 国产精品美女一区二区 | 性欧美极品xxxx欧美一区二区 | 国产精品视频海角社区88 | 国产精品久久久久久久午夜片 | 午夜视频久久久 | 毛片118极品美女写真 | 5xsq在线视频| 黄视频在线网站 | 羞羞电影网 | 欧美人的天堂一区二区三区 |