LeetCode
力扣刷题记录
吴贝贝97
这个作者很懒,什么都没留下…
展开
-
731. 我的日程安排表 II(线段树或查分数组)
它意味着在start到end时间内增加一个日程安排,注意,这里的时间是半开区间,即[start,end),实数x的范围为,start原创 2022-07-19 10:34:42 · 307 阅读 · 0 评论 -
719. 找出第 K 小的数对距离(二分)
数对 (a,b) 由整数 a 和 b 组成,其数对距离定义为 a 和 b 的绝对差值。给你一个整数数组 nums 和一个整数 k ,数对由 nums[i] 和 nums[j] 组成且满足 0 2(1,1) -> 0(3,1) -> 2距离第 1 小的数对是 (1,1) ,距离为 0 。示例 2...原创 2022-06-15 19:36:52 · 173 阅读 · 0 评论 -
498. 对角线遍历(模拟)
给你一个大小为 m x n 的矩阵 mat ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。示例 1:输入:mat = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,4,7,5,3,6,8,9]示例 2:输入:mat = [[1,2],[3,4]]输出:[1,2,3,4] 提示:m == mat.lengthn == mat[i].length1 ...原创 2022-06-14 10:13:56 · 100 阅读 · 0 评论 -
101. 对称二叉树(递归与迭代方法)
给你一个二叉树的根节点 root , 检查它是否轴对称。示例 1:输入:root = [1,2,2,3,4,4,3]输出:true示例 2:输入:root = [1,2,2,null,3,null,3]输出:false 提示:树中节点数目在范围 [1, 1000] 内-100原创 2022-06-02 11:27:49 · 183 阅读 · 0 评论 -
464. 我能赢吗(暴力+记忆化DFS+二进制状态压缩)
在 "100 game" 这个游戏中,两名玩家轮流选择从 1 到 10 的任意整数,累计整数和,先使得累计整数和 达到或超过100 的玩家,即为胜者。如果我们将游戏规则改为 “玩家 不能 重复使用整数” 呢?例如,两个玩家可以轮流从公共整数池中抽取从 1 到 15 的整数(不放回),直到累计整数和 >= 100。给定两个整数maxChoosableInteger(整数池中可选择的最大数)和desiredTotal(累计和),若先出手的玩家是否能稳赢则返回 true,否则返回 f...原创 2022-05-22 11:15:07 · 120 阅读 · 0 评论 -
436. 寻找右区间(排序+二分)
给你一个区间数组 intervals ,其中 intervals[i] = [starti, endi] ,且每个 starti 都 不同 。区间 i 的 右侧区间 可以记作区间 j ,并满足 startj >= endi ,且 startj 最小化 。返回一个由每个区间 i 的 右侧区间 的最小起始位置组成的数组。如果某个区间 i 不存在对应的 右侧区间 ,则下标 i 处的值设为 -1 。示例 1:输入:intervals = [[1,2]]输出:[-1]解释:集合中只有一个.原创 2022-05-20 15:18:47 · 130 阅读 · 0 评论 -
378. 有序矩阵中第 K 小的元素(二分)
给你一个n x n矩阵matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是 排序后 的第 k 小元素,而不是第 k 个 不同 的元素。你必须找到一个内存复杂度优于 O(n2) 的解决方案。示例 1:输入:matrix = [[1,5,9],[10,11,13],[12,13,15]], k = 8输出:13解释:矩阵中的元素为 [1,5,9,10,11,12,13,13,15],第 8 小元素是 13示例 2:输入:matrix = [[...原创 2022-05-18 15:35:17 · 205 阅读 · 0 评论 -
668. 乘法表中第k小的数(二分)
几乎每一个人都用乘法表。但是你能在乘法表中快速找到第k小的数字吗?给定高度m、宽度n 的一张m * n的乘法表,以及正整数k,你需要返回表中第k小的数字。例1:输入: m = 3, n = 3, k = 5输出: 3解释:乘法表:1 2 32 4 63 6 9第5小的数字是 3 (1, 2, 2, 3, 3).例 2:输入: m = 2, n = 3, k = 6输出: 6解释:乘法表:1 2 32...原创 2022-05-18 14:33:28 · 117 阅读 · 0 评论 -
127. 单词接龙(双向BFS)
字典wordList 中从单词 beginWord和 endWord 的 转换序列 是一个按下述规格形成的序列beginWord -> s1-> s2-> ... -> sk:每一对相邻的单词只差一个字母。对于1 <= i <= k时,每个si都在wordList中。注意, beginWord不需要在wordList中。sk== endWord给你两个单词 beginWord和 endWord 和一个字典 wordList ,返...原创 2022-05-09 16:07:21 · 346 阅读 · 0 评论 -
162. 寻找峰值(经典二分)
峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。你可以假设nums[-1] = nums[n] = -∞ 。你必须实现时间复杂度为 O(log n) 的算法来解决此问题。示例 1:输入:nums = [1,2,3,1]输出:2解释:3 是峰值元素,你的函数应该返回其索引 2。示例2:输入:nums = [1,2,1,3,5,6,4]输出:1 或 5...原创 2022-05-05 16:11:18 · 159 阅读 · 0 评论 -
713. 乘积小于 K 的子数组(滑动窗口模板题)
给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目。示例 1:输入:nums = [10,5,2,6], k = 100输出:8解释:8 个乘积小于 100 的子数组分别为:[10]、[5]、[2],、[6]、[10,5]、[5,2]、[2,6]、[5,2,6]。需要注意的是 [10,5,2] 并不是乘积小于 100 的子数组。示例 2:输入:nums = [1,2,3], k = 0输出:0提示:1 <=..原创 2022-05-05 11:14:57 · 125 阅读 · 0 评论 -
1305. 两棵二叉搜索树中的所有元素{非(递归中序+归并排序)}
给你root1 和 root2这两棵二叉搜索树。请你返回一个列表,其中包含两棵树中的所有整数并按 升序 排序。.示例 1:输入:root1 = [2,1,4], root2 = [1,0,3]输出:[0,1,1,2,3,4]示例 2:输入:root1 = [1,null,8], root2 = [8,1]输出:[1,1,8,8]提示:每棵树的节点数在[0, 5000] 范围内-105<= Node.val <= 105class Solu...原创 2022-05-01 20:34:18 · 162 阅读 · 0 评论 -
907. 子数组的最小值之和(单调栈)
class Solution {public: int sumSubarrayMins(vector<int> arr) { unordered_map<int, pair<int, int>> map; deque<int> q; for (int i = 0; i < arr.size(); i++) { while (!q.empty() && a.原创 2022-04-30 14:53:27 · 381 阅读 · 0 评论 -
410. 分割数组的最大值(二分题)
给定一个非负整数数组 nums 和一个整数m ,你需要将这个数组分成m个非空的连续子数组。设计一个算法使得这m个子数组各自和的最大值最小。示例 1:输入:nums = [7,2,5,10,8], m = 2输出:18解释:一共有四种方法将 nums 分割为 2 个子数组。其中最好的方式是将其分为 [7,2,5] 和 [10,8] 。因为此时这两个子数组各自的和的最大值为18,在所有情况中最小。示例 2:输入:nums = [1,2,3,4,5], m = 2输出...原创 2022-03-31 16:35:51 · 204 阅读 · 0 评论 -
365. 水壶问题
有两个水壶,容量分别为jug1Capacity和 jug2Capacity 升。水的供应是无限的。确定是否有可能使用这两个壶准确得到targetCapacity 升。如果可以得到targetCapacity升水,最后请用以上水壶中的一或两个来盛放取得的targetCapacity升水。你可以:装满任意一个水壶清空任意一个水壶从一个水壶向另外一个水壶倒水,直到装满或者倒空示例 1:输入: jug1Capacity = 3, jug2Capacity = 5, tar...原创 2022-03-05 10:55:39 · 375 阅读 · 0 评论 -
LetCode 315. 计算右侧小于当前元素的个数(二分搜索)
给定一个整数数组 nums,按要求返回一个新数组 counts。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。示例:输入: [5,2,6,1]输出: [2,1,1,0] 解释:5 的右侧有 2 个更小的元素 (2 和 1).2 的右侧仅有 1 个更小的元素 (1).6 的右侧有 1 个更小的元素 (1).1 的右侧...原创 2018-06-09 10:20:26 · 721 阅读 · 0 评论 -
LetCode 307. 区域和检索 - 数组可修改(线段树模版题)
给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。update(i, val) 函数可以通过将下标为 i 的数值更新为 val,从而对数列进行修改。示例:Given nums = [1, 3, 5]sumRange(0, 2) -> 9update(1, 2)sumRange(0, 2) -> 8线段树模版题c...原创 2018-06-09 14:21:13 · 483 阅读 · 0 评论 -
LetCode 493. 翻转对(归并排序)
本题思路:在递归函数中递归后,先不合并,首先处理逆序数,然后再合并。这样需要再写一个合并函数。这样的好处是在处理计数的时候不需要考虑谁先被写入copy数组。使得复杂度降低。归并排序看这个第一种:二分法,妥妥垫底 1500ms 差点超时class Solution {public: int reversePairs(vector<int>& nums) { ...原创 2018-06-09 21:17:38 · 1013 阅读 · 0 评论 -
LetCode 21. 合并两个有序链表
static int x=[](){ std::ios::sync_with_stdio(false); cin.tie(NULL); return 0;}();/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ...原创 2018-06-29 11:26:55 · 129 阅读 · 0 评论 -
LetCode 22. 括号生成
static int x=[](){ std::ios::sync_with_stdio(false); cin.tie(NULL); return 0;}();class Solution {public: vector<string> generateParenthesis(int n) { vector<string...原创 2018-06-29 11:27:32 · 163 阅读 · 0 评论 -
LetCode 23. 合并K个排序链表
static int __ = [](){ std::ios::sync_with_stdio(false); cin.tie(nullptr); return 0;}();/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ...原创 2018-06-29 11:28:28 · 132 阅读 · 0 评论 -
LetCode 24. 两两交换链表中的节点
static int dividend=[](){ std::ios::sync_with_stdio(false); cin.tie(NULL); return 0;}();/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *ne...原创 2018-06-29 11:29:03 · 139 阅读 · 0 评论 -
LetCode 25. k个一组翻转链表
static const auto __ = [](){ ios::sync_with_stdio(false); cin.tie(nullptr); return nullptr;}();class Solution {public: ListNode* reverseKGroup(ListNode* head, int k) { // k...原创 2018-06-29 11:29:42 · 310 阅读 · 0 评论 -
LetCode 26. 删除排序数组中的重复项
auto _=[](){ios::sync_with_stdio(0);return cin.tie(0);}();class Solution {public: int removeDuplicates(vector<int>& nums) { if (nums.size() <= 0) return 0; ...原创 2018-06-29 11:30:20 · 108 阅读 · 0 评论 -
LetCode 27. 移除元素
static int x=[](){ std::ios::sync_with_stdio(false); cin.tie(NULL); return 0;}();class Solution {public: int removeElement(vector<int>& nums, int val) { int index ...原创 2018-06-29 11:30:49 · 165 阅读 · 0 评论 -
LetCode 28. 实现strStr()
static int x=[](){ std::ios::sync_with_stdio(false); cin.tie(NULL); return 0;}();class Solution {public: vector<int> next; int strStr(string haystack, string needle) { ...原创 2018-06-29 11:31:13 · 124 阅读 · 0 评论 -
LetCode 29. 两数相除
static int x=[](){ std::ios::sync_with_stdio(false); cin.tie(NULL); return 0;}();class Solution {public: int divide(int dividend, int divisor) { if(dividend == INT_MIN &...原创 2018-06-29 11:31:34 · 235 阅读 · 0 评论 -
LetCode 30. 与所有单词相关联的字串
static int x=[](){ std::ios::sync_with_stdio(false); cin.tie(NULL); return 0;}();class Solution {public: vector<int> findSubstring(string s, vector<string>& words) ...原创 2018-06-29 11:32:04 · 381 阅读 · 0 评论 -
LetCode 1.两数之和
class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> two; unordered_map<int, int> m; for (int i =...原创 2018-06-25 09:57:47 · 140 阅读 · 0 评论 -
LetCode 2. 两数相加
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* ad...原创 2018-06-25 09:58:39 · 142 阅读 · 0 评论 -
LetCode 3. 无重复字符的最长子串
class Solution {public: int lengthOfLongestSubstring(string s) { int letter[127]; int len = s.length(); int max_len = 1; int i = 0; int j = 0; if (...原创 2018-06-25 09:59:08 · 104 阅读 · 0 评论 -
LetCode 4. 两个排序数组的中位数
class Solution {public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int len = nums1.size() + nums2.size(); if (len % 2 == 0) ...原创 2018-06-25 09:59:57 · 114 阅读 · 0 评论 -
LetCode 5. 最长回文子串
class Solution {public: string longestPalindrome(string s) { int len = s.length(); // 预处理字符串 char* src = new char[len * 2 + 1]; src[0] = '#'; int i = 0; ...原创 2018-06-25 10:00:22 · 121 阅读 · 0 评论 -
LetCode 6. Z字形变换
class Solution {public: string convert(string s, int numRows) { if (numRows == 1) return s; string ret; int n = s.size(); int cycleLen = 2 * numRows - 2; ...原创 2018-06-25 10:01:38 · 105 阅读 · 0 评论 -
LetCode 7. 反转整数
class Solution {public: int reverse(int x) { long long num = x; int flag = 1; if (num < 0) { flag = -1; num = -num; } long long result = 0; whil...原创 2018-06-25 10:02:09 · 106 阅读 · 0 评论 -
LetCode 8. 字符串转整数 (atoi)
class Solution {public: int myAtoi(string str) { int len = str.length(); int index = 0; long long num = 0; bool start = false; int sym = 1; while (...原创 2018-06-25 10:02:51 · 106 阅读 · 0 评论 -
LetCode 9. 回文数
static auto x = [](){ std::ios::sync_with_stdio(false); std::cin.tie(0); return 0;}();class Solution {public: bool isPalindrome(int x) { if (x == 0) ...原创 2018-06-25 10:03:24 · 94 阅读 · 0 评论 -
LetCode 10. 正则表达式匹配
static auto x = [ ] ( ) { std :: ios :: sync_with_stdio ( false ); cin.tie ( NULL ); return 0;}();class Solution {public: bool isMatch(string s, string p) { int m = s.leng...原创 2018-06-25 10:04:53 · 152 阅读 · 0 评论 -
LetCode 31. 下一个排列
static int x=[](){ std::ios::sync_with_stdio(false); cin.tie(NULL); return 0;}();class Solution {public: void nextPermutation(vector<int>& nums) { if (nums.size() ...原创 2018-06-30 19:03:37 · 188 阅读 · 0 评论 -
LetCode 32. 最长有效括号
static int x=[](){ std::ios::sync_with_stdio(false); cin.tie(NULL); return 0;}();class Solution {public: int longestValidParentheses(string s) { int res = 0, start = 0;//sta...原创 2018-06-30 19:04:04 · 253 阅读 · 0 评论