1.杨辉三角
var generate = function(numRows) {
const result=[]
if(numRows<=0)
return result;
for(let i =0;i<numRows;i++){
const subarr=[]
for(let j=0;j<=i;j++){
if(j>0&&j<i){
subarr.push(result[i - 1][j - 1] + result[i - 1][j]);
}
else{
subarr.push(1);
}
}
result.push(subarr);
}
return result;
};
2.最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
解法一(直接法):
var MaxSubArray=function(nums){
let result=nums[0]; //用result来保存最大子序和
let sum=0>nums[0]?nums[0]:0; //用sum来保存当前的和
//可以很自然的想到用result和sun进行比较来获得最后的最大子序
for(const num of nums){
sum=num>sum+num?num:sum+num;
result=sum>result?sum:result;
}
return result;
}
解法二(动态规划):
var MaxSubArray=function(nums){
let result=nums[0];
let sum=0;
for(const num of nums){
if(sum>0)
sum+=num;
else
sum=num;
result=Math.max(sum,result);
}
return result;
}
3.杨辉三角(2)
条件如第一题,要求输出杨辉三角的第k行
var getRow = function(rowIndex) {
const result=[];
if(rowIndex<0)
return 0;
else
{
for(let i =0;i<rowIndex+1;i++)
{
let subArr=[];
for(let j=0;j<=i;j++)
{
if(j>0&&j<i)
subArr.push(result[i-1][j-1]+result[i-1][j]);
else
subArr.push(1);
}
result.push(subArr);
}
return result[rowIndex]
}
};
4.股票
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格.
如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。
注意你不能在买入股票前卖出股票。
var maxProfit = function(prices) {
let dif=0;
let temp=prices[0];
for(let i =0;i<prices.length;i++){
temp=Math.min(temp,prices[i]);
dif=Math.max(dif,prices[i]-temp);
}
return dif;
};