两个数组的交集 II

image.png

  1. function intersect(nums1: number[], nums2: number[]): number[] {
  2. let arr1=new Array();
  3. let arr2=new Array();
  4. let result=new Array();
  5. for(let i=0;i<nums1.length;i++){
  6. if(arr1[nums1[i]]===undefined)
  7. arr1[nums1[i]]=1
  8. else
  9. arr1[nums1[i]]=arr1[nums1[i]]+1
  10. }
  11. console.log(arr1)
  12. for(let i=0;i<nums2.length;i++){
  13. if(arr2[nums2[i]]===undefined)
  14. arr2[nums2[i]]=1
  15. else
  16. arr2[nums2[i]]=arr2[nums2[i]]+1
  17. }
  18. console.log(arr2)
  19. for(let i=0;i<Math.min(arr1.length,arr2.length);i++){
  20. if(arr1[i]!==undefined&&arr2[i]!==undefined){
  21. for(let j=0;j<Math.min(arr1[i],arr2[i]);j++){
  22. result.push(i)
  23. }
  24. }
  25. }
  26. return result
  27. };
  1. function intersect(nums1: number[], nums2: number[]): number[] {
  2. let arr1=new Array();
  3. let result=new Array();
  4. for(let i=0;i<nums1.length;i++){
  5. if(arr1[nums1[i]]===undefined)
  6. arr1[nums1[i]]=1
  7. else
  8. arr1[nums1[i]]=arr1[nums1[i]]+1
  9. }
  10. for(let i=0;i<nums2.length;i++){
  11. if(arr1[nums2[i]]!==undefined&&arr1[nums2[i]]!==0){
  12. result.push(nums2[i])
  13. arr1[nums2[i]]--;
  14. }
  15. }
  16. return result
  17. };

合并两个有序数组

image.png

  1. function merge(nums1: number[], m: number, nums2: number[], n: number): void {
  2. nums1.splice(m, n, ...nums2)
  3. nums1.sort((a, b) => a - b);
  4. };

重塑矩阵

image.png

  1. /**
  2. * @param {number[][]} mat
  3. * @param {number} r
  4. * @param {number} c
  5. * @return {number[][]}
  6. */
  7. var matrixReshape = function(mat, r, c) {
  8. const sums=mat.length*mat[0].length
  9. const n=mat[0].length
  10. let arr=new Array()
  11. let results=new Array()
  12. if(r*c!==sums){
  13. return mat
  14. }
  15. else{
  16. for (let i = 0; i < sums; i++) {
  17. arr.push(mat[parseInt(i/n)][i%n])
  18. if((i+1) % c==0){
  19. results.push(arr)
  20. arr=[]
  21. }
  22. }
  23. return results
  24. }
  25. };

杨辉三角

image.png

有效的数独

image.png

var isValidSudoku = function(board) {
    const rows = new Array(9).fill(0).map(() => new Array(9).fill(0));
    const columns = new Array(9).fill(0).map(() => new Array(9).fill(0));
    const subboxes = new Array(3).fill(0).map(() => new Array(3).fill(0).map(() => new Array(9).fill(0)));
    for (let i = 0; i < 9; i++) {
        for (let j = 0; j < 9; j++) {
            const c = board[i][j];
            if (c !== '.') {
                const index = c.charCodeAt() - '0'.charCodeAt() - 1;
                rows[i][index]++;
                columns[j][index]++;
                subboxes[Math.floor(i / 3)][Math.floor(j / 3)][index]++;
                if (rows[i][index] > 1 || columns[j][index] > 1 || subboxes[Math.floor(i / 3)][Math.floor(j / 3)][index] > 1) {
                    return false;
                }
            }
        }
    }
    return true;
};

31. 下一个排列

image.png

删除有序数组中的重复项 II

image.png

/**
 * @param {number[]} nums
 * @return {number}
 */
var removeDuplicates = function(nums) {
    const n = nums.length;
    if (n <= 2) {
        return n;
    }
    let slow = 0, fast = 2;
    while (fast < n) {
        if (nums[slow] != nums[fast]) {
            nums[slow+2]=nums[fast]
            ++slow
        }
        ++fast

    }
    return slow+2;
};

螺旋矩阵

image.png

/**
 * @param {number[][]} matrix
 * @return {number[]}
 */
var spiralOrder = function (matrix) {
    let m = matrix.length;
    if (m === 0) return [];
    let res = [];
    let top = 0,
        bottom = m - 1,
        left = 0,
        right = matrix[0].length - 1;
    while (left < right && bottom > top) {
        for (let i = left; i < right; i++) res.push(matrix[top][i]);
        for (let i = top; i < bottom; i++) res.push(matrix[i][right]);
        for (let i = right; i > left; i--) res.push(matrix[bottom][i]);
        for (let i = bottom; i > top; i--) res.push(matrix[i][left]);
        top++;
        bottom--;
        left++;
        right--;
    }
    if (left === right) {
        for (i = top; i <= bottom; i++) res.push(matrix[i][left]);
    } else if (top === bottom) {
        for (i = left; i <= right; i++) res.push(matrix[top][i]);
    }
    return res;
};