首页 > 其他分享 >每日一结

每日一结

时间:2022-09-28 19:34:56浏览次数:76  
标签:数字 int max 每日 一结 数组 ans charAt

回文子串是要连续的,回文子序列可不是连续的

516. 最长回文子序列

解决本题一个很妙的做法就是,设置一个二维数组,行为给定字符串的最后一位,列每次的起始值为行+1。
这样做的好处,类似于倒着来。因为当前状态由前面的状态得来。而最终要求的是起始值为0,终值为n-1的那个位置的值。
for(int i = n - 1; i >= 0; i--) {
ans[i][i] = 1;
char a = s.charAt(i);
for(int j = i + 1; j < n; j++) {
char b = s.charAt(j);
if(a == b) {
ans[i][j] = ans[i + 1][j - 1] + 2;
}else {
ans[i][j] = Math.max(ans[i + 1][j], ans[i][j - 1]);
}
}
}
return ans[0][n - 1];


416. 分割等和子集

由题意可得,如果所有数之和为奇数,那么可以直接返回false,如果数组中最大值大于所有数之和的一半,也可直接返回false。
设置一个二维数组,第一个数字表示取出数组中哪些数字。第二个数字表示这些数字需要达到的和的值。
那么初始化,如果当前需要达到的值的和为零的话,只要不取数字即可,所以都可置为true。
只有第零个数字的时候,只能达到nums[0]的值,所以ans[0][nums[0]] = true。
之后的遍历中,如果取到的当前数字小于或者等于所需达到的和的值,可以选择要当前数字或者不要:
ans[i][j] = ans[i - 1][j] | ans[i - 1][j - num];//没选 | 选
否则:
ans[i][j] = ans[i - 1][j]

1143. 最长公共子序列 & 718. 最长重复子数组

3 2 1 4 7 0 0 0 0 0 0
1 0 0 1 0 0 0 0 0 0 0 0
2 0 1 0 0 0 0 0 0 0 0 0
3 1 0 0 0 0 0 0 0 0 0 0
2 0 2 0 0 0 0 0 0 0 0 0
1 0 0 3 0 0 0 0 0 0 0 0
解决这两道题的一个【小技巧】将二维数组多一行多一列
这两道题,最大的区别是,前者求公共子序列(不需要连着),后者求数组(需要连着)。
所以前者在当前位置不满足条件的时候,依旧要改变推移其状态,而后者不需要。
前者:
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
if(text1.charAt(i - 1) == text2.charAt(j - 1)) {
ans[i][j] = ans[i - 1][j - 1] + 1;
}else {
ans[i][j] = Math.max(ans[i - 1][j], ans[i][j - 1]);//变化
}
}
}
后者:
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
if(nums1[i - 1] == nums2[j - 1]) {
ans[i][j] = ans[i - 1][j - 1] + 1;
}
max = Math.max(max, ans[i][j]);
}
}

标签:数字,int,max,每日,一结,数组,ans,charAt
From: https://www.cnblogs.com/xtag/p/16739320.html

相关文章

  • 【每日一练】53—写一个完整的摄影网站页面
    ​写在前面如果你是一个热爱摄影的人,肯定也想把自己的作品呈现给更多人看,我们除了通过第三方的平台,分享你的摄影作品外,我们还可以通过自己的个人博客或者摄影网站来分享这些......
  • C语言每日一题——第一天
    第一天小明想要给他的朋友写一个生日祝福程序,在运行时,会根据输入的日期输出不同的结果。若在平时运行程序(例如9月28日):09-28:+3?-15而在朋友生日(12月13日)当天:12-13......
  • 每日一结
    174.地下城游戏本题是本人在学习动态规划遇到的第一道比较特殊的题目。因为此题是倒着推的。因为要求最低血量,如果正着从起点开始求,不能保证后无效性。也就是说,前面的工......
  • LeetCode739 每日温度
    LeetCode739每日温度classSolution:defdailyTemperatures(self,temperatures:List[int])->List[int]:ans,stack,n=[0]*len(temperatures),[......
  • 每日一结
    120.三角形最小路径和要求自顶到下的最短路径,只需要把从顶到各个位置的值都求出,最后再找出最底行的最小值即可。因为当前位置可由其正上方或者斜上方得来,所以只需要初始......
  • pta甲级1005-1009+cf每日水题
    1005:简单模拟,数组打表1#include<bits/stdc++.h>2usingnamespacestd;3#defineintlonglong4#defineIOSios_base::sync_with_stdio(0);cin.tie(0);cout.......
  • 前端-每日一题
    20220919202121222324......
  • 每日总结
    今天依旧是动态规划。(倒着回去)64.最小路径和初始一下两边的值(从左上角开始的第零行和第零列),之后的每一个格子由紧挨着它的上左两个格子的最小值加上当前格子的值得来。......
  • 【每日一句sdc】create_gnerated_clock
    用途:当clk信号穿过触发器时,dc会把其当成普通信号处理,若果仍想其作为时钟信号往下传播,则需要将其声明成generated_clock, 是generate_clock的场景??todo协议:create_genera......
  • 每日总结
    今天开始了动态规划题目的学习。以前对于,最优子结构,重叠子问题这句话的理解可以说是,没有什么理解。其实就是,我当前需要解决的这个问题,可以由之前的已经有答案的问题得来......