算法

162 阅读1分钟

出现首次加载数组为空的情况 中间加载路径为空的情况 为空的时候后面一个不是最上面的状态

两个有序数组合并:

image.png

代码:

function mergeArr(arr1, arr2) {
    let m = arr1.length;
    let n = arr2.length;

    let len1 = arr1.length - 1;
    let len2 = arr2.length - 1;
    let len = m + n - 1;

    while (len1 >= 0 && len2 >= 0) {
        arr1[len--] = arr1[len1] > arr2[len2] ? arr1[len1--] : arr2[len2--];
    }

    if (len1 < 0) {
        for (let i = 0; i <= len2; i++) {
            arr1[i] = arr2[i];
        }
    }
}

let arr1 = [1, 1, 2, 3, 5, 6];
let arr2 = [1, 2, 5, 8, 9];
mergeArr(arr1, arr2);
console.log(arr1);

两数之和:

代码:

function numsOfTwoNumbers(nums, target) {
    let map = new Map();
    for (let i = 0; i < nums.length; i++) {
        let k = target - nums[i];
        if (map.has(k)) {
            return [i, map.get(k)];
        }

        map.set(nums[i], i);
    }

    return [];
}

console.log(numsOfTwoNumbers([1, 2, 4, 6, 7, 8, 9, 4], 15));

扁平化数据结构转tree

1,tree转line(递归)

let tree = {
            text: '一级', // 要显示的文本
            value: 1,  // 唯一值
            checked: false, // 选中转态
            children: [{
                text: '二级-1',
                value: 11,
                checked: false,
            }, {
                text: '二级-2',
                value: 12,
                checked: false,
            }]
        }
        const result = [];
        function treeToLine(tree, treeKey, isRoot = true, root = null) {
            if (!tree) return result;
            const obj = {};
            for (const key in tree) {
                if (tree.hasOwnProperty(key) && key !== 'children') {
                    obj[key] = tree[key];
                }
            }
            obj.parent = isRoot ? null : root[treeKey];
            result.push(obj);
            if (!tree.children) return result;
            for (const child of tree.children) {
                treeToLine(child, treeKey, false, tree);
            }

            return result;
        }

2,line转tree:

 let tree = [{
            text: '一级',
            value: 1,
            checked: false,
            disabled: false,
            showSign: true,
            parent: null
        },
        {
            text: '二级-1',
            value: 11,
            checked: false,
            disabled: false,
            parent: 1
        },
        {
            text: '三级-1',
            value: 111,
            checked: false,
            disabled: false,
            parent: 11
        },
        {
            text: '二级-2',
            value: 12,
            checked: false,
            disabled: false,
            parent: 1
        }];
        
        function lineToTree(data, key = "value", parent = "parent") {
            let tree = {};
            const children = "children"
            const dataMap = {}

            data.forEach(v => {
                dataMap[v[key]] = v
            });
            data.forEach(v => {
                const par = dataMap[v[parent]];
                if (v[parent]) {
                    !par[children] && (par[children] = [])
                    par[children].push(v)

                } else {
                    tree = v;
                }
            })

            return tree;
        }


        console.log(lineToTree(tree));