leetcode
文章平均质量分 94
HackingGate
这个作者很懒,什么都没留下…
展开
-
区间覆盖问题
区间覆盖问题原创 2023-02-21 22:16:46 · 1594 阅读 · 0 评论 -
单调队列
单调队列往往用来解决滑动窗口最值问题。目录1.239. 滑动窗口最大值2.剑指 Offer 59 - II. 队列的最大值3.862. 和至少为 K 的最短子数组1.239. 滑动窗口最大值给定一个数组 nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出:...原创 2020-08-13 13:48:14 · 257 阅读 · 0 评论 -
子矩阵求和问题
两道类似的子矩阵求和问题,都是化二维为一维去做,一维子数组求和问题有:和为K的子数组个数、最大子数组和,二维子矩阵求可以使用同样的方法。1074. 元素和为目标值的子矩阵数量class Solution {public: int numSubmatrixSumTarget(vector<vector<int>>& matrix, int target) { int row[300] = {0}; unordered_map&原创 2020-08-12 11:17:43 · 961 阅读 · 0 评论 -
C++17 string_view 加速子串问题
C++17引入了 string_view 类,适用于需要生成子串的问题,避免了字符串复制操作,但不允许修改子串,相当于提供一个子串的视图。基本用法如下:string str = "hello world";string_view sv(str);string_view sub = sv.substr(0, 2);unordered_map<string_view, int> mp;除了构造时需要使用string类对象外,取子串的方式和string基本相同,注意使用string_原创 2020-07-09 13:46:02 · 550 阅读 · 0 评论 -
双序列DP
1. 两个子序列的最大点积https://leetcode-cn.com/problems/max-dot-product-of-two-subsequences/给你两个数组nums1和nums2。请你返回 nums1 和 nums2 中两个长度相同的 非空 子序列的最大点积。数组的非空子序列是通过删除原数组中某些元素(可能一个也不删除)后剩余数字组成的序列,但不能改变数字间相对顺序。比方说,[2,3,5]是[1,2,3,4,5]的一个子序列而[1,5,3]不是。...原创 2020-05-25 23:15:14 · 592 阅读 · 0 评论 -
区间DP
1. 合并石子https://www.nowcoder.com/questionTerminal/6d3ccbc5b6ad4f12b8fe4c97eaf969e0有 N 堆金币排成一排,第 i 堆中有 C[i] 块金币。每次合并都会将相邻的两堆金币合并为一堆,成本为这两堆金币块数之和。经过N-1次合并,最终将所有金币合并为一堆。请找出将金币合并为一堆的最低成本。其中,1 <= N <= 30,1 <= C[i] <= 100输入描述:第一行输入一个数字 N..原创 2020-05-26 06:45:00 · 398 阅读 · 0 评论 -
前缀和
记录下leetcode里关于前缀和的题目。前缀和的概念很简单, sum[i+1] = sum(a[0]...a[i]), 计算 a[i]...a[j]的和就是 sum[j+1] - sum[i]。但是暴力枚举符合条件的(i, j)对往往超时,需要结合hash表记录。1.和为k的子数组https://leetcode-cn.com/problems/subarray-sum-equals-k/给定一个整数数组和一个整数k,你需要找到该数组中和为k的连续的子数组的个数。示例 1 :输...原创 2020-05-27 16:16:47 · 273 阅读 · 0 评论 -
两道使用后序遍历的二叉搜索树问题
1373. 二叉搜索子树的最大键值和(https://www.nowcoder.com/questionTerminal/380d49d7f99242709ab4b91c36bf2acc)#include <map>#include <unordered_map>#include <cstdio>#include <vector>using namespace std; struct TreeNode{ int val; .原创 2020-06-05 15:17:05 · 163 阅读 · 1 评论 -
划分K个等和子集
698. 划分为k个相等的子集正确解法:class Solution {private: int n; int target; bool dfs(int k, int tmpsum, int used, vector<int>& nums) { if(k == 1) return true; for (int i = 0; i < n; ++i) { if(used原创 2020-06-07 10:12:52 · 469 阅读 · 0 评论 -
博弈问题
记录leetcode中的博弈DP问题1.292. Nim 游戏你和你的朋友,两个人一起玩Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。示例:输入: 4输出: false解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛; 因为无论你拿走 1 块、2 块 还是 3 块石头,最后一块石头总是会被你的朋友...原创 2020-06-10 12:17:26 · 683 阅读 · 0 评论 -
几道技巧性的数组题
1.面试题03. 数组中重复的数字找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000因为一共有n个数,每个数都在 0~n-1之间,那么可以考虑把每个数放到对应的位置上。即:nums[i]..原创 2020-06-17 10:51:19 · 320 阅读 · 0 评论 -
摩尔投票法
摩尔投票法可以用来寻找数组中的多数元素。经典的摩尔投票法用来寻找数组中出现次数超过一半的元素。如leetcode 169:1.169. 多数元素给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例1:输入: [3,2,3]输出: 3示例2:输入: [2,2,1,1,1,2,2]输出: 2一个数组中出现次数大于n/2的元素最多只有1个。考虑这样一...原创 2020-06-17 21:19:53 · 1579 阅读 · 0 评论 -
旋转排序数组
Leetcode上有四道旋转排序数组的题目,都是使用二分法。使用二分法的关键点是想到这样一个事实:每次二分,左半边和右半边肯定有一边是能确定有序的。那么,无论是找最小值,还是搜索某个数,先在确定有序的那边找,没找到的话再对不确定有序的那边继续二分。首先要确定,nums[mid] 究竟和 nums[left] 以及 nums[right] 中的哪一个比较,可以把目标值套在一个可确定的区间里。1. 找最小值问题如果是找最小值,那么应当使得每次收缩区间,最小值仍然在区间内。 nums[mid] num原创 2020-06-21 10:40:08 · 1673 阅读 · 0 评论 -
leetcode中归并排序的应用
(A)逆序对个数:https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-xu-dui-lcof/在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。思路:这一题是典型的归并排序的应用。归并过程中,[left, mid] 和 [mid + 1, right]分别有序。之后将 nums[i] 和 nums[j]逐个比较。①考虑右半部分的每个元素对应逆序对的数量,即出现 nums[原创 2020-05-08 18:41:21 · 668 阅读 · 0 评论 -
背包问题
这篇博客记录在leetcode刷题中遇到的一些背包问题。(1)完全背包问题(A)https://leetcode-cn.com/problems/coin-change-2/ 518. 零钱兑换 II给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。示例 1:输入: amount = 5, coins = [1, 2, 5]输出: 4解释: 有四种方式可以凑成总金额:5=55=2+2+15=2+1+1+15=1+1+...原创 2020-05-11 13:04:18 · 275 阅读 · 0 评论 -
单调栈
这篇博客记录Leetcode刷题中遇到的单调栈问题,对于单调栈,要想明白是递增还是递减,栈顶元素代表什么,当遍历到比栈顶元素大或小的元素时,要怎么操作?(A)求下一个最大元素(NGE: Next Greater Element):A.1496. 下一个更大元素 I给定两个 没有重复元素 的数组nums1 和nums2,其中nums1是nums2的子集。找到nums1中每个元素在nums2中的下一个比其大的值。nums1中数字x的下一个更大元素是指x在num...原创 2020-05-20 23:42:33 · 339 阅读 · 0 评论 -
动态规划问题记录
Ⅰ:凑零钱问题:①给出不重复的数组 coins 表示硬币的面额,数字 amount 表示需要凑成的金额。如果每种金额的硬币只能用一次,输出所有不重复的可能的组合的总数。递归:class Solution {private: int helper(vector<int>& coins, int index, int amount) { ...原创 2019-09-21 16:49:08 · 168 阅读 · 0 评论 -
递归 回溯 leetcode 问题记录
leetcode 17:17. 电话号码的字母组合给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。接口:class Solution {public: vector<string> letterCombinations(string digits) { ...原创 2019-09-15 16:53:18 · 192 阅读 · 0 评论