回顾一下近段时间写的力扣代码
写在前面:
笔者是一个刚开始刷力扣题的算法小白,基本都是以力扣官网上的简单的题开始练习,如有写的不当的地方,还请指正,我将会分三次的时间把我这段时间写的算法再理一遍。今天的就是下面的算法题
1、两数之和
① 题目描述:
② 解题思路
- 两个数一个和
- 已知一个数为
nums[i]
,和为target
- 设另一个数为
f = target - nums[i]
; - 只需寻找
dif
的值对应的下标j
- 输出
i,j
③ 代码
var twoSum = function(nums, target) {
for(var i = 0; i < nums.length; i++){
var dif = target - nums[i];
for(var j = i + 1; j < nums.length; j++){
if(nums[j] == dif)
return [i,j];
}
}
};
7、整数反转
① 题目描述
② 解题思路
- 假设传参x=123
- 当x!=0时进入while循环
- 第一轮 r = 0*10 + 123 % 10 = 3 ; x = 12
- 第二轮 r = 3*10 + 12 % 10 = 32 ; x = 1
- 第三轮 r = 32*10 + 1 % 10 = 321 ; x = 0
- /当x=0 时跳出循环
- result | 0 判断是否为32位的有符号整数
- 输出r = 321
③ 代码
var reverse = function(x) {
let result = 0;
while(x !== 0) {
result = result * 10 + x % 10;
x = (x / 10) | 0;
}
return (result | 0) === result ? result : 0;
};
9、两个栈实现一个队列
① 题目描述
② 解题思路
③ 代码
var CQueue = function() {
this.stack1 = [];
this.stack2 = [];
};
/**
* @param {number} value
* @return {void}
*/
CQueue.prototype.appendTail = function(value) {
this.stack1.push(value)
};
/**
* @return {number}
*/
CQueue.prototype.deleteHead = function() {
if(this.stack2.length) return this.stack2.pop();
while(this.stack1.length) {
this.stack2.push(this.stack1.pop());
}
return this.stack2.pop() || -1
};
10、合并排序数组
① 题目描述:
② 解题思路
③ 代码
/**
* @param {number[]} A
* @param {number} m
* @param {number[]} B
* @param {number} n
* @return {void} Do not return anything, modify A in-place instead.
*/
var merge = function(A, m, B, n) {
let len1 = m-1;
let len2 = n-1;
let len =m + n - 1;
while(len2>=0){
if(len1<0){
A[len--] = B[len2--];
continue;
}
A[len--] = A[len1]>=B[len2] ? A[len1--] : B[len2--];
}
};