1684838553 / arithmeticQuestions

程序员的算法趣题
2 stars 0 forks source link

左程云算法入门 #27

Open 1684838553 opened 1 year ago

1684838553 commented 1 year ago
  1. 给定一个参数N, 返回 1!+2!+3!+···+ N!

解题思路:先累乘, 后累加

function getResult(n) {
    let total = 0;
    let cache = 1;

    for(let i = 1; i<= n; i++) {
        cache *= i;
        total += cache;
    }

    return total;
}
1684838553 commented 1 year ago
  1. 选择排序

解题思路:全数组找出最小值,放在数组索引为0的地方, 此后,找出1 - N-1 中最小值, 放在索引为1的地方, ···

const arr = [1, 3, 8, 6, 3, 56, 9, 0, 44];

function selectSort(arr) {
    if (arr.length < 2) return arr;
    let n = arr.length;

    for (let i = 0; i < n; i++) {
        let minValueIndex = i;

        for (let j = i + 1; j < n; j++) {
            minValueIndex = arr[j] < arr[minValueIndex] ? j : minValueIndex;
        }
        swap(arr, i, minValueIndex);
    }

    return arr;
}

function swap(arr, i, j) {
    let temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}
1684838553 commented 1 year ago

左程云算法 b站

1684838553 commented 1 year ago
  1. 冒泡排序

解题思路: 索引 0 和 1比较,值大的从后排, 在比较1 和2, 一直到最后一个值, 最后一个值一定会是最大值。在比较 0 - N-1。···

const arr = [1, 3, 8, 6, 3, 56, 9, 0, 44];

function bubbleSort(arr) {
    if (arr.length < 2) return arr;
    let n = arr.length;

    for (let i = n-1; i >= 0; i--) {
       for(let j = 1; j <= i ; j++) {
            if(arr[j-1] > arr[j]){
                swap(arr, j-1, j)
            }
       }
    }

    return arr;
}

function swap(arr, i, j) {
    let temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}
1684838553 commented 1 year ago
  1. 插入排序

解题思路: 0-0, 0-1, 0-2 等地方依次使数组有序

const arr = [1, 3, 8, 6, 3, 56, 9, 0, 44];

function insertSort(arr) {
    if (arr.length < 2) return arr;
    let n = arr.length;

    for (let j = 1; j <= n - 1; j++) {
        let newValueIndex = j;
        while (newValueIndex - 1 >= 0 && arr[newValueIndex - 1] > arr[newValueIndex]) {
            swap(arr, newValueIndex - 1, newValueIndex)
            newValueIndex--;
        }
    }

    return arr;
}

function swap(arr, i, j) {
    let temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}

代码优化

function insertSort(arr) {
    if (arr.length < 2) return arr;
    let n = arr.length;

    for (let j = 1; j <= n - 1; j++) {
        for (let pre = j - 1; pre >= 0 && arr[pre] > arr[pre + 1]; pre--) {
            swap(arr, pre, pre + 1)
        }
    }

    return arr;
}