自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 哈希表复习

题目:给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。=nums_set.end()) 说明能在nums_set找到指定的元素。它不管你元组是否重复,不管元组的元素是否重复,直接用哈希表unorder_map做,key存放value,第二个存放出现的次数;插入:map.insert(pair(nums[i],i));2.去重 好像想起来也不是很难。

2024-07-22 19:30:32 140

原创 完全背包 518||377

因此两个for循环颠倒没有关系;dp是相加的关系,不是取max。和0-1的区别是,不管是哪个循环都是正向遍历,并且i和j都是从0开始遍历。因此要先遍历背包再遍历物品;如果先遍历物品再遍历背包会重复,你算一下就知道了。求多少种零钱兑换的方式,本质是不考虑顺序的组合。这是考虑顺序的组合,也就是排列。当背包容量为0时,一种排列方式。当背包容量为3时,遍历物品。

2024-07-18 20:43:12 181

原创 0-1背包总结

y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。第i件物品的重量是weight[i],得到的价值是value[i]。注意:dp[i][j]:最多有i个0和j个1的strs的最大子集的大小为dp[i][j]。以上就是0-1背包的问题,方法用的都是滚动数组,滚动数组要注意的是遍历顺序:先物品后背包。j–) { // 遍历背包容量。这里的最大重量其实相当于背包能装的最大价值,因为石头的价值和重量是一样的。dp[j]表示的是容量为j的背包,所背的物品价值可以最大为dp[j]

2024-07-17 17:46:33 460

原创 343||96||0-1背包||416

心里要有一个表格,行表示物品,列表示书包容量,第一列就是书包容量为0时初始化全是0,第一行是当容量大于等于物品0的重量时初始化为物品0的价值,其他的全初始化为0;dp[i]+=dp[j-1]*dp[i-j](二叉搜索树的特性,左边有j-1个数,右边有i-j个数)dp[i][j]表示任意取物品0-i之间当书包容量为j时的最大价值。初始化:dp[0]、dp[1]没有意义、赋值为0;i从1开始遍历,j从1开始遍历,如果j大于物品i的重量,那么。dp想对了,dp[i]就是头节点为i的搜索树有几种情况。

2024-07-16 19:09:36 140

原创 968||动态规划509||70||746||62||63

在边缘有障碍时,从有障碍那一个格子开始后面全为0;在非边缘有障碍时,dp[i][j]保持0不变。递推关系:dp[i][j]=dp[i-1][j]+dp[i][j-1];初始化:第0排为1,第0列为1.因为第0排和第0列无法用递归公式推导出来。首先是定义三种状态,状态0是无覆盖,状态1是有摄像头,状态2是有覆盖。使用后序遍历,如果两个叶子节点都是2,那么根节点就是0。如果其中一个叶子节点有摄像头1,那么根节点就是2。dp的意义是到达dp[i][j]的位置总共有几条。dp:是爬上i要花费的最小值。

2024-07-15 20:22:26 92

原创 452||435||763||56||738

2、如果两个相邻两个区间没有重叠的部分,建树加1,具体有前一个区间的右边界和当前区间的左边界进行比较;否则就是有重叠,这时候更新当前区间的右边界,即取前一个区间和当前区间右边界最小值。2、更新左右区间,右区间=max(right,hash[s[i]-‘a’]),当right==i时,计算该区间长度,更新left=right+1;1、记录每个字母出现的最远位置,用一个for循环就能实现,就是hash[s[i]-‘a’]=i。修改思想就是,如果前一位比后一位大,就将前一位-1,后一位变成9。

2024-07-13 18:03:48 153

原创 122||55||45

先记录一下当前我在这个位置能跳的最远距离,这个算一步,然后当我跳到最远距离的时候看是否是最后一个位置,如果不是,那么我要更新最远距离,怎么更新呢,其实就是再加一步,跳到下一个格子,更新最远距离,如果我的最远距离涵盖了最后一个位置,这时候就可以返回步数了。变成cover,就是看cover能不能到数组的最后一个位置。那么我就会第三天-第一天=第三天-第二天+第二天-第一天。就变成每天的利润了,前提是每一天的股价要大于前一天的股价。比如说我第一天买,第三天卖是赚的。核心思想就是有赚我才会买卖。

2024-07-10 21:03:42 110

原创 51||37

用两个for循环取递归遍历,第一个是行,第二个是列,然后递归的时候又有一个for循环遍历k从0到9。在递归中,如果有哪个k符合条件就返回true,如果在单层递归遍历中,都没有k符合条件,那么返回false。在判断是否满足条件时,要求行不重复,列不重复,画粗线的9宫格里不重复。针对最后一个判断条件,用startrow=(row/3)*3来求k所在的第(k/3)个九宫格的起始行数,起始列数同理。首先是不能同行,然后不能同列,斜45和135不能有,这个判断条件要注意,差点写错了。把这个问题简化为一颗树。

2024-07-09 14:37:37 142

原创 491||46||47

和上一题一样,不同的是要加一个if判断条件,即i>0&&nums[i-1]==nums[i]&&used[i-1]==0,含义是存在相同元素,并且第一个元素已经被用了(如果used[i-1]==1说明正在被用,那么nums[i-1]和nums[i]的关系是树枝的关系,不是树层)因为数组不大,所以直接用一个向量used来记录数组中每个元素被用了没,被用了就true,在遍历之前先判断当前元素是否为true,如果是就continue,如果不是就继续遍历。在回溯之后,记得把当前元素的状态改为false;

2024-07-03 15:26:07 151

原创 复习数组704||27||977||59

笔试常考的题目,我觉得就是找到思路,代码实现不难。首先是确定绕圈的圈数n/2,这时候要判断如果n为奇数,那么中间的位置填的就是最大的值。在单圈中,坚持左闭右开的原则,每一条边的最后一个数字不遍历,这时候难点就是边界条件。注意:如果是等于的话,前面的数据也要移到后面去!否则会导致缺少一部分情况,计算超时。而l=mid+1或者r=mid-1 具体看是在哪个区间遍历。核心:更新mid,目的是为了更新left和right。

2024-07-02 14:22:37 132

原创 209||17||39||216||131

1、终止条件:就是隔板已经放到了最后面,可以把path推入到result里,我本来想的是要在这里判断是不是回文子串,但是如果把这个判断放在单层逻辑里,可以直接continue,就不用遍历剩下的情况,更快。要在树层的时候加一个判断:就是当i>index(也就是该数层的第一个元素已经被用了)并且(数组[i]==数组[i-1](前一个元素等于当前元素)的时候直接continue,不进行组合了;2、第二层遍历,因为题目说不要重复元素,所以你遍历完第一个元素的组合后,第二个元素的组合就不要再次考虑第一个元素了。

2024-07-02 11:22:09 219

原创 77组合||

1、终止条件:当path的大小==k的时候,将path推入result;2、用for循环嵌套递归(难)

2024-06-28 14:59:09 210

原创 669||108||538||704||27||977

1)判断是否小于low,若小于,把左子树剪切,但是右子树再次进入递归里裁剪,而不是将整个右子树返回,因为右子树里有不满足条件的。2)判断是否大于hight,若大于,把右子树剪切,左子树进入递归里裁剪。我觉得我递归来递归去有点头晕,做不出全部。3、左子树=递归返回;1、终止条件:遇到空值返回空值。

