![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
算法题解
一只菜狗汪
郑州轻工业大学在校生
展开
-
二分查找
1.简单的二分查找:704. 二分查找 - 力扣(LeetCode) (leetcode-cn.com)正常解法:class Solution {public: int search(vector<int>& nums, int target) { int l = 0,r = nums.size() - 1; while(l <= r){ int mid = (l + r ) >> 1; .原创 2021-11-09 16:49:10 · 3727 阅读 · 0 评论 -
节点个数为n的二叉搜索树的个数(动态规划)
地址:96. 不同的二叉搜索树 - 力扣(LeetCode) (leetcode-cn.com)动态规划解题:首先是定义dp数组,然后推导出递推公式,确定状态方程,确定遍历方式先把n(1-3)的树列出来寻找规律,节点为0按定义算二叉树,故算二叉搜索树可以看到n=2时,个数 = 左子树0个元素*右子树1个元素 +左子树1个元素*右子树0个元素从n=3可以看出,头结点为1、3时子树的排列方式与2相同,头结点为2时的子树排列方式与1相同头结点为1 = 左子树0个元素*右子树2个...原创 2021-12-02 20:08:15 · 1521 阅读 · 0 评论 -
位运算题目集
一、78. 子集 - 力扣(LeetCode) (leetcode-cn.com)记原序列长度为n,原序列中的每个数字在子集中有两种状态,1为存在,0为不存在,那么就可以表示为长度为n的0/1串class Solution {public: vector<vector<int>> subsets(vector<int>& nums) { vector<vector<int>> vet; .原创 2021-11-18 20:22:39 · 471 阅读 · 0 评论 -
动态链表反转(总结)
由于小编能力有限,递归反转链表还没整理,下面是一些常规反转写法1.:206. 反转链表 - 力扣(LeetCode) (leetcode-cn.com)使用头插法,后面的每一个节点都插到前一个节点前class Solution {public: ListNode* reverseList(ListNode* head) { if(head == nullptr || head->next == nullptr) return head; ...原创 2021-11-25 15:26:02 · 245 阅读 · 0 评论 -
排序集合
快速排序: 785. 快速排序 - AcWing题库先把该序列排好,然后利用一分为二递归#include<bits/stdc++.h>using namespace std;const int N = 1e6 +10;int q[N],n;void q_sort(int q[] , int l , int r){ if(r <= l) return ; int x = q[l ...原创 2021-11-11 11:23:14 · 194 阅读 · 0 评论 -
数组降维
地址:566. 重塑矩阵 - 力扣(LeetCode) (leetcode-cn.com)该题的解法为:以一维数组作为中间商,经一维数组的手把m行n列的数组转为r行c列的数组降为一维数组的原理为:由于j < n 故 i = x / n ; j = x % n;代码为:class Solution {public: vector<vector<int>> matrixReshape(vector<vector<int>...原创 2021-11-27 16:51:32 · 3586 阅读 · 0 评论 -
编辑距离(动态规划)
地址:72. 编辑距离 - 力扣(LeetCode) (leetcode-cn.com)模式识别:一旦涉及子问题,可以用自顶向下的递归和自顶向上的动态规划如果用动态规划来写的话,需要一些前置知识;即在word1后添加一个字符等于在word2后删除一个字符,那么就把字符串的修改总结为三种1:在word1后添加一个字符 2:在Word2后添加一个字符 3:修改Word1余Word2的最后一个字符动态规划四部曲: 1:确定dp数组及含义那么由于有两个字符串匹配必...原创 2021-12-06 19:15:13 · 695 阅读 · 0 评论 -
几何
地址:223. 矩形面积 - 力扣(LeetCode) (leetcode-cn.com)该题的核心为求重叠部分的面积: 核心:将两条水平边投影到x轴,将两条竖直边投影到y轴,计算重叠边长,从而计算重叠部分面积class Solution {public: int computeArea(int ax1, int ay1, int ax2, int ay2, int bx1, int by1, int bx2, int by2)...原创 2021-11-29 19:09:55 · 248 阅读 · 0 评论 -
贪心题目集
地址:55. 跳跃游戏 - 力扣(LeetCode) (leetcode-cn.com) 该题当时的思路为找到能跳到最长的位置是否能跳的最后,但没有考虑中间有零间断与后半部分隔开,但即使想到,当时也没有想到好的解决办法正确思路:循环求出改点之前能跳到的最大位置,用该位置比较,如果改为大于能跳到的最大位置,返回FALSE,如果无返回FALSE则返回TRUE代码:class Solution {public: bool canJump(vector<int>...原创 2021-11-27 23:49:13 · 77 阅读 · 0 评论 -
unordered_map 与map实用方法总结
1.遍历方式for(auto &[key,value] : map){ //key即first , value 即 second }2.插入方式void insert(string key, int val) { map[key] = val; //好处是能更改相同key的val值 } unordered_map<string,int>map = { {"key1",1},原创 2021-11-15 13:43:14 · 446 阅读 · 0 评论 -
快速幂模板
long long binpow(long long a , long long b){ if(b == 0) return 1; long long res = binpow(a,b/2); if(b % 2) return res*res*a; else return res*res; }原创 2021-12-05 11:37:19 · 181 阅读 · 0 评论 -
最长回文子串(动态规划)
传送门:https://leetcode-cn.com/problems/longest-palindromic-substring/dp[i][j]: 长度大于3的情况:i表示左边界,j表示右边界 如果dp[i+1][j-1]符合要求切s[i] == s[j]的话,那么i到j的字符串就满足要求 长度小于3的情况: s[i] == s[j] and j - i < 3;状态转移方程:dp[i][j] = (s[i] == s[j]) and (j - i &...原创 2021-10-30 17:58:53 · 80 阅读 · 0 评论 -
超级次方(快速幂思想)
地址:372. 超级次方 - 力扣(LeetCode) (leetcode-cn.com)乍眼一看a的b次方,还真没想起来快速幂,但由于这道题b的长度为2000,无法直接使用快速幂,但本质还是分治的思想,快速幂的思想为把b化为二进制,然后用位运算,如果为1则乘。由于b的长度过长,可以把b分为,b/10... , b/100,b/10,例如当b为二百是,先计算个位,然后十位,百位等。class Solution {public: int superPow(int a, ve..原创 2021-12-05 13:03:00 · 665 阅读 · 0 评论 -
C++ string实用总结
数字类型转为string字符串to_string(num);#include<bits/stdc++.h>using namespace std;int main(){ int n = 123456; string str = to_string(n); cout << str; return 0;}string字符串转为数字类型stoi(int),stol(long), stof(float), stod(double)#incl原创 2021-11-28 20:00:04 · 320 阅读 · 0 评论 -
杂题集(思维题)
地址:12. 整数转罗马数字 - 力扣(LeetCode) (leetcode-cn.com)该题需要理解清楚整数转罗马数组的规则: 1.特殊的六种需特殊表示 2.例如:30 = XXX由于规则的特殊性需要从先计算最高位,从高到低计算class Solution {public: string intToRoman(int num) { //牛逼之处:用数组记录且为从大到小 int values[]={1000,900,5...原创 2021-11-28 22:25:39 · 129 阅读 · 0 评论