镇江网站推广,厦门seo百度快照优化,路由器做网站教程,秦皇岛房产信息网官网继续坚持✊#xff0c;我现在看到leetcode上的题不再没有思路了#xff0c;真的是思路决定出路#xff0c;在做题之前一定要把思路梳理清楚。 一、四数相加
leetcode题目编号#xff1a;第454题.四数相加II 题目描述#xff1a; 给定四个包含整数的数组列表 A , B , C , …继续坚持✊我现在看到leetcode上的题不再没有思路了真的是思路决定出路在做题之前一定要把思路梳理清楚。 一、四数相加
leetcode题目编号第454题.四数相加II 题目描述 给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) 使得 A[i] B[j] C[k] D[l] 0。 时间复杂度为n^2用map来解决看一下JS代码如下
/*** param {number[]} nums1* param {number[]} nums2* param {number[]} nums3* param {number[]} nums4* return {number}*/var fourSumCount function(nums1, nums2, nums3, nums4) {const map1 new Map()let count 0;for (let i 0; i nums1.length; i) {for (let j 0; j nums2.length; j) {const n nums1[i] nums2[j];map1.set(n, (map1.get(n) || 0) 1);}}for (let i 0; i nums3.length; i) {for (let j 0; j nums4.length; j) {const target 0 - (nums3[i] nums4[j]);if (map1.has(target)) {count map1.get(target);}}}return count;};
二、赎金信
leetcode题目编号383. 赎金信 题目描述 给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。如果可以构成返回 true 否则返回 false。 思路是
用数组去解决这样子比较方便快捷
/*** param {string} ransomNote* param {string} magazine* return {boolean}*/
var canConstruct function(ransomNote, magazine) {const strArr new Array(26).fill(0);const base a.charCodeAt();for(const s of magazine) {// 记录magazine里面各字符串出现的次数strArr[s.charCodeAt() - base];}// 对应的字符做减减的操作for (const t of ransomNote) {let index t.charCodeAt() - base;// 如果没有记录过直接返回falseif (!strArr[index]) {return false}strArr[index]--;}return true;};
三、三数之和
leetcode题目编号第15题. 三数之和 题目描述 给你一个包含 n 个整数的数组 nums判断 nums 中是否存在三个元素 abc 使得 a b c 0 请你找出所有满足条件且不重复的三元组。 遍历、对象指针两个互相结合就能找出最终的答案了。
看一下JS代码
/*** param {number[]} nums* return {number[][]}*/var threeSum function(pNums) {const result []const nums pNums.sort((a, b) a - b)// console.log(n);for (let i 0; i nums.length; i) {// 数组排过序如果第一个数大于0直接返回resif (nums[i] 0) return result;// 去重if (i 0 nums[i] nums[i - 1]) continue;let left i 1;let right nums.length - 1;while(right left) {const threeSum nums[i] nums[left] nums[right]if (threeSum 0) {right--;} else if (threeSum 0) {left;} else {result.push([nums[i], nums[left], nums[right]])// 去重while(left right nums[left] nums[left 1]){left}while(left right nums[right] nums[right - 1]) {right--}leftright--}}}return result;};
四、四数之和
leetcode题目编号 题目描述 题意给定一个包含 n 个整数的数组 nums 和一个目标值 target判断 nums 中是否存在四个元素 abc 和 d 使得 a b c d 的值与 target 相等找出所有满足条件且不重复的四元组。 剪枝操作要加条件限制来看一下JS代码
/*** param {number[]} nums* param {number} target* return {number[][]}*/var fourSum function(nums, target) {const len nums.length;if(len 4) return [];nums.sort((a, b) a - b);const res [];for(let i 0; i len - 3; i) {// 去重iif(i 0 nums[i] nums[i - 1]) continue;for(let j i 1; j len - 2; j) {// 去重jif(j i 1 nums[j] nums[j - 1]) continue;let l j 1, r len - 1;while(l r) {const sum nums[i] nums[j] nums[l] nums[r];if(sum target) { l; continue}if(sum target) { r--; continue}res.push([nums[i], nums[j], nums[l], nums[r]]);// 对nums[left]和nums[right]去重while(l r nums[l] nums[l]);while(l r nums[r] nums[--r]);}}}return res;};