自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 「数组」线性枚举(遍历)/ LeetCode 1464(C++)

给你一个整数数组nums,请你选择数组的两个不同下标i和j使取得最大值。请你计算并返回该式的最大值。12如果选择下标 i=1 和 j=2(下标从 0 开始),则可以获得最大值,(nums[1]-1)*(nums[2]-1) = (4-1)*(5-1) = 3*4 = 12。16选择下标 i=1 和 j=3(下标从 0 开始),则可以获得最大值 (5-1)*(5-1) = 16。

2024-07-13 20:32:34 310

原创 力扣第46题:全排列 库函数next_permutation与sort介绍()

next_permutation可以将区间内的值向降序排列演替一步,一直到区间变为降序排列位置。在这个过程中会生成整个区间的全排列,如果区间已经是降序排列,那么返回false值,否则返回true值。定义ans保存答案,先利用sort进行升序排序,(否则next_permutation只产生当前状态之后的排列而不是全排列),初始状态压入ans之后循环生成答案即可。(最后一次循环会生成降序排列(此时返回true),之后再次进入循环才返回false所以不会丢答案)sort函数可以将区间内进行升序排列;

2024-07-10 22:24:58 181

原创 力扣第70题:爬楼梯 动态规划DP入门(C++)

我们开始遍历,从i=3开始,我们对ans[i]施加状态转移方程ans[i]=ans[i-1]+ans[i-2],什么意思呢?走到第i个台阶的方法是走到第i-1个台阶的方法和第i-2个台阶的方法之和。我们分割原始问题为多个子问题,在遍历数据的过程中,如果能根据之前得到的信息动态解决当前的子问题,那么就可以在线性时间内解决很多需要多次遍历的问题。对于本题目,他的dp表中ans[0]=0,ans[1]=1,ans[2]=2,此为初始状态。本题中定义ans[i]为dp表,表示走到第i个台阶的方法数。

2024-07-09 14:22:44 254

原创 「字符串」Manacher算法(马拉车)/ LeetCode 05(C++)

在进行遍历的同时维护中心c,如果某字符在c的屋檐下,那么可以使用回文串的对称性质来避免重复的暴力扩散(毕竟为了得到c的回文长度时我们进行过暴力扩散了),这就是Manacher算法的思想。这是因为如果r[i]==r[ii],当初暴力扩散r[c]的时候得到的结果不可能使r[ii]超出r[c],r[i]==r[ii]时得到的r[c]长度即为情况1)我们发现ii的回文长度被c的回文长度完全覆盖,这意味着i的回文长度和ii是相等的,那么直接r[i]=r[ii]即可快速得到i的回文长度。至于i>c+r[c]-1?

2024-07-09 13:16:01 1685

原创 力扣第19题:删除链表的倒数第N个结点 记忆化存取(C++)

遍历结束后,访问address中下标为address.size()-n-1的位置,他是第n个结点的上一个节点(注意address的长度比原链表长度大1个节点,address[0]是我们申请的新头结点),将address.size()-n位置的的next指针与之连接,即抛弃了address.size()-n这个节点。构造vectoraddress(1,ans),它当前长度为1,存入了我们新申请的头结点。申请一个新的头结点,与原始链表相连,防止空链表数据的输出异常。

2024-07-08 16:04:56 383

原创 力扣第7题:整数反转 字符串函数综合运用(C++)

strcmp(char *str1,char *str2)按字典序逐个比较str1和str2,到某个字符时str1大于str2则返回正数,完全一致则返回零,否则返回负数(与长度无关,只取决于对应位置的字符大小关系,如"ab"大于"aaa")reverse(a或begin(),a+n或end())将容器a到a+n(或begin到end的左闭右开区间的内容翻转)stoi(char *str)将由str[0]开始的完全由数字和正负号组成的子串转换为其书面意义上的数字。中的数字部分反转后的结果。

2024-07-06 22:59:12 328

原创 力扣第22题:括号生成 深度优先搜索(DFS)和它的优化(C++)

对于这道题目,DFS一开始接收到空字符串,然后进入函数体后判断剪枝情况(我们可以利用已知信息来判断继续向下探还能否得到结果的可能性),然后分别递入下一级DFS(两个分支分别加上左括号'('和右括号')')。想象一个矿井,从地面到井底有多层平台,每层平台都能从此处向下连接到一个不同的矿底,我们先一路探到底,发现最底部无矿后再向上爬一个平台,然后走向这个平台连接的矿底。我们定义l和r记录左右括号的当前数量,如果 右括号多于左括号||右括号多于n个||左括号多于n个 都不可能得到一个拥有全部由小括号的字符串了。

2024-07-06 21:52:02 324

原创 力扣第6题:Z字形变换 交替V和Λ规律法(C++)

我们利用两层循环逐层求解即可,外层循环表示当前层,内层循环交替变换A和Λ(注意i==0始终为V和inumRows-1始终为Λ,两种情况不变换)我们画V字时,坐标移动长度=(2numRows-1)-2(i+1)+1 (最大V字的长度-缩短的长度+(当前在i位置不算)),以从上往下、从左到右进行 Z 字形排列。同样的,可以发现画Λ时坐标移动2i的长度。在线性时间内用找规律快速求解。关流后实测击败全世界。

2024-07-02 23:20:02 410

原创 力扣第4题:寻找两个正序数组的中位数 库函数nth_element介绍(C++)

nums1.insert(num1.end(),num2.begin(),num2.end()),将整个向量组2追加到向量1的后面,利用nth_element排中位数,判断向量长度的奇偶,选择直接输出中位数还是求平均值。它的作用是:将区间中第n小的元素排在第n个位置上(升序排列)(注意不是整个区间排序,这个函数只保证第n个元素的正确)例如 有数组a,则nth_element(a,a+2,a+4)会将前四个数中第3小的数排在第3位(合并数组 = [1,2,3] ,中位数 2。实测击败90.5%。

2024-06-30 23:00:51 195

原创 力扣第1题:两数之和 极简一遍哈希表解法(C++)

unordered_map是c++提供的stl模版,提供一对一的键值对映射,对于一个unordered_maphash,hash[key]将会访问到这个key所对应的值。我们注意到一个性质:对一于一个未录入map的key值,直接写下如下代码hash[key]将会插入这个key并将hash[key]初始化为0,有了这个性质,我们就可以耍点花招来判断之前是否录入过key。我们用hash[a]=b表示数组中的a出现在b位置上,即翻转了原数组的键值对关系。实测击败97.7%。

2024-06-30 03:23:26 215

空空如也

空空如也

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

TA关注的人

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