第一章数组part02今日花费时间较多,在第二题的边界判定上消耗时间较多,应多注重细节。LeetCode977有序数组的平方Easy题目链接:977有序数组的平方思路:1.考虑到数组可能有负数有正数,它们的平方的大小都是从两边到0逐渐减小,所以可以设置两个指针从两边到中间运动,不断判断指针位置处两个数的大小,将较大的数从后往前放入数组res中。完整C++代码如下://时间复杂度:O(1)//空间复杂度:O(1)classSolution{public:vectorint>sortedSquares(vectorint>&nums){intlen=nums.size(); intl=0,r=l
LeetCode513找树左下角的值题目链接:找树左下角的值思路比较容易想到使用层序遍历,找到最后一层第一个节点即可。代码classSolution{public:intfindBottomLeftValue(TreeNode*root){queueque;if(root!=NULL)que.push(root);intresult=0;while(!que.empty()){intsize=que.size();for(inti=0;ival;//记录最后一行第一个元素if(node->left)que.push(node->left);if(node->right)que.push(nod
我的代码思路是先创建一个新整型数组arr,然后将nums1和nums2中的数存入arr中。(存入后代码是无序的,例如leetcode给出的第一种情况,arr数组中应该是{1,3,2})易错点:但在使用循环存入时注意,arr的元素个数应该是nums1Size+nums2Size,因此存入时要小心,不要出现数组某一地址重新赋值的状况。本题的难点在于排序和判断中位数算法,分为了偶数个数字与奇数个数字两种中位数算法,但只需将这两个功能实现,本题便迎刃而解了。 一.排序方法: 本题笔者能立即想到的排序方法共有两种:选择法排序、冒泡法排序。笔者在本文中会将两种排序方式一一讲述,读者可以选择最适
动态规划动态规划之第N个泰波那契数/三步问题动态规划LeetCode题目第N个泰波那契数求解1求解2(滚动数组)三步问题求解1求解2(滚动数组)动态规划 如果问题是由重叠的子问题构成的,那就可以用动态规划(dynamicprogramming)来解决它。 在求解动态规划问题的时候,我们需要思考以下5个步骤:状态表示(这是最重要的):我们会创建一个dp表,将较小问题的解放在表中,这样我们就会得到原始问题的解,所以状态表示就是清楚dp表里面某个位置所表示的含义。状态转移方程(最难的):也就是从题干中找到关于dp[i]的等式。初始化:填表时,保证不越界。当求解问题时,需要知道较小问题的解,较小问
刷题1544.整理字符串思路一(模拟栈速解版)思路二(原地算法巧解版)思路三(C++栈版)Thanks♪(・ω・)ノ谢谢阅读!!!下一篇文章见!!!1544.整理字符串来看题目描述我看到本题的第一想法是双指针法,但是我所构想的逻辑无法达到目的,具体来说我采用前后指针,依次前进,然后满足条件就跳过,这样就导致会忽略许多满足的结构,就让我十分头疼,调试了半天还是不行,甚至想要使用三指针,四指针…服啦!结果表明都是不行的。下面来一起看看正确解法吧思路一(模拟栈速解版)这个和括号匹配问题很像,把字符串依次入栈,然后满足条件的就一起消除,主要就用到栈的压栈操作和取栈顶操作。这样一一匹配就能达到要求。来看
算法沉淀——动态规划之回文串问题01.回文子串02.最长回文子串03.分割回文串IV04.分割回文串II05.最长回文子序列06.让字符串成为回文串的最少插入次数01.回文子串题目链接:https://leetcode.cn/problems/palindromic-substrings/给你一个字符串s,请你统计并返回这个字符串中回文子串的数目。回文字符串是正着读和倒过来读一样的字符串。子字符串是字符串中的由连续字符组成的一个序列。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。示例1:输入:s="abc"输出:3解释:三个回文子串:"a","b","c"示例
算法沉淀——动态规划之子序列问题01.最长递增子序列02.摆动序列03.最长递增子序列的个数04.最长数对链01.最长递增子序列题目链接:https://leetcode.cn/problems/longest-increasing-subsequence/给你一个整数数组nums,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组[0,3,1,6,2,2,7]的子序列。示例1:输入:nums=[10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是[2,3,7,101],因此长度为
LeetCode35.搜索插入位置题目链接代码题目链接https://leetcode.cn/problems/search-insert-position/代码classSolution{public:intsearchInsert(vectorint>&nums,inttarget){intleft=0;intright=nums.size()-1;while(leftright){intmiddle=left+(right-left)/2;if(nums[middle]>target){right=middle-1;}elseif(nums[middle]target){left=mid
LeetCode704.二分查找题目链接代码题目链接https://leetcode.cn/problems/binary-search/description/代码classSolution{public:intsearch(vectorint>&nums,inttarget){intleft=0;intright=nums.size()-1;while(leftright){intmiddle=left+(right-left)/2;if(nums[middle]>target){right=middle-1;}elseif(nums[middle]target){left=middle+
1.误区:不能直接对数组排序再求解子集,因为那样就改变了原有数组的顺序2.树形结构:一个一个取数,然后保证是递增序列,且不能重复。(数层上不可以重复取,树枝上可以重复取)收集的结果不光是叶子节点。所以注意两点:数层节点去重、满足递增条件3.代码实现:(去重方法:记录本层递归用到了哪些元素,不要重复)