LeeCode-刷题日记-Day19
560. 和为 K 的子数组
/**
* @param {number[]} nums
* @param {number} k
* @return {number}
*/
var subarraySum = function(nums, k) {
let count = 0;
for (let start = 0; start < nums.length; ++start) {
let sum = 0;
for (let end = start; end >= 0; --end) {
sum += nums[end];
if (sum == k) {
count++;
}
}
}
return count;
};
哈希表加前缀的解法
var subarraySum = function(nums, k) {
const mp = new Map();
mp.set(0, 1);
let count = 0, pre = 0;
for (const x of nums) {
pre += x;
if (mp.has(pre - k)) {
count += mp.get(pre - k);
}
if (mp.has(pre)) {
mp.set(pre, mp.get(pre) + 1);
} else {
mp.set(pre, 1);
}
}
return count;
};
415. 字符串相加
模拟竖式加法
/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
var addStrings = function(num1, num2) {
let i=num1.length-1,j=num2.length-1,add=0;
let ans=[];
while(i>=0||j>=0||add!=0){
let x = i>=0?num1.charAt(i)-'0':0;
let y = j>=0?num2.charAt(j)-'0':0;
let res=x+y+add;
ans.push(res%10);
add=Math.floor(res/10);
i--;
j--;
}
return ans.reverse().join('');
};
409. 最长回文串
思路为计算字符串中为偶数的字符串个数,结果直接加。为奇数的字符个数,如果有则结果加一,如果大于1,则取2的倍数加。
/**
* @param {string} s
* @return {number}
*/
var longestPalindrome = function(s) {
let count=0;
let res=new Array(60).fill(0);
for(let i=0;i<s.length;i++){
let dir=s.charCodeAt(i)-65;
res[dir]++;
}
let flag=0;
for(let i=0;i<60;i++){
if(res[i]%2===1){
if(flag===0){
count++;
flag=1;
}
count+=Math.floor(res[i]/2)*2;
}
if(res[i]%2===0){
count+=res[i];
}
}
return count;
};
- 本文链接:https://archer-lan.github.io/2023/11/20/LeeCode-%E5%88%B7%E9%A2%98%E6%97%A5%E8%AE%B0-Day19/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。