1.给你一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b,c,使得a+b+c=0.请你找出
所有和为0且不重复的三元组。
var Sum = function (nums) {
var arr = [];
nums.sort(function (a, b) {
return a - b;
})
for (var i = 0; i < nums.length - 2; i++) {
if (nums[i] !== nums[i - 1] || i === 0) {
var start = i + 1;
var end = nums.length - 1;
while (start < end) {
if (nums[i] + nums[start] + nums[end] === 0) {
arr.push([nums[i], nums[start], nums[end]]);
start++;
end--;
while (start < end && nums[start] === nums[start - 1]) {
start++;
}
while (start < end && nums[end] === nums[end + 1]) {
end--;
}
} else if (nums[i] + nums[start] + nums[end] < 0) {
start++
} else {
end--;
}
}
}
}
return arr;
}
var res = Sum([1, 2, 6, -1, -4, -2, 0, 7, -5])
console.log(res);
2.给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回0。
var maxProfit = function (prices) {
if (prices.length == 0) {
return 0;
}
var minPri = prices[0];
var maxProfit = 0;
var maxpri = prices[0];
for (var i = 0; i < prices.length; i++) {
if (prices[i] < minPri) {
minPri = prices[i]
} else if ((prices[i] - minPri) > maxProfit) {
maxProfit = prices[i] - minPri
}
}
return maxProfit
}
var res = maxProfit([33, 10, 2, 7, 3, 2, 41, 6, 3, 5, 1])
console.log(res);
3.一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?
var route = function (m, n) {
var arr = [];
for (var i = 0; i < n; i++) {
arr.push([])
}
for (var row = 0; row < n; row++) {
arr[row][0] = 1;
}
for (var col = 0; col < m; col++) {
arr[0][col] = 1;
}
for (var row = 1; row < n; row++) {
for (var col = 1; col < m; col++) {
arr[row][col] = arr[row - 1][col] + arr[row][col - 1]
}
}
return arr[n - 1][m - 1]
}
console.log(unique(7, 3));