前言
数据结构,算法一直很薄弱。解题共两道,记录一年前!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一行解决(两种解题方法)
解题思路
- 数组转成整型
- 数组——> 字符串 ——> BigInt ——> toString() ——> 数组
- 逐位相加
第一种解题方法
当数组足够长的时候,整型的精度会丢失哦。所以一定要用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.换空格
解题思路
- JavaScript有replace方法,所以一行正则就搞定
- 自己实现
- 字符串转换为数组
- 遍历数组
- 判断将空格替换成指定字符"%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]
}
};