Fannie酱解题|进击吧LeetCode(持续更新)

244 阅读2分钟

前言

数据结构,算法一直很薄弱。解题共两道,记录一年前!2021年,进击吧LeetCode!

LeetCode 有每日一题~~~ 但是有的我根本不会!!!(几大常见的算法正在规划系统学习)

简单题: 1128.等价多米诺骨牌对的数量

解题思路:算法刚起步,常规的算法都不知道(所以我现在的学习方法也不太对)
看示例,就是二维数组等价比较。官方解题哈希表什么的不会。 既然是二维数组那就暴力一点,双重循环,逐一比对,用一个变量count计数

/**
 * @param {number[][]} dominoes
 * @return {number}
 */
var numEquivDominoPairs = function(dominoes) {
    let count = 0;
    for (let i = 0; i<dominoes.length; i++) {
        let a = dominoes[i][0];
        let b = dominoes[i][1];
        for(let j = i +1;j<dominoes.length;j++){
            if((a == dominoes[j][0] && b == dominoes[j][1]) || (a == dominoes[j][1] && b == dominoes[j][0])){
                count++;

            }
        }
       
    }
    return count;
};

简单题: 989.JavaScript一行解决(两种解题方法)

解题思路

  1. 数组转成整型
    • 数组——> 字符串 ——> BigInt ——> toString() ——> 数组
  2. 逐位相加

第一种解题方法

当数组足够长的时候,整型的精度会丢失哦。所以一定要用BigInt

/**
 * @param {number[]} A
 * @param {number} K
 * @return {number[]}
 */
var addToArrayForm = function(A, K) {
    return (BigInt(A.join('')) + BigInt(K)).toString().split('')
}

第二种解题方法

var addToArrayForm = function(A, K) {
    const res = [];
    const n = A.length;
    for (let i = n - 1; i >= 0; --i) {
        let sum = A[i] + K % 10;
        K = Math.floor(K / 10);
        if (sum >= 10) {
            K++;
            sum -= 10;
        }
        res.push(sum);
    }
    for (; K > 0; K = Math.floor(K / 10)) {
        res.push(K % 10);
    }
    res.reverse();
    return res;
};

待续
这个我还没有套用,改时间套用一下

公式

当前位 = (A 的当前位 + B 的当前位 + 进位carry) % 10
注意,AB两数都加完后,最后判断一下进位 carry, 进位不为 0 的话加在前面。

模板

while ( A 没完 || B 没完))
A 的当前位
B 的当前位

和 = A 的当前位 + B 的当前位 + 进位carry
当前位 = 和 % 10;
进位 = 和 / 10;
判断还有进位吗

简单题: 05.换空格

解题思路

  1. JavaScript有replace方法,所以一行正则就搞定
  2. 自己实现
    • 字符串转换为数组
    • 遍历数组
    • 判断将空格替换成指定字符"%20"
    • 将数组转成为字符串

方法一:

var replaceSpace = function(s) {
    return s.replace(/ /g,'%20');
};

//要特别注意这个replace的用法,如果不写正则,
    return s.replace(' ','%20');//只会替换部分
    return s.replace(/^\s/g,'%20'); //不能通过
    return s.replace(/^\s+/g,'%20'); //"   " 多个空格不能通过

方法二:

var replaceSpace = function(s) {
    s = s.split('');
   for(let i=0;i<s.length;i++){
       if(s[i] == ' '){
           s[i] ='%20'
       }
   }
   return s.join('')
};

补充第二种方法 可以不要数组 谢谢@想见青山
var replaceSpace = function(s) {
  return  s.split(' ').join("%20");
};

简单题: 04.寻找两个正序数组的中位数

解题思路
判断数组是否为空 合并数组 再排序 获取数组的长度 判断奇偶性 得出中位数

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number}
 */

var findMedianSortedArrays = function(nums1, nums2) {
    let arr = nums1.concat(nums2)
    arr =arr.sort((a, b) => {
            return a-b; // 从小到大排序
        });
    let len = arr.length
    if(len%2 == 0){
        let num = len/2
        return (arr[num-1] + arr[num])/2
    }else{
        let num = Math.ceil(len/2)
        return arr[num-1]
        
    }
};