前言:不少人说,作算法题没用,实际又用不到。我作算法题前没有女友,作了以后女友已经在我旁边打呼噜了,如今知道该干啥了吧。嘿嘿。加油吧!!!你看看我长这样都能找到女友,大家还等啥呢!算法
思路:先设一个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