最长的无重复子串

给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同):

function maxLength( arr ) {
    if(!arr.length) return;
    var res = [];
    var max = 0;
    for(var i =0 ;i<arr.length;i++){
        if(res.indexOf(arr[i]) !== -1){
               // 找到重复的,截取res数组,直到重复的值结束。
               res.splice(0,res.indexOf(arr[i])+1);
        }
        res.push(arr[i]);
        max =Math.max(max,res.length);
    }
    return max;
}

  js算法之最小路径和:

/**
 * @param {number[][]} grid
 * @return {number}
 */
var minPathSum = function (grid) {
  let dp = new Array(grid.length).fill(0).map(()=>new Array(grid[0].length).fill(0))
  // dp[i][j] 表示从左下角走到i,j的最小路径和
  dp[0][0]=grid[0][0] // base case
  // 二维数组遍历肯定就是双层for循环了
  // 行 i
  for (let i = 0; i < grid.length; i++) {
    // 向下走
    // 向右走
    for (let j = 0; j < grid[0].length; j++) {
      if (i == 0 && j == 0) continue; // 第一步
      // 状态转移方程
      // 一直往下走
      else if (i == 0) dp[i][j] = dp[i][j - 1] + grid[i][j];
      // 一直往右走
      else if (j == 0) dp[i][j] = dp[i - 1][j] + grid[i][j];
      // 左和右都走可能走 比较值
      // ! 注意grid[i-1][j]和dp[i-1][j]的区别
      else dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];
    }
  }
  return dp[dp.length - 1][dp[0].length - 1];
};

  

posted @ 2021-04-26 23:05  TangTaue  阅读(71)  评论(0编辑  收藏  举报