SOURCE

// 面试过程遇到的算法题
// 字节跳动一面---start
//  1、实现一个compose 函数
// 特点:
// compose的参数是函数,返回的也是一个函数
// 因为除了第一个函数的接受参数,其他函数的接受参数都是上一个函数的返回值,所以初始函数的参数是多元的,而其他函数的接受值是一元的
// compsoe函数可以接受任意的参数,所有的参数都是函数,且执行方向是自右向左的,初始函数一定放到参数的最右面

// let compose = function(...args) {
//     let len = args.length;
//     // console.log(len);
//     let count = len - 1;
//     let result;
//     return function f1(...args1) {
//         result = args[count].apply(this, args1);
//         if(count <= 0) {
//             count = len - 1;
//             return result;
//         }
//         else {
//             count--;
//             return f1.call(null, result);
//         }
//     }
// }

// const b = (x, y) => x + y;
// const a = x => x * x;

// const c = compose(a, b);
// let result = c(1, 2);
// console.log(result);



// 2、实现sleep(2000).then(() => {
    //do something
// })

// function sleep(ms) {
//     return new Promise((resolve, reject) => {
//         setTimeout(resolve, ms, 'done');
//     })
// }

// sleep(2000).then((res) => {
//     console.log(res);
// })
// 字节跳动一面---end



// 3、两个大数相加
// function sum(str1, str2) {
//     const arr1 = str1.split(''),arr2 = str2.split('');
//     const len1 = arr1.length,len2 = arr2.length;
//     const maxLen = Math.max(len1, len2);
//     let res = [];
//     let flag = false;
//     for(let i = 0; i < maxLen; i++) {
//         let temp;
//         let num1 = arr1.pop() , num2 = arr2.pop();
//         num1 = num1 ? num1 : 0;
//         num2 = num2 ? num2 : 0;
//         if(flag) {
//             temp =  parseInt(num1) + parseInt(num2) + 1;
//         } else {
//             temp =  parseInt(num1) + parseInt(num2);
//         }
//         if(parseInt(temp/10) > 0) {
//             // 有进位
//             res.push(temp%10);
//             flag = true;
//         } else {
//             res.push(temp);
//             flag = false;
//         }
//         if( i == maxLen -1 && flag) {
//             res.push(1);
//         }
//     }
//     return res.reverse().join('');
// }

// // 验证
// let result = sum('987654321111234','99900334444') // '987754221445678'
// console.log(result)



// 4、在排序数组中查找元素的第一个和最后一个位置
// var searchRange = function (nums, target) {
//     const findLeft = (nums, target) => {
//     let left = 0;
//     let right = nums.length - 1;
//     while (left <= right) {
//         let mid = Math.floor((left + right) / 2);
//         if (nums[mid] >= target) {
//         right = mid - 1;
//         } else {
//         left = mid + 1;
//         }
//     }
//     return left;
//     }
//     if (nums[findLeft(nums, target)] !== target)
//     return [-1, -1]
//     else
//     return [findLeft(nums, target), findLeft(nums, target + 1) - 1]
// };

// const nums = [1, 2, 5, 6, 6, 6, 7, 9];
// const target = 2;
// console.log(searchRange(nums, target));



// 5、广度优先遍历
// const data = {
//     name: 'root',
//     children: [
//         {
//             name: 'child_0',
//             children: [
//                 {
//                     name: 'child_0_0',
//                     children: [],
//                 },
//             ],
//         },
//         {
//             name: 'child_1',
//             children: [
//                 {
//                     name: 'child_1_0',
//                     children: [],
//                 },
//             ],
//         },
//     ],
// };

// function f(data) {
//     const res = [];
//     let queue = data.children;
//     res.push(data.name);

//     while (queue.length) {
//         [...queue].forEach(child => {
//             res.push(child.name);
//             queue.shift();
//             child.children && queue.push(...child.children);
//         });
//     }

//     return res;
// }

// console.log(f(data));


// 6、在未排序的数组中找到第k大的元素
// const sort = (arr, k) => {
//     let max = arr[0];
//     for (let i = 0; i < k; i++) {
//         for (let j = 0; j < arr.length - i - 1; j++) {
//             if (arr[j] > arr[j + 1]) {
//                 max = arr[j];
//                 arr[j] = arr[j + 1];
//                 arr[j + 1] = max;
//             }
//         }
//     }
//     return arr[arr.length - k];
// };

// let arr = [3,2,1,5,6,4], k = 2;
// console.log(sort(arr, k));




// 7、输入一个正整数n,输出所有和为n连续正数序列
// (例如:15输出 [ [1,2,3,4,5 ] , [ 4,5,6 ] , [ 7,8 ] ] )
// function get_value(value) {
//     let num = value
//     let arr = []
//     let newnum = 0
//     if (num % 2 == 1) {
//         arr.push([(num - 1) / 2, (num + 1) / 2])
//         newnum = num + 1
//     }
//     let arr1 = []
//     for (let i = 1; i < newnum / 2; i++) {
//         arr1 = []
//         for (let i1 = i; i1 < newnum / 2; i1++) {
//             arr1.push(i1)
//             let sum = 0
//             for (let i2 = 0; i2 < arr1.length; i2++) {
//                 sum += Number(arr1[i2])
//                 if (sum == num) {
//                     arr.push(arr1)
//                     i1 = newnum / 2
//                 } else if (sum > num) {
//                     i1 = newnum / 2
//                 } else {
//                 }
//             }

//         }
//     }
//     console.log(arr)
// }
// get_value(15)



console 命令行工具 X clear

                    
>
console