58 笔试
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param m int整型 数值范围大小
* @param n int整型 取其中多少个数字
* @return int整型二维数组
*/
function getCombineArr(m, n) {
let resArr = []
// inArr是传进来的一个加了新数的数组
function work(inArr) {
if (inArr.length === n) {
// 当传进来的数组的长度等于需要的长度时push这个数组到结果数组里面
resArr.push(inArr);
return
}
// 长度不到
if (inArr.length < n) {
let lastVal = inArr[inArr.length - 1];
// 从数组末尾的那个数的下一个数开始,直到结束 如果到了结束的数长度还是不够呢? for循坏不会调用新的work了
for (let j = lastVal + 1; j <= m; j++) {
inArr.push(j)
let newArr = new Array(...inArr)
inArr.pop();
console.log(newArr);
work(newArr)
}
}
}
for (let i = 1; i <= m - n + 1; i++) {
console.log(i);
work([i])
}
// work([1])
console.log(resArr);
}
getCombineArr(3, 2)
// 题目二
// 经典的dp算法
// 转移方程dp[i] = dp[i - 1] + 1
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组 初始数组
* @return int整型
*/
function lengthOfNums(nums) {
// write code here
let maxVal = 1;
let dp = new Array(nums.length).fill(1)
console.log(dp);
for (let i = 0; i < nums.length; i++) {
for (let j = 0; j < i; j++) {
if (nums[i] > nums[j]) {
dp[i] = Math.max(dp[j] + 1, dp[i])
// 若大于取dp最大值
}
console.log("do");
}
maxVal = Math.max(dp[i], maxVal)
console.log(`dp[i]is +${dp[i]} and maxVal is ${maxVal}`);
// console.log(maxVal);
}
// console.log(maxVal);
return maxVal
}
lengthOfNums([10, 9, 2, 5, 3, 7, 101, 18])
console.log(res);
// 题目3
function findSurveyArr(surveyPosArr, totalDistance) {
let resArr = [];
// 还是用类似dp的做法 dp存储在这个区间内小于totalDistance的数组,
// 这题应该是要求速度空间的算法 或者是递归???
for (let i = 0; i < surveyPosArr.length; i++) {
// let s = [].push(surveyPosArr[i]
console.log([surveyPosArr[i]]);
work([surveyPosArr[i]], surveyPosArr[i], i)
}
function work(arr, sum, lastIndex) {
if (lastIndex >= surveyPosArr.length) return
// 下标超出
let val = surveyPosArr[lastIndex + 1]
if (sum + val > totalDistance) work(arr, sum, ++lastIndex)
if (sum + val === totalDistance) resArr.push(arr.concat(val))
work(arr.concat([val]), sum + val, ++lastIndex)
}
console.log(resArr);
}
findSurveyArr([10, 1, 2, 7, 6, 1, 5], 8)
难度不大,但是第一题真的浪费太多时间,第三题差一点点就写出来了 真的可惜
#笔试复盘#