最长的无重复子串
给定一个数组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];
};

浙公网安备 33010602011771号