Javascript JS:你能用双指针法来解决股票价格问题吗
我正在尝试编写自己的解决方案,以解决一个标准问题,即在每个数组指数表示一天的股价的情况下,找到可以获得的最大利润。Javascript JS:你能用双指针法来解决股票价格问题吗,javascript,Javascript,我正在尝试编写自己的解决方案,以解决一个标准问题,即在每个数组指数表示一天的股价的情况下,找到可以获得的最大利润。[10,7,5,8,11,9,1]的答案应该是6,因为你可以在5点买入,在11点卖出,所以最多6点。我的解决方案适用于这个场景,但当我尝试一些测试用例时,它并不适用于所有测试用例。2指针解决方案是否不理想 function calc(arr) { //var arr1 = [10, 7, 5, 8, 11, 9, 1] let start = 0; let end = a
[10,7,5,8,11,9,1]
的答案应该是6
,因为你可以在5点买入,在11点卖出,所以最多6点。我的解决方案适用于这个场景,但当我尝试一些测试用例时,它并不适用于所有测试用例。2指针解决方案是否不理想
function calc(arr) {
//var arr1 = [10, 7, 5, 8, 11, 9, 1]
let start = 0;
let end = arr.length - 1
let max = -1;
while(start < end) {
if (arr[end] - arr[start] < 0) {
end--
} else {
max = Math.max(max, arr[end] - arr[start])
start++
}
}
return max;
}
功能计算(arr){
//var arr1=[10,7,5,8,11,9,1]
让start=0;
让端=arr.length-1
设max=-1;
while(开始<结束){
if(arr[end]-arr[start]<0){
结束--
}否则{
max=Math.max(max,arr[end]-arr[start])
开始++
}
}
返回最大值;
}
您可以构建一个局部极小值和极大值数组,并获得所有对的结果(买入/卖出)
const
数据=[10,7,5,8,11,9,1],
结果=数据。减少((r,v,i,a)=>{
如果(!(r.length&1)==a[i-1]
从左边取累积最小值
从右侧取累积最大值
从每个索引的最大值中减去最小值
最大限度地利用差异
constnums=[10,7,5,8,11,9,1];
常量cumMin=(arr)=>{
设ans=[];
设prev=arr[0];
for(设i=0;i{
反向排列();
设ans=[];
设prev=arr[0];
for(设i=0;ival-cMin[ind]);
log(Math.max(…diff))代码>你能多次买卖吗?还是一买一卖?另外,请给出一个你没有得到正确答案的例子,以及期望的答案是什么。@RyanWilsoncalc([4,5,6,99,2,4,91])
。我期望96
作为结果,因为我可以在4
购买,在99
出售,但我的函数返回87