希望自己能早点刷完吧,太懒了
一、 数组
1. 删除排序数组中的重复项
已知是排序数组,只要判断前后两个值,如果一致,就删除。
/**
* @param {number[]} digits
* @return {number[]}
*/
var plusOne = function(digits) {
var i;
for(i=digits.length-1; i>=0; i--) {
if(digits[i]!=9) {
digits[i]++;
return digits
} else {
digits[i] =0
}
}
digits.unshift(1)
return digits
};
2. 买卖股票的最佳时机 II
var maxProfit = function(prices) {
if(prices==null || prices.length==0) return 0;
var profit =0;
for(var i= 1; i< prices.length; i++) {
if(prices[i]>prices[i-1]) {
profit += (prices[i]-prices[i-1])
}
//写这里的时候,注意数组越界,不能犯这种低级的错误,zz啊
}
return profit;
};
3. 旋转数组
var rotate = function(nums, k) {
let l = nums.length;
k %= l
nums.unshift(...nums.splice(nums.length-k, k));
return nums;
};
4. 存在重复元素
1>. 简单粗暴实现,时间消耗大
var containsDuplicate = function(nums) {
if(nums.length <= 1) {
return false
}
for(var i =0;i<nums.length; i++) {
for(var j= i+1; j<nums.length;j++) {
if(nums[i] == nums[j]) {
return true
}
}
}
return false
};
2>.利用sort排序,再比较前后值
var containsDuplicate = function(nums) {
var arr = nums.sort()
for(var i =0;i<nums.length; i++) {
if(nums[i] ==nums[i+1]) {
return true
}
}
return false
};
3.> 利用es6中set数据结构,set里面的数据是唯一的去重
var containsDuplicate = function(nums) {
var arr= [...new Set(nums)];
return arr.length != nums.length
};
5. 只出现一次的数字
1>.
var singleNumber = function(nums) {
var arr = nums.sort();
for(var i =0; i<nums.length;i++) {
if(nums[i] ==nums[i+1]) {
arr.splice(i, 2)
i= i-2
}
}
return arr
};
2>.js异或运算符^ 相同为假0,相异为真1
a^a = 0
a^0 = a
a^a^b = a^b^a = b
var singLeNumber = function(nums) {
var arr = 0;
for(var i=0; i<nums.length; i++) {
arr ^= arr[i]
}
return arr
}
6. 两个数组的交集(测试没问题,leetcode就是通不过)
写了两种方式 就先这样吧
// function uq(arr1, arr2) {
let arr1 = [1,2,2,1]
let arr2 = [2,2]
let intersection = Array.from(new Set(arr1))
let intersection2 = Array.from(new Set(arr2))
// let a = []
// for (let i = 0; i < intersection.length; i++) {
// for (let j = 0; j < intersection2.length; j++) {
// console.log(intersection[i], intersection2[j])
// if (intersection[i] == intersection2[j]) {
// a.push(intersection[i])
// }
// }
// }
// console.log(a)
// return a
var a = intersection.filter(item => { return intersection2.indexOf(item) != (-1) })
console.log(a)
// return a;
// }
// uq([1, 2, 2, 1], [2, 2])
7. 加1
/**
* @param {number[]} digits
* @return {number[]}
*/
var plusOne = function(digits) {
var arr = []
arr.push(digits.splice(-1) +1 )
return arr.sort()
};
8. 移动零
9. 两数之和
var twoSum = function(nums, target) {
var arr = [];
for(var i = 0; i<nums.length; i++) {
for(var j= i+1; j< nums.length; j++) {
if (nums[i] + nums[j] == target) {
arr.push(i, j)
return arr
}
}
}
};
10. 有效的数独
在这里插入代码片
11. 旋转图像
在这里插入代码片
二、字符串
1. 反转字符串
/**
* @param {character[]} s
* @return {void} Do not return anything, modify s in-place instead.
*/
var reverseString = function(s) {
s.reverse()
return s
};
2. 整数反转
/**
* @param {number} x
* @return {number}
*/
/**
* unshift添加数组头部一项
* shift删除数组头部一项
* unpop添加数组最后一项
* pop删除数组最后一项
* .toString.split('')把数字对象转为以''切割的数组
* parseInt 转为整数
* jion数组转为字符串
*/
var reverse = function(x) {
if(x == 0) {
return 0
}
var arr = x.toString().split('');
var num, res
if(arr[0]>=0 && arr[0]<=9) {
num = parseInt(arr.reverse().join(''))
}
if(arr[0] === '-') {
res = arr.splice(1).reverse();
res.unshift('-')
num = parseInt(res.join(''))
}
if(num > 2147483647 || num < -2147483648){
num = 0;
}
return num
};
3. 字符串中的第一个唯一字符
/**
* @param {string}
* @return {number}
*/
/**
*indeOf返回字符串第一次出现的位置
*lastIndexOf返回字符串最后一次出现的位置
*这里注意长度不用减1了,注意越界
*/
var firstUniqChar = function(s) {
for (let i = 0;i < s.length;i++) {
if (s.indexOf(s[i])===s.lastIndexOf(s[i])) {
return i
}
}
return -1
};
4. 有效的字母异位词
5. 验证回文串
6. 字符串转换整数 (atoi)
7. 实现 strStr()
8. 外观数列
9. 最长公共前缀
三、链表
1. 删除链表中的节点
2. 删除链表的倒数第N个节点
3.反转链表
4. 合并两个有序链表
5. 回文链表
6. 环形链表
四、树
1.二叉树的最大深度
2.验证二叉搜索树
3. 对称二叉树
4. 二叉树的层序遍历
5.将有序数组转换为二叉搜索树
五、排序和搜索
1.合并两个有序数组
/**
* @param {number[]} nums1
* @param {number} m
* @param {number[]} nums2
* @param {number} n
* @return {void} Do not return anything, modify nums1 in-place instead.
*/
var merge = function(nums1, m, nums2, n) {
nums1.splice(m, n, ...nums2)
nums1.sort((a, b) => a-b)
};