随笔分类 - LeetCode
摘要:1300. 转变数组后最接近目标值的数组和 返回一个序列中满足某个条件的最小值,那么就可以想到二分。 int l, r; while (l < r) { int mid = l + r >> 1; if (check(mid)) r = mid; else l = mid + 1; return l
阅读全文
摘要:376. 摆动序列 解法一:动态规划: 找到一个下标元素可能的状态,是上升序列的末尾还是下降序列的末尾。 // 动态规划 class Solution { public: int wiggleMaxLength(vector<int>& nums) { int n = nums.size();
阅读全文
摘要:1674. 使数组互补的最少操作次数 LeetCode第217周赛的第三题,比赛时卡了一个小时,没有想到O(n)的做法。对差分不熟悉,但是最关键的还是扫描的思路没有想到。由于这道题有这么几个点比较重要,觉得应该特别记录一下。 扫描:比赛时我也想到了当选定和K处于个个区间[2, lo]、[lo,
阅读全文
摘要:116. 填充每个节点的下一个右侧节点指针 给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下: struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指
阅读全文
摘要:120. 三角形最小路径和 给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。 相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。 示例: 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8
阅读全文
摘要:309. 最佳买卖股票时机含冷冻期 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 卖出股票后,你无法在第二天买入
阅读全文
摘要:112. 路径总和(简单) 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树,以及目标和 sum = 22, **5** / \ **4** 8 / / \
阅读全文
摘要:面试题 16.11. 跳水板(简单) 你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。 返回的长度需要从小到大排列。 示例: 输入: shorter = 1 lo
阅读全文
摘要:32. 最长有效括号 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。 示例: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()" 输入: ")()())" 输出: 4 解释: 最长有效括号子串为 "()()" 分析: 本题可以用动态规划解决。
阅读全文
摘要:63. 不同路径 II 一个机器人位于一个 m x n 网格的左上角 。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。 现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径? 说明: 网格中的障碍物和空位置分别用 1 和 0 来表示。 示例: 输入: [ [0,0,
阅读全文
摘要:44. 通配符匹配 给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。 '?' 可以匹配任何单个字符。 '*' 可以匹配任意字符串(包括空字符串)。 两个字符串完全匹配才算匹配成功。 说明: s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空
阅读全文
摘要:一、1496. 判断路径是否相交: 给你一个字符串 path,其中 path[i] 的值可以是 'N'、'S'、'E' 或者 'W',分别表示向北、向南、向东、向西移动一个单位。 机器人从二维平面上的原点 (0, 0) 处开始出发,按 path 所指示的路径行走。 如果路径在任何位置上出现相交的情况
阅读全文
摘要:108. 将有序数组转换为二叉搜索树 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 示例: 给定有序数组: [-10,-3,0,5,9], 一个可能的答案是:[0,-3,9,-10,null
阅读全文
摘要:718. 最长重复子数组 给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。 示例: 输入: A: [1,2,3,2,1] B: [3,2,1,4,7] 输出:3 解释: 长度最长的公共子数组是 [3, 2, 1] 。 分析: 分析一个问题的最优解,通常是从暴力解法的优
阅读全文
摘要:剑指 Offer 09. 用两个栈实现队列 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例: 输入: ["CQueue
阅读全文
摘要:215. 数组中的第K个最大元素 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出
阅读全文
摘要:209. 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的连续子数组,返回 0。 示例: 输入:s = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是
阅读全文
摘要:面试题 02.01. 移除重复节点 编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。 示例: 输入:[1, 2, 3, 3, 2, 1] 输出:[1, 2, 3] 输入:[1, 1, 1, 1, 2] 输出:[1, 2] 分析: 链表结点移除的本质就是 将被删除结点的前驱结点连向后继
阅读全文
摘要:一、1486. 数组异或操作: 给你两个整数,n 和 start 。 数组 nums 定义为:nums[i] = start + 2*i(下标从 0 开始)且 n == nums.length 。 请返回 nums 中所有元素按位异或(XOR)后得到的结果。 示例: 输入:n = 5, start
阅读全文
摘要:139. 单词拆分 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 说明: 拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。 示例: 输入: s = "leetcode", wordDict =
阅读全文