算法 | 每日一题
记录 LeetCode 的每日一题。
Ninjee
这个作者很懒,什么都没留下…
展开
-
0509|942. 增减字符串匹配
0509|942. 增减字符串匹配贪心:根据提干规则,输入的 s 字符串长度为 n,输出的 perm 的长度就是 n + 1,那么可以定义 perm 中所有 number 的范围为 [0, n]。其中 min = 0, max = n;我们可以这样想,如果:s[i] == 'I',那么只要 perm[i] 尽可能小就可满足条件,那只需要把当前最小的 min 放入即可,同时把 min++;s[i] == 'D' ,同样的放入当前最大的值 max 即可,然后把 max++;perm 直到最后一原创 2022-05-14 02:32:45 · 73 阅读 · 0 评论 -
0508|442. 数组中重复的数据
0508|442. 数组中重复的数据方法一:set遍历时,用 set 保存数据,当遍历到重复内容(set.has()),则 push 到结果中。时间复杂度:O(n),空间复杂度:O(n);var findDuplicates = function(nums) { if (nums.length < 2) return []; const set = new Set(); const res = []; for (let n of nums) { if (set.has原创 2022-05-14 02:31:45 · 71 阅读 · 0 评论 -
0507|433. 最小基因变化
0507|433. 最小基因变化一个 bfs / dfs 的应用题。历年没考过,但思路不错。方法一:bfsconst CHARS = ["A", "C", "G", "T"]var minMutation = function (start, end, bank) { const bankSet = new Set(bank); const queue = [{ gene: start, step: 0 }]; // bfs while (queue.length) {原创 2022-05-14 02:31:03 · 60 阅读 · 0 评论 -
0506|933. 最近的请求次数
0506|933. 最近的请求次数队列的动态存储,不需要的值就及时抛弃(每次把超时的踢掉)this 的使用,原型链时间长了有点忘。复杂度:时间复杂度:均摊 O(1),每个元素最多 入队 / 出队 各一次。空间复杂度:O(L),L 为队列的元素个数。var RecentCounter = function () { this.queue = [];};RecentCounter.prototype.ping = function (t) { this.queue.push(t原创 2022-05-14 02:29:24 · 97 阅读 · 0 评论 -
0505|713. 乘积小于 K 的子数组
每日一题|0505|713. 乘积小于 K 的子数组0505|713. 乘积小于 K 的子数组mid滑动窗口。求连续子树组的个数,“连续子树组”很强的暗示———使用滑动窗口。本题只需记录 以每个数字为右边界所形成的有效子数组的个数 ==> right - left + 1 。注意:如果 k 为 <= 1 时,一定不存在有效结果,直接返回 0;每次 while 循环,窗口因 right 都会向右扩展。然后需要根据条件 count 小于总数 k,通过移动 left 收原创 2022-05-14 02:17:08 · 69 阅读 · 0 评论 -
0504|1823. 找出游戏的获胜者
每日一题|0504|1823. 找出游戏的获胜者0504|1823. 找出游戏的获胜者这道题使用队列也可以。遍历 quene 时,从队尾拿出一个成员,然后再从对头插入。如此循环。这里使用的是链表:var findTheWinner = function (n, k) { // 边界 if (k === 1) return n; // 构造一个循环链表 const head = new TreeNode(1); let point = head; for (let i =原创 2022-05-14 02:15:37 · 367 阅读 · 0 评论 -
0503|937. 重新排列日志文件
每日一题 | 0503 | 937. 重新排列日志文件0503 | 937. 重新排列日志文件对 sort 的灵活运用。var reorderLogFiles = function (logs) { // 保存 0 和 9 字母的code值 const ZERO = '0'.charCodeAt(0); // 48 const NINE = '9'.charCodeAt(0); // 57 // 原地排序 logs.sort((a, b) => { // 判断原创 2022-05-14 02:10:30 · 62 阅读 · 0 评论 -
0501|1305. 两棵二叉搜索树中的所有元素
每日一题 | 0501|1305. 两棵二叉搜索树中的所有元素0501|1305. 两棵二叉搜索树中的所有元素暴力解:递归中序遍历,把结果全部写的 res 中,然后 sort 排序;优化空间:见官方解法,用 num1 和 nums2 分别拿到 root1 和 root2 中序遍历的结果,是递增的;然后利用双指针 p1 和 p2 把 num1 和 num2 合并到 res 数组中。时间复杂度为 O(m+n)var getAllElements = function (root1,原创 2022-05-14 02:03:18 · 106 阅读 · 0 评论 -
0502 | 591. 标签验证器
0502 | 591. 标签验证器正则:正则表达式不要背.留个标记,winter 玩具浏览器 toy browser 可以按照这个思路优化。1. 正则中 .*? 是什么意思?. : 匹配 1 个字符,匹配 任何 单个字符;* :匹配 ≥ 0 个字符,匹配 在它之前的那个 字符。?:匹配 0|1 个字符,匹配 在它之前的那个 字符。所以:.*:匹配任何字符 ≥ 0 个;.?:匹配任何字符 0|1 个;那么:.*? : 匹配表示匹配任意字符到下一个符合条件的字符。例子原创 2022-05-14 02:05:06 · 201 阅读 · 0 评论