贪心算法
- 贪心算法是算法设计的一种思想;
- 期盼通过每个阶段的局部最优选择,从而达到全局的最优。结果并不一定是最优;
练习题
var findContentChildren = function (g, s) {
g.sort((a, b) => a - b);
s.sort((a, b) => a - b);
let index = 0;
s.forEach((item) => {
if (item >= g[index]) {
index++;
}
});
return index;
};
var maxProfit = function (prices) {
let res = 0;
for (let i = 0; i < prices.length; i++) {
if (prices[i] > prices[i - 1]) {
res += prices[i] - prices[i - 1];
}
}
return res;
};
回溯算法
- 回溯算法是算法设计的一种方法;
- 回溯算法是一种渐进式寻找并构建问题解决方式的策略;
- 回溯算法会先从一个动作开始解决问题,如果不行,就回溯并选择另一个动作直到将问题解决;
练习题
var permute = function (nums) {
const res = [];
const rec = (path) => {
if (path.length === nums.length) {
res.push(path);
return;
}
nums.forEach((item) => {
if (!path.includes(item)) {
rec([...path, item]);
}
});
};
rec([]);
return res;
};
var subsets = function (nums) {
let res = [];
const backtrack = (path, len, start) => {
if (path.length === len) {
res.push(path);
return;
}
for (let i = start; i < nums.length; i++) {
backtrack(path.concat(nums[i]), len, i + 1);
}
};
for (let i = 0; i <= nums.length; i++) {
backtrack([], i, 0);
}
return res;
};