【温故知新1】回顾算法题

回顾一下近段时间写的力扣代码

写在前面:

笔者是一个刚开始刷力扣题的算法小白,基本都是以力扣官网上的简单的题开始练习,如有写的不当的地方,还请指正,我将会分三次的时间把我这段时间写的算法再理一遍。今天的就是下面的算法题

1、两数之和

① 题目描述:【温故知新1】回顾算法题_第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、整数反转

【温故知新1】回顾算法题_第2张图片

① 题目描述

② 解题思路

  • 假设传参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、两个栈实现一个队列

① 题目描述

【温故知新1】回顾算法题_第3张图片

② 解题思路

③ 代码

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、合并排序数组

① 题目描述:【温故知新1】回顾算法题_第4张图片

② 解题思路

③ 代码

/**
 * @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--];

    }
};

你可能感兴趣的:(算法和手写代码,leetcode,算法,数据结构)