前言:不少人說,作算法題沒用,實際又用不到。我作算法題前沒有女友,作了以後女友已經在我旁邊打呼嚕了,如今知道該幹啥了吧。嘿嘿。加油吧!!!你看看我長這樣都能找到女友,大家還等啥呢!算法
思路:先設一個map用來存儲,而後開始遍歷數組nums,把元素當作key,索引index當作value,存進map裏。當遍歷到map裏存在(target - 元素)這個key的這種狀況時,把這個key所對應的value以及當前元素對應的索引值一塊兒return數組
var twoSum = function(nums, target) {
// 設置一個map用來存儲
const map = new Map()
for(let i = 0; i < nums.length ; i++) {
// 計算target與當前元素的差值
const chazhi = target - nums[i]
if (map.has(chazhi)) {
// 若是map裏存在差值爲key的狀況,直接返回
return [map.get(chazhi), i]
} else {
// 若是不存在則繼續存儲進map裏
map.set(nums[i], i)
}
}
};
複製代碼
思路:先把正負抽離出來,把該數字取絕對值,而後去進行不斷地對10取餘並拼在前方,最後再把正負納入返回值的判斷中(注意區間)markdown
var reverse = function(x) {
// 判斷該數字正數或者是負數
const flag = x < 0 ? -1 : 1
// old:對該數字取絕對值,方便後面以正數來計算
let old = Math.abs(x)
// new:用來存儲新數字
let now = 0
while (old > 0) {
// old每次都對10取餘,而且now乘10與之相加
now = now * 10 + old % 10
// 而後old除以10並取floor,準備下一次運算
old = Math.floor(old / 10)
}
// 正負運算
now = flag * now
// 判斷是否超出區間
return now < Math.pow(-2, 31) || now > Math.pow(2, 31) - 1 ? 0 : now
};
複製代碼
思路:雙指針法,設置start與end指針,向中間靠攏,對應的元素不等就返回false,全都相等就返回trueapp
var isPalindrome = function(x) {
// 先把數字轉爲字符串,便於遍歷
let numStr = x.toString()
// 首位指針設置
let start = 0, end = numStr.length - 1
while(start < end) {
// 一檢測到首位不相同就返回false
if (numStr[start] !== numStr[end]) return false
// 不然雙指針向中間靠攏
start++
end--
}
// 都相同那就返回true嘍
return true
};
複製代碼
思路:ui
var longestCommonPrefix = function (strs) {
// 若是strs長度爲0則直接返回空字符串
if (!strs.length) return ''
// longPrefix:用來存儲最長前綴
let longPrefix = ''
let i = 0
// 以第一個單詞爲基準進行遍歷
while (strs[0][i]) {
// 單詞的每個字母
let first = strs[0][i]
if (strs.some(item => item[i] !== first)) {
// 遍歷strs,只要有一個單詞的第i個字母跟第一個單詞的第i哥字母不同就返回當前longPrefix
return longPrefix
} else {
// 不然,longPrefix繼續拼接
longPrefix += first
}
i++
}
return longPrefix
};
複製代碼
思路:map存儲左括號爲key,右括號爲value,遍歷字符串,左括號狀況則把左括號對應的value壓進數組,右括號狀況則判斷彈出數組的前元素是否跟自身同樣,不同的話直接返回falseurl
var isValid = function(s) {
// 若是s長度是奇數,不可能閉合,直接返回false
if (s.length % 2 !== 0) return false
// 設置一個map存儲,左括號爲key,右括號爲value
map.set('(', ')')
map.set('[', ']')
map.set('{', '}')
const map = new Map()
// 設置一個數組,用來遍歷壓棧
const res = []
for (let i = 0; i <= s.length; i++) {
let item = s[i]
if (map.has(s[i])) {
// 左括號狀況,直接push進數組
res.push(item)
} else {
// 右括號狀況,且右括號與前面的元素不相同直接返回false
if (map.get(res.pop()) !== item) {
return false
}
}
}
return true
};
複製代碼
哎,各位可要注意身體哦,不要學的太着迷哦,留着身體之後能夠好好找女友,陪女友哦!spa