Leetcode每日一题打卡
蛋蛋只要变强不要秃
此行莫恨天涯远,咫尺理塘归去来。
展开
-
Leetcode每日一题打卡
315.计算右侧小于当前元素的个数原题离散化树状数组:要计算一个区间中小于某个元素的个数和,可以先看每个元素的个数。比如,对于示例数组[5,2,6,1],就有如下散列表:nums: 0 1 2 3 4 5 6 7 8 9count: 0 1 1 0 0 1 1 0 0 0要计算某个元素右侧小于它的总和,使用树状数组来存储每个元素的情况,从右到左遍历原数组,先计算出当前元素右侧小于它的元素个数,写入结果数组,再讲当前元素插入树状数组,完成遍历后,再反转结果数组,就得到了目标结果。但是,由于数组中可原创 2020-07-11 10:18:16 · 211 阅读 · 0 评论 -
Leetcode每日一题打卡
309.最佳买卖股票时机含冷冻期原题动态规划解题:每天持股状态有三种:有股票、无股票且在冷冻期、无股票且不在冷冻期。这三种状态,都和前一天的三种状态有关。有股票情况:可能是前一天持有股票的情况或者是前一天买入的股票;无股票且在冷冻期:前一天卖出股票;无股票且不再冷冻期:前一天就是无股票且不在冷冻期或前一天是无股票但在冷冻期。代码如下:class Solution {public: int maxProfit(vector<int>& prices) { i原创 2020-07-10 10:01:32 · 287 阅读 · 0 评论 -
Leetcode每日一题打卡
面试题17.13.回复空格原题要找到最少的未确定的字符数,使用动态规划的方法,用数组dp[i]来确定截止位置i的未确定字符数。遍历无空格语句sentence,对于第i个位置,未确定字符数为dp[i]=dp[i-1]+1,然后再判断,是否存在j,使得区间(i,j)中的字符串存在于字符串表(即字典)中,如果存在,那么dp[i]=min(dp[i],dp[j-1]),最后返回dp[sentence.size()]。那么,现在的问题是,如何确定一个字符串是否在字典中呢?这里采用Rabin-Karp字符串编码的原创 2020-07-09 10:29:35 · 282 阅读 · 0 评论 -
Leetcode每日一题打卡
面试题16.11.跳水板原题已知共有k块板,每块板板长可能是shorter或者longer,要求得到从小到大的顺序,也就是说板的组合中longer长度板的长度从0增加到k,那么shorter板的长度就是从k减少到0class Solution {public: vector<int> divingBoard(int shorter, int longer, int k) { if(k==0) return vector<int>{};原创 2020-07-08 10:00:02 · 129 阅读 · 0 评论 -
Leetcode每日一题打卡
112.路经总和原题方法一:广度优先搜索,记录每一个结点的根节点到该节点的值,一层一层计算,利用两个栈,分别记录当前访问结点以及当前的和。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {原创 2020-07-07 09:29:14 · 124 阅读 · 0 评论 -
Leetcode每日一题打卡
63.不同路径Ⅱ原题根据题意不难看出,这是一道动态规划的题目,利用函数f(i,j)可以记录从原点(0,0)到点(i,j)的路径总数,已知机器人只能向左和向下移动,若点(i,j)有障碍(即obstacleGrid[i][j]=1),则f(i,j)=0,否则,则f(i,j)=f(i-1,j)+f(i,j-1)。由于第(i,j)位置的路径只和第(i-1,j)以及第(i,j-1)位置有关,可用滚动数组优化内存空间。class Solution {public: int uniquePathsWith原创 2020-07-06 10:22:33 · 155 阅读 · 0 评论 -
Leetcode每日一题打卡
108.将有序数组转换为平衡二叉树原题采用中序遍历,中间位置的数值作为根节点,左边(left)即是左子树,右边(right)是右子树,递归计算出搜索二叉树,在left>right时返回空指针。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val原创 2020-07-03 09:10:56 · 125 阅读 · 0 评论 -
Leetcode每日一题打卡
378.有序矩阵中第k小的元素原题不懂就问系列,求解答:为什么这其中得到的left可以保证还是矩阵中的元素?原题参照官答的理解如下:利用矩阵同一行右边元素一定小于左边元素以及同一列下方元素一定小于上方元素的特性,可以确定,在矩阵内任意子块里,右下角元素大于这个子块里的每一个元素。这样给定一个值mid,可以在矩阵中查找小于等于mid值的元素的总数——通过函数isLeft()实现。在函数kthSmallest()中,使用二分查找,找到符合条件的值。代码如下:class Solution {publi原创 2020-07-02 16:22:28 · 524 阅读 · 0 评论 -
Leetcode每日一题打卡
718. 最长重复子数组原题首先想到的就是暴力法:对数组A的遍历作为外循环,对数组B的遍历作为内循环,其中再嵌套while语句查找重复子数组,这样一来,时间复杂度为O(n^3),然后进行优化。动态规划方法,在表m*n(其中m=A.size(),n=B.size())中,dp[i][j]取决于A[i]是否等于B[j],若等于,则dp[i][j]=dp[i-1][j-1]+1,否则就等于0。class Solution {public: int findLength(vector<int原创 2020-07-01 08:51:19 · 274 阅读 · 0 评论 -
Leetcode每日一题打卡
剑指Offer09.用两个栈实现队列原题根据栈先进后出和队列先进先出的不同特点予以以下实现,使用栈s1记录队列尾部元素,每次插入操作可以直接压入栈s1中;在删除元素时,为了删除头部元素,使用栈s2维护头部元素。当s2不为空时,直接弹出栈顶元素即可。当s2为空时,就将s1中元素一次弹出而后压入s2中,实现顺序的反转,s2栈顶元素就是队列的头部元素。当栈为空时,返回-1。class CQueue { stack<int> s1;//记录队列元素(栈顶为尾部) stack<原创 2020-06-30 07:59:47 · 150 阅读 · 0 评论 -
Leetcode每日一题打卡
215.数组中的第K个最大值原创 2020-06-29 08:36:57 · 295 阅读 · 0 评论 -
Leetcode每日一题打卡
209.长度最小的子数组原题双指针用start和end两个指针指向子数组的开始和结束位置,当子数组的和小于目标和s时右移右指针end,直至子数组和大于等于s,此时,更新最短子数组长度,右移左指针,缩短数组长度,直至end走到数组末尾为止。class Solution {public: int minSubArrayLen(int s, vector<int>& nums) { int start=0, end=0, ans=INT_MAX;//初始化,开原创 2020-06-28 09:25:42 · 185 阅读 · 0 评论