力扣每日打卡(自用)

无重复最长子串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度

滑动窗口 set的使用

在这里插入图片描述
在这里插入图片描述

合并两个有序数组

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目
合并 nums2 到 nums1 中 nums1会留出空位
在这里插入图片描述
倒着比较
先判断存在数组为空的情况,倒着搬过来;若两个数组都有值,就都最后一个比 然后往回退。
在这里插入图片描述
简化空间:
在这里插入图片描述

字符串相加

在这里插入图片描述
在这里插入图片描述
若没有限制:直接
在这里插入图片描述
当然不能一步到位哈哈:
从个位开始相加,用数组存放每一位相加完的数,依次push,最后reverse数组。用同一个变量(add)存放前一次的进位 用于下次相加
在这里插入图片描述

比较版本号

在这里插入图片描述
思路:就是一段一段的比 左边对齐 以.为分隔符 判断完剩下的就是相等的
那么怎么分割呢:

  1. 使用split化为数组:
    在这里插入图片描述
  2. 不用parseint 就用字符编码相加
    在这里插入图片描述

有效括号

在这里插入图片描述
用栈消消乐,当出现有有括号时 必定有栈顶元素与其匹配 要是匹配成功就pop栈顶元素,最后应该栈都被消完才对
在这里插入图片描述

两数之和

在这里插入图片描述

  1. 查询用map key是arr[index] value 是index (内存大)
    有一个放一个 就不会重复index
    在这里插入图片描述
  2. 还有暴力破解(梦回C语言)(速度慢)
    两层循环,第一层是第一个index 第二层是第二个index,第二个从第一层的后面开始查询
    在这里插入图片描述

全排列

omg 注意数组是引用类型!!!!
在这里插入图片描述
比如:
在这里插入图片描述
哈人
在这里插入图片描述
在这里插入图片描述

醉了 我恨全排列
在这里插入图片描述

二叉树路径总和

在这里插入图片描述
在这里插入图片描述
法1:递归
在这里插入图片描述
法二:bfs广度
一层一层来
在这里插入图片描述
法三:dfs深度
一条路走到黑属于是
也用到了递归
在这里插入图片描述

最大子序和

在这里插入图片描述
在这里插入图片描述

反转链表

在这里插入图片描述
在这里插入图片描述

三数之和

在这里插入图片描述
主要是去重 对 i left right都要去重
在这里插入图片描述

二叉树层序遍历

在这里插入图片描述

错误:
在这里插入图片描述
同层取完后才取下一层:
在这里插入图片描述

爬楼梯

递归罢了 就是数组下标那里注意一下
在这里插入图片描述

最长回文串

在这里插入图片描述
。。。并不觉得简单

思路就是:
最大回文是偶数个x字母,中间加个y(加不加取决于还有没有剩)
1、累计所有偶个数的字符总个数
2、判断是否还剩字符没累计,如果有 +1
在这里插入图片描述

环形链表

在这里插入图片描述

最长回文子串

在这里插入图片描述
在这里插入图片描述
或这样处理:
在这里插入图片描述

买股票最佳时机

在这里插入图片描述
思路:假设今天就卖出
在这里插入图片描述

手撕快排

O(nlogn)

function quickSort(arr) {
  if (arr.length <= 1) {
    return arr;
  }
  const pivotIndex = Math.floor(arr.length / 2);
  const pivot = arr.splice(pivotIndex, 1)[0];
  const left = [];
  const right = [];
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  return quickSort(left).concat([pivot], quickSort(right));
}

const arr = [3, 0, 2, 5, -1, 4, 1 ];
console.log(quickSort(arr)); // [-1, 0, 1, 2, 3, 4, 5]

搜索二维矩阵

在这里插入图片描述
在这里插入图片描述
从右上角开始查找,如果是target 就返回 如果比target大就列数-- 否则行数++

二叉树的最近公共祖先

在这里插入图片描述

反转链表

在这里插入图片描述

不同路径

这是一道经典的动态规划问题。我们可以用一个二维数组 dp 来记录从起点到每个位置的不同路径数,其中 dp[i][j] 表示从 (0,0) 到 (i,j) 的路径数。

初始化:由于机器人只能向下或者向右移动,因此在第一行和第一列上的任意一点,机器人只能一直向右或者一直向下走,所以到达这些位置的路径数都是 1。

状态转移方程:对于任意一点 (i,j), 可以从它左边或者上边的格子到达它,因此它到起点的路径数等于从左边格子和上边格子到起点的路径数之和,即 dp[i][j] = dp[i-1][j] + dp[i][j-1]。

最终返回 dp[m-1][n-1] 即可

在这里插入图片描述
注意newArray的时候要fill一下 (对稀松数组的处理问题。)
在这里插入图片描述

数组中第k个最大元素

堆排序

螺旋数组

在这里插入图片描述

每一圈都是右下左上 走完一行/列 对应top – right-- bottom-- left++

/**
 * @param {number[][]} matrix
 * @return {number[]}
 */
var spiralOrder = function (matrix) {
    if (matrix.length == 0) return []
    const res = []
    let top = 0, bottom = matrix.length - 1, left = 0, right = matrix[0].length - 1
    while (top <= bottom && left <= right) {//循环条件
        for (let i = left; i <= right; i++) res.push(matrix[top][i])//循环完上面一行 top++
        top++
        for (let i = top; i <= bottom; i++) res.push(matrix[i][right])//循环右边一列 right--
        right--
        if (top > bottom || left > right) break
        for (let i = right; i >= left; i--) res.push(matrix[bottom][i])
        bottom--
        for (let i = bottom; i >= top; i--) res.push(matrix[i][left])
        left++
    }
    return res
};
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值