leetcode(2)

mac2026-01-31  3

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; };
最新回复(0)