两层循环
两层循环比较元素, Array.prototype.splice() 去除 nums2 已相等的元素
var intersect = function(nums1, nums2) { let result = []; for(let e of nums1) { for(let i = 0; i< nums2.length; i++) { if(e === nums2[i]) { result.push(e); nums2.splice(i, 1); break; } } } return result;};
排序 + 双指针
先排序, 之后利用双指针来比较元素.
var intersect = function(nums1, nums2) { let result = []; // 定义两个指针 let i1 = 0, i2 = 0; // 定义排序方法 let sortMethod = (a, b) => a - b; nums1.sort(sortMethod); nums2.sort(sortMethod); while(i1 < nums1.length && i2 < nums2.length) { // 当 nums1[i1] < nums2[i2] 时, 需要移动指针 i1 至 nums1[i1] >= nums2[i2], 直接将前面的排除掉, 不可能相等 while(nums1[i1] < nums2[i2]) i1++; if(nums1[i1] === nums2[i2]) { result.push(nums1[i1]); i1++; i2++; }else { // nums1[i1] > nums2[i2] 时, 指针 i2 向后移动一位 i2++; } } return result;};
重塑矩阵
数组扁平化
将 mat 扁平化, 用一个数组 temp 保存, 最后依次将 temp 中元素按 每次 c 个转移到 result 数组中.
var matrixReshape = function(mat, r, c) { if(mat.length * mat[0].length !== r * c) return mat; let result = [], temp = []; mat.forEach((row) => { temp = temp.concat(row); }) while(temp.length !== 0) result.push(temp.splice(0, c)); return result;};
杨辉三角
模拟
模拟每一步, 直接求解
var generate = function(numRows) { let result = []; for(let i1 = 0; i1 < numRows; i1++) { if(i1 < 2) result.push(Array(i1 + 1).fill(1)); else { let row = Array(i1 + 1).fill(1); for(let i2 = 1; i2 < i1; i2++) { row[i2] = result[i1 - 1][i2 - 1] + result[i1 - 1][i2]; } result.push(row); } } return result; };