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))你能多次买卖吗?还是一买一卖?另外,请给出一个你没有得到正确答案的例子,以及期望的答案是什么。@RyanWilson
    calc([4,5,6,99,2,4,91])
    。我期望
    96
    作为结果,因为我可以在
    4
    购买,在
    99
    出售,但我的函数返回
    87