随笔分类 - 力扣
找出与数组相加的整数Ⅰ&Ⅱ
摘要:3131.找出与数组相加的整数Ⅰ 数组长度相等,元素一一对应。题目又保证答案一定存在,只需将两个数组从小到大排序,元素之差一定相等。所以只需求一组元素之差即可。不妨取两个数组的最小值之差。因此无需排序。 class Solution { public: int addedInteger(vector
回溯问题
摘要:目录一、子集型回溯17.电话号码的字母组合78.子集131.分割回文串257.二叉树的所有路径784.字母大小写全排列LCP 51.烹饪料理二、组合型回溯77.组合216.组合总和Ⅲ22.括号生成39.组合总和三、排列型回溯46.全排列 参考资料:回溯算法套路 一、子集型回溯 17.电话号码的字母组
反转链表
摘要:注意:反转结束后,从原来的链表上看, 指向反转这一段的末尾, 指向反转这一段后续的下一个节点。 206.反转链表 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListN
162. 寻找峰值
摘要:题目链接: 法一、暴力 class Solution { public: int findPeakElement(vector<int>& nums) { int n = nums.size(); if (n == 1) return 0; if (n == 2) { if (nu
2517. 礼盒的最大甜蜜度
摘要:题目链接: 最小化最大值 二分答案 找左性质的右边界,所以最后二分结束后返回的是 猜一个答案 ,两件商品价格相差 表示差距的最小值维持在 ,可以选择当前商品。统计选择的商品数量,若商品数量小
2439. 最小化数组中的最大值
摘要:题目链接: 看到“最小化最大值”想到二分答案。我们猜测一个上界 , 越大越符合条件,越小越不易符合条件,满足单调性。由于当前维护的是数组经过操作是否满足最大值为 ,可以从后往前遍历,遇到比 大的
滑动窗口
摘要:滑动窗口使用前提: 连续子数组。 有单调性。本题元素均为正数,这意味着只要某个子数组满足题目要求,在该子数组内的更短的子数组同样也满足题目要求。 一、不定长滑动窗口(求最短/最小) 209.长度最小的子数组 class Solution { public: int minSubArrayLen(in
位运算
摘要:1、__builtin_popcount 的使用 1.1 1的数量 #include <bits/stdc++.h> using namespace std; using i64 = long long; void solve() { int x; cin >> x; int t = __built
相向双指针
摘要:167. 两数之和Ⅱ-输入有序数组 class Solution { public: vector<int> twoSum(vector<int>& numbers, int target) { vector<int> ans; int n = numbers.size(); int l = 0,
2498. 青蛙过河 ll
摘要:题目链接: 本地要求最大值的最小值,乍一看想的是二分,但仔细想发现是一个思维题。 通过手模可以发现,间隔跳一定是最优的。 如图所示, 。 我们每次都去找间隔为 的元素并求出其差,然后枚
14. 最长公共前缀
摘要:题目链接: 实现一、 求 多串的最长公共前缀,首先想到 。 class Solution { public: static const int N = 210; int ch[N][26], idx, cnt[N]; void insert(strin
2351. 第一次出现两次的字母
摘要:题目链接: 自己的做法: class Solution { public: char repeatedCharacter(string s) { int n = s.size(); vector<int> v(28); vector<pair<char,int> > p; for (int i =
2320. 统计放置房子的方式数
摘要:题目链接: 本题和198.打家劫舍有异曲同工之妙。 由于街道两侧互不干扰,因此可以考虑只计算出一侧的状态,然后利用乘法原理即可。 状态划分时,考虑第 个地块选或不选: 若选,则第 个地块不能选,第 个地块可选可不选。 若不
377. 组合总和 IV
摘要:题目链接: 本题是爬楼梯的又一变式。 分析样例可知,每次选择的都可以是 中的任一个数,而最后选择完毕的数之和等于 . 可以认为我们每次从 中选一个数作为往上爬的台阶数,问爬 个台阶有多少种方
2466. 统计构造好字符串的方案数
摘要:题目链接: 本题其实是爬楼梯这道题的变式。 题目要求长度在 之间的好字符串个数,那我直接把所有长度的好字符串个数搞出来,再取长度在这个区间的相加就完事了。 设 表示构造长为 的字符串的方案数,也即长为 的好字符串的
1039. 多边形三角剖分的最低得分
摘要:题目链接: 实现一、记忆化搜索 class Solution { public: int minScoreTriangulation(vector<int>& values) { int n = values.size(); int memo[n][n]; memset(memo, -1, size
516. 最长回文子序列
摘要:题目链接: 本题考察区间 。 设 表示子串 中的最长回文子序列的长度。 思考状态转移方程。因为是判断回文的问题,考虑首尾元素是否相同。 若首尾元素相同,则考虑去掉首尾元素之后子串的最长回文子序列的长度 + 2(首、尾元素各一个) 反之若首
198. 打家劫舍
摘要:题目链接: 本题考察动态规划。 实现一、递推 表示考虑下标从 的房屋最多能抢劫到的金额。 思考状态转移时考虑第 个房屋抢或不抢。 由于不能抢劫相邻的房屋,若抢了第 个房屋,则第 个房屋就不能抢,再抢只能从 \(i-2