2024-06-27 10:37:31 68

原创 刷题0626

卡尔:利用二叉搜索树的特性(有序排列),如果当前节点值均大于p和q,就说明祖先在左边,为啥呢,因为如果再往右就会错过p和q;1)当前值比val大,就向左递归,当遍历到为空时,插入新节点,同时root->left此时为空,那么就让root->left等于返回的新节点,就能建立联系了。2)如果当前节点值均小于p和q,说明祖先在右边,往右边遍历,如果右边返回不为空,说明右边有最近祖先,返回右边。1)如果当前节点值均大于p和q,就说明祖先在左边,往左边遍历,如果左边不为空,说明左边有最近祖先,返回左边。

2024-06-26 16:52:59 203

原创 0625刷题

2)如果count>maxcount,那么maxcount=count,把之前存的result清空,因为是假的众数,然后再推进现在的节点值,这才是真的众数。1)更新maxcount:如果count==maxcount,则把数据推进result;2、求最小绝对值误差:有序数组中,相邻数字的绝对值误差是任意两个数字绝对值误差中最小的。1、将二叉树的节点值存入数组:传入递归函数为节点和数组,不输出。2)递归顺序:中序遍历,记住,函数不返回,并且需要传入数组。1)结束条件:遍历到空节点,返回。

2024-06-25 18:47:20 128

空空如也

空空如也

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

TA关注的人

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