面试算法题

字节

// 输入'http://www.baidu.com?a=1&b=2&ee=4'
// 输出{a: 1, b: 2, ee: 4}
function decode() {
    const url = 'http://www.baidu.com?a=1&b=2&ee=4';
    const str = url.substring(url.indexOf('?') + 1).split('&');
    let obj = {}
    for (const index in str) {
        obj[str[index].split('=')[0]] = str[index].split('=')[1];
    }
    return obj;
}
// 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和  为目标值 target  的那两个整数,并返回它们的数组下标。
// 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
// 你可以按任意顺序返回答案。
// 示例 1:
//   输入:nums = [2, 7, 11, 15], target = 9
//   输出:[0, 1]
//   解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。
// 示例 2:
//   输入:nums = [3, 2, 4], target = 6
//   输出:[1, 2]
function fn(lists, num) {
    for (let i = 0; i < lists.length; i++) {
        for (let j = i + 1; j < lists.length; j++) {
            if (num === (lists[i] + lists[j])) {
                return [+i, +j];
            }
        }
    }
}
// 深拷贝
function deep(obj) {
    if (typeof obj !== 'object' || obj === null) {
        return obj;
    }
    let newObj = Array.isArray(obj) ? [] : {};
    for (const key in obj) {
        newObj[key] = deep(obj[key]);
    }
    return newObj;
}
// 输入
const str=`
1 21    3

  4 5  6
 7   8 9
`;
// 输出
arr=[
    ['1','21','3'],
    ['4','5','6'],
    ['7','8','9']
];

function formattingArr(str) {
    const res = str.split('\n').filter(item => item !== '');
    let result = [];
    for (const index in res) {
        const arr = res[index].split(' ').filter(item => item !== '');
        result.push(arr);
    }
    return result;
}
// 有字符串: abc/def/ghi/jkl/mno
// fun(str, 1)
// 输出: abcdef/ghi/jkl/mno
// fun(str, 2)
// 输出: abcdefghi/jkl/mno

const str = 'abc/def/ghi/jkl/mno';
function formattingStr(str, num) {
    let result = '';
    const strArr = str.split('/');
    let res = ''
    for (let index = 0; index <= num; index++) {
        res += strArr.shift();
    }
    result = res + strArr.join('/')
    return result;
}
formattingStr(str, 1)
// 输入
// [
//     { id: 31, value: 'test_31' },
//     { id: 32, value: 'test_32' },
//     {
//         id: 33,
//         value: 'test_33',
//         children: [
//             { id: 331, value: 'test_331' },
//             {
//                 id: 332,
//                 value: 'test_332',
//                 children: [
//                     {id: 3321, value: 'test_3321'},
//                     {id: 3322, value: 'test_3322'}
//                 ]
//             }
//         ]
//     }
// ];
// 输出
// [
//     { id: 31, value: 'test_31' },
//     { id: 32, value: 'test_32' },
//     { id: 331, value: 'test_331' },
//     {id: 3321, value: 'test_3321'},
//     {id: 3322, value: 'test_3322'}
// ];
var result = [];
function flat(list, parentId) {
    for (let index = 0; index < list.length; index++) {
        if (list[index].hasOwnProperty('children')) {
            flat(list[index].children, list[index].id)
        }
        else if (parentId) {
            list[index].parentId = parentId;
            result.push(list[index]);
        }
        else {
            list[index].parentId = -1;
            result.push(list[index]);
        }
    }
    return result;
}
// 格式化数字: 1234567890 为字符串 '1,234,567,890'
function formattingNumber(str) {
    const res = str.split('').reverse();
    let arr = [];
    for(let i = 0; i < res.length; i++) {
        arr.push(res[i]);
        if (i % 3 === 2) {
            arr.push(',');
        }
    }
    return arr.reverse().join('');
}
// 实现一个 get 函数,get(obj, chain, defaultVal)
// 举例:
// const obj = {
//     a: {
//         b: [{
//             c: 2
//         }]
//     }
// }
// 输入' hello world ',输出'hello world'
function trim(str) {
    const arr = str.split(' ');
    const result = [];
    for (const index in arr) {
        if (arr[index] !== '') {
            result.push(arr[index]);
        }
    }
    return result.join('');
}

美团

// 输入:url = 'http://www.domain.com/?user=anonymous&id=123&id=456&city=%E5%8C%97%E4%BA%AC&enabled'
// 输出:
// {
//     user: 'anonymous',
//     id: [123, 456], // 重复出现的 key 要组装成数组,能被转成数字的就转成数字类型
//     city: '北京', // 中文需解码
//     enabled: true // 未指定值的 key 与约定为 true
// }

输入:nums1 = [1,2,3], nums2 = [2,5,6]
输出:[1,2,2,3,5,6]
函数示范:const merge = function (nums1, nums2) {
// 返回合并后的数组
  return result
}

你可能感兴趣的:(算法)