自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 SMPL参数详解

下面三个链接,是我觉得讲smpl比较好的中文网站。

2022-10-20 12:28:37 1160 1

原创 7.24(今天开始重新写文章!!!)动态规划139

代码】7.24(今天开始重新写文章!!!)动态规划139。

2022-07-24 18:34:54 220

原创 7.13 279.完全平方数

然后从三重循环优化到二重循环从二重循环优化到一重循环

2022-07-13 17:02:12 87

原创 7.11 377. 组合总和 Ⅳ

这个题目代码随想录讲的不是很清楚,因为排列和组合是不一样的。排列不能用518零钱兑换的思路来解决。我们要用构成组合的组合数来解决即在最后一个循环遍历数组然后降维

2022-07-11 12:11:50 100

原创 7.3(动态规划,518零钱兑换II,322. 零钱兑换)

这道题目困扰了我一天了,我循序渐进做一下这道题目,这道题目是一个完全背包问题。先从最原始的方法讲起。也是复杂度最高的做法,枚举第i个物品选择0个,1个,2个一直到k个等等。我们从初始化讲起,dp[0][0] = 1表示的含义是,不选任何面值的硬币从而凑成价值为0的方法有一种。然后进行优化,优化的方式也是数学证明版的优化。所以对于此题,dp[i][j] = dp[i-1][j]+dp[i][j-coins[i-1]]。在这里我要解答一个我自己疑惑了一上午的问题,为什么我取第i个硬币,要用coins[i-

2022-07-03 20:31:17 111

原创 6.28(474,动态规划难,今天做了一道)

474. 一和零

2022-06-28 16:37:20 68

原创 6.27动态规划(494)

下面还有一个用二维数组做的,想了一天,下次再想想

2022-06-27 16:04:33 60

原创 6.23(343,96)

令dp[i]表示整数i对应的最大乘积,那么dp[i]的值应是dp[j](i-j),j属于[1,i-1]的最大值,同时注意dp[i]对应的值是经过拆分了的,所以还应判断两个数拆分的情况,即j(i-j)的值,取最大即可。因为dp[j]*[i-j]肯定是至少三数以上的相乘96. 不同的二叉搜索树...

2022-06-24 12:51:42 104

原创 6.22(62.不同路径,63不同路径)

63不同路径class Solution {public:int uniquePathsWithObstacles(vector& obstacleGrid) {//确定dp数组以及下表的含义int m = obstacleGrid.size();int n = obstacleGrid[0].size();};

2022-06-23 08:54:32 58

原创 6.21动态规划(因为贪心好多题目都有动态规划算法,所以先刷动态规划。70,509,746)

思来想去,先刷动态规划吧.因为贪心算法的每个题目都有动态规划的算法.所以打算先刷动态规划,然后把贪心算法再来用动态规划算一次509. 斐波那契数

2022-06-21 10:04:31 53

原创 6.16回溯专题(leecode491,leecode90)

这道题目是一道绝世好题我认为,因为之前的去重逻辑在这道题并不能使用,我也卡了好久,先上代码先看上述代码,当我用测试用例测试的时候发现了问题我们发现用这种去重逻辑[1,3]出现了两遍,这是为什么呢?,因为我们没有对数组及逆行排序。nums[3] == nums[2]判断时我们就会重复判断。所以作者建议用unordered_map判断,这样在不排序的情况下可以实现去重!!!谨记90. 子集 II...

2022-06-16 16:58:59 61

原创 6.15回溯专题(leecode93,leecode78)

78. 子集

2022-06-15 12:17:17 55

原创 6.14回溯专题(leecdoe39,

这几天有点偷懒了,所以写的少了。今天以后每天都会写40. 组合总和 II具体的解题方法可以参照代码随想录,我觉得非常好,嘿嘿代码随想录下面的方法介绍不同used数组来解决

2022-06-14 17:41:18 45

原创 6.12回溯专题(leecode17,leecode216)

216. 组合总和 III

2022-06-12 12:06:09 62

原创 6.10回溯专题day1组合问题(77. 组合)

还有一种优化方法所以,可以剪枝的地方就在递归中每一层的for循环所选择的起始位置。如果for循环选择的起始位置之后的元素个数 已经不足 我们需要的元素个数了,那么就没有必要搜索了。可以仔细理解一下这块可以理解下n-(k-path.size())+1这里,假设n=4,k=3.可以把这个理解为从哪里开始搜索。如果搜索到,path中有2,那么就要从4-(3-1)+1=3开始搜索都比较合理。...

2022-06-11 12:07:04 55

原创 6.5二叉树(654.最大二叉树)

今天除了这道题,还把昨天的题目优化了一下,感觉还是不错的哦。

2022-06-05 14:35:17 43

原创 6.4二叉树专题(112.路径总和,113路径总和ii,106. 从中序与后序遍历序列构造二叉树)

113. 路径总和 II这道题跟上面如出一辙,我用同样的递归方法解决106. 从中序与后序遍历序列构造二叉树这道题我的做法有一点繁琐,明天会再做一下

2022-06-04 16:25:15 69

原创 6.2二叉树专题(404左叶子之和,513. 找树左下角的值)

算法

2022-06-02 22:13:35 52

原创 6.1二叉树专题(110,257)

此题我们首先需要明白平衡二叉树的定义,就是一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1.记住是每个子树先上代码,然后以图中的子树来分析257. 二叉树的所有路径用递归的写法来写

2022-06-01 11:59:25 58

原创 5.31二叉树专题(201对称二叉树,572)

101. 对称二叉树本文采用递归写法,还是比较简单的。分情况判断就行/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x),

2022-05-31 15:03:11 50

原创 5.29二叉树层序遍历专题(102,107,199,637,429,515,116,117,104,111)

102. 二叉树的层序遍历/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(

2022-05-29 12:27:02 84

原创 5.27二叉树专题(144, 145,94)

今天做的题目前两天也有在研究,只是前两天并没有整理。今天来整理一下二叉树的三种遍历的迭代写法144二叉树的前序遍历/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * Tre

2022-05-27 14:59:03 42

原创 5.24大顶堆,小顶堆和重载(347. 前 K 个高频元素)

347. 前 K 个高频元素class Solution { //此题设计一个优先队列来做,优先队列会把入队的元素进行排序,大的排在前面,小的排在后面 //并且我们可以重写优先队列的比较方式 struct comp{ //一定注意书写的时候,跟平时的比较顺序是反的 bool operator()(const pair<int, int> left, const pair<int, int> right){

2022-05-24 18:52:15 65

原创 5.22 leecode53.最大子数组和

今天没有搞专题,去leecode上随意刷了点题目,但是又被一道题目难住了。53. 最大子数组和刚开始想的是滑动窗口方法,但是做了一下午才反应过来根不不能用滑动窗口来做,因为要维护的sum可能有负值最后看了一位老哥的解答,豁然开朗当我们要找到一个数组内的连续子数组的最大值时,我们肯定想要找一个正数开头的串,因为只有正数开头,才有可能是最大。如果是正数开头后面又负数的话也没有关系,因为正数+负数可能还是正数,所以只有当,一个以正数开头的串的和为负时,我们会重新选择新的串子。这时最大值已经被保存下来了。

2022-05-22 18:23:11 64

原创 5.20栈与队列(232. 用栈实现队列,225. 用队列实现栈,15.三数之和,239. 滑动窗口最大值)

leecode232. 用栈实现队列今天有些偷懒了,招了两个简单题做一下。本来是应该去挑战三数之和和四数之和的。class MyQueue {public: stack<int> s_in; stack<int> s_out; MyQueue() { } //压入栈的时候,把所有的元素压到s_in中 void push(int x) { s_in.push(x); } //输

2022-05-20 11:51:00 73

原创 5.19KMP专题(leecode28. 实现 strStr(),leecode459. 重复的子字符串)

leecode28. 实现 strStr()切记,kmp的本领就是看一个字符串中是否出现了另外一个字符串其实要是让我说,我觉得kmp算法使妥妥的hard题目了。但是我觉得leecode可能为了让我们更好的掌握kmp算法,才把他设成easy题目。kmp算法其实就是求公共联系字串的,虽然有些难,但是在看过两遍之后,我自己还是写出来了。我还是参考[代码随想录版本,并且这个版本中有一个卡哥的先上讲解,我觉得讲的非常清楚](https://programmercarl.com/0028.%E5%AE%9E%E

2022-05-19 15:28:15 77

原创 5.17字符串(151. 颠倒字符串中的单词,剑指 Offer 58 - II. 左旋转字符串,14. 最长公共前缀)

leecode151. 颠倒字符串中的单词这个题目我第一反应就是用堆和栈来做,因为反转的东西都可以用堆栈来做。class Solution {public: string reverseWords(string s) { stack<string> st; string dstStr; char* tmpStr = strtok(s.data(), " "); while(tmpStr != NULL){

2022-05-17 16:07:29 60

原创 5.15字符串专题(剑指 Offer 05. 替换空格)

剑指 Offer 05. 替换空格此题,刚开始的想法也是使用一些额外空间,用空间换时间class Solution {public: string replaceSpace(string s) { //老规矩,先分析,申请额外空间的话,会比较好做。 string n1; for(auto nums:s){ if(nums==' '){ n1.push_back('%');

2022-05-15 15:39:40 54

原创 5.16字符串专(leecode344. 反转字符串,leecode541. 反转字符串 II)

leecode344. 反转字符串class Solution {public: void reverseString(vector<char>& s) { if(s.size() != 0){ int i = 0; int j = s.size()-1; while(i <= j){ char tmp = s[i]; s[i] = s[j];

2022-05-14 14:04:05 134

原创 5.13哈希表(leecdoe454. 四数相加 II)

leecode454. 四数相加 II参考解题思路代码随想录class Solution {public: int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) { unordered_map<int, int> cnt; //这个

2022-05-13 22:34:30 75

原创 5.12哈希表专题(leecode.349. 两个数组的交集, leecode202.快乐数,leecode1.两数之和)

leecode349.两个数组的交集这个题目有两种解法,第一种解法是直接用unordered_set来解决,因为他可以自动排序并且去重。而且查找复杂度很低class Solution {public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { unordered_set<int> one(nums1.begin(), nu

2022-05-12 15:02:39 124

原创 5.11哈希表专题(leecode242,leecode49, leecode383)

leecode242. 有效的字母异位词采用hash表写法,因为26个字母会对应不同的索引,参考代码随想录hash表写法class Solution {public: bool isAnagram(string s, string t) { bool result = true; int index[26] = {0}; for(int i = 0; i < s.size(); i++){ index[s[i]-'

2022-05-11 15:19:50 108

原创 5.10滑动窗口专题(leecode438,leecode567, leecode904)

leecode438. 找到字符串中所有字母异位词第一次写这道题,确实写了很久,虽然在leecode上面也过了,但是时间比较久class Solution {public: vector<int> findAnagrams(string s, string p) { int l = 0; int r = 0; vector<int> cnta(26); vector<int> cntb(26)

2022-05-10 15:05:01 115

原创 5.8/5.9滑动窗口专题(leecode209,leecode643,leecode1695,leecode3, leecode159)

今天做了一份滑动窗口的专题leecode209. 长度最小的子数组滑动窗口呢,说白了也是双指针问题class Solution {public: int minSubArrayLen(int target, vector<int>& nums) { int front_index = 0; int end_index = 0; int result = 1e9; while(end_index < n

2022-05-09 21:34:56 249

原创 5.7刷题记录(leecode剑指 Offer 29. 顺时针打印矩阵,leecode977. 有序数组的平方)

Offer 29. 顺时针打印矩阵很庆幸,自己写出来的。虽然写的有点久,但是还是通过递归的暴力解法写出来了class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { if(matrix.size() == 0) return {}; else { int hang = m

2022-05-08 13:47:02 131

原创 5.6刷题记录(leecode35.搜索插入位置,leecode34. 在排序数组中查找元素的第一个和最后一个位置,leecode69.x的平方根,leecode367. 有效的完全平方数)

leecode35.搜索插入位置这道题有一个要求,就是要求算法复杂度必须是logn。那么大家第一时间想到的应该就是用二分法做题但是这个题目还有个要求,就是要如果没有查询到位置,就要返回元素应该插入的位置。我们来模拟以下加入没有找到相应元素。因为题目有说列表是有序的。[1, 3, 5, 7]。假设我们的target是4,那么循环的left,right,middle应该为第一次:left = 0, right = 3, middle = 1; 3 < target;left = middle+1

2022-05-06 14:33:59 199

原创 5.5leecode刷题记录(leecode704.二分查找,leecode.27移除元素)

leeocde704.二分查找二分查找对于数组题目来说是比较基础的题目了。切记二分查找有两个前提才可以进行二分查找,一是数组中不能有重复元素,二是数组中的是升序排列的。二分查找的步骤如下,一定要谨记:1.找到数组左右两个端点2.找到中间点的值nums[middle]3.通过middle与target的比较来更新左右端点,切记在更新的时候一定要注意边界问题,因为这是整数二分问题。代码如下,还有题解class Solution {public: int search(vector<

2022-05-05 14:37:02 714

原创 5.4刷题(leecode面试题 02.07. 链表相交,leecode142.环形链表II)

leecode面试题 02.07. 链表相交此题一开始的想法也就是如下想法,朴素版做法。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ //如果是朴素版写法,class Solution {public: ListNo.

2022-05-04 13:05:31 887

原创 leecode刷题笔记5.3打卡(leecode206反转链表,leecode24两两交换,leecode19删除链表的倒数第n个节点)

题目链接:leecode206.反转链表第一种方法:双指针刚开始有点头铁,不知道下面这个方法的错误在哪里。最后充了会员调试后才看出来问题在哪里。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), n

2022-05-03 12:04:43 394

原创 leecode刷题笔记5.2打卡

链表题目链接:leecode203 移除链表元素在刚开始一共想了两种写法,但是第一种写法真的是一个很低级的错误,分类讨论头节点情况时。删除头节点时的操作,因为在第一次操作的时候总是报错,/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListN

2022-05-02 17:23:52 329

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除