leetcode

两数之和

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const twoSum = (nums, target) => {
// 声明一个map 用来存储
// 它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。
// Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。
// 如果你需要“键值对”的数据结构,Map 比 Object 更合适。
// map.size | map.set() map.get() map.has() map.delete() map.clear()
// map.keys() | map.entries() | map.values() | map.forEach()
let map = new Map()
for (let i = 0; i<nums.length;i++) {
// 计算target 和数组中每一个元素的差值
const differenceValue = target - nums[i]
// 如果map中已经有这个差值了,我们直接拿出来并且找到它的索引,和当前数值的索引,返回出去
if (map.has(differenceValue)) {
return [map.get(differenceValue), i]
}
// 把数组每一项存进map中去 以值,索引 2, 1 这样的形式存进去
map.set(nums[i], i)
}
return []
}

回文数

1
2
3
4
5
6
7
8
9
const isPalindrome = function(x) {
const arr = String(x).split("")
for (let i = 0; i<arr.length/2;i++) {
if (arr[i]!== arr[.length - (i + 1)]) {
return false
}
}
return true
}

罗马数字转整数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const romanToInt = function(s) {
const romanMap = {
'I': 1,
'V': 5,
'X': 10,
'L': 50,
'C': 100,
'D': 500,
'M': 1000,
'IV': 4,
'IX': 9,
'XL': 40,
'XC': 90,
'CD': 400,
'CM': 900
}
let result = 0
const romanSplit = s.match(/(CM)|(CD)|(XC)|(XL)|(IX)|(IV)|(\W)/g)
for (const v of romanSplit) {
result+=romanMap[v]
}
return result
}

最长公共前缀

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const longestCommonPrefix = function(strs) {
if (strs.length === 0 || strs === null) {
return ''
}
let prefix = strs[0]
for (let i = 0; i<prefix.length; i++) {
let c = prefix.charAt(i)
for (let j = 0; j < strs.length; j++) {
if (i === prefix.length || strs[j].charAt(i) !== c) {
return prefix.substring(0, i)
}
}
}
return prefix
}

删除有序数组中的重复项

1
2
3
4
5
6
7
8
9
10
11
12
13
const removeDuplicates = function(nums) {
if(nums.length === 0) {
return 0
}
let slow = 0
for (let fast = 0; fast < nums.length; fast++) {
if (nums[fast] !== nums[slow]) {
slow++
nums[slow] = nums[fast]
}
}
return slow + 1
}

移除元素

1
2
3
4
5
6
7
8
9
10
const removeElement = function(nums,val) {
let i = 0
for (let j = 0; j < nums.length; j++) {
if (nums[j] !== val) {
nums[i] = nums[j]
i++
}
}
return i
}