力扣第229周周赛

  • 题目
  • 思路与算法
  • 代码实现
  • 写在最后

题目

    1. 交替合并字符串
    1. 移动所有球到每个盒子所需的最小操作数
    1. 执行乘法运算的最大分数
    1. 由子序列构造的最长回文串的长度

思路与算法

  1. 前两题不再多说,翻译题意即可
  2. 第三题的误区在于我上图红色标出的地方,第三个示例在第三部计算的时候并没有选择更大的-3 1,而是选择了-33,因此想到不能直接进行模拟,需要考虑最大值之间的匹配问题,才可以得到最大的结果。想到使用动态规划来实现,具体状态转移过程以及思路见注释。
  3. 第四题是之前的516题的一个延伸题目,只需要在516的基础上增加一个判断条件即可。附上516题的题目如下:

    思路为直接动态解决,在此处附上代码:
class Solution {public int longestPalindromeSubseq(String s) {// 获取长度,创建dp数组int n = s.length();int[][] f = new int[n][n];// f[i][j]表示索引i和j之间的最长回文序列长度,那么显然j>=i,且basecasedp[0][0] = 1;一个字符也是回文序列// i从后开始遍历,j从i+1开始遍历,但basecase也要变为f[i][i]= 1for (int i = n - 1; i >= 0; i--) {f[i][i] = 1;for (int j = i + 1; j < n; j++) {if (s.charAt(i) == s.charAt(j)) {f[i][j] = f[i + 1][j - 1] + 2;} else {f[i][j] = Math.max(f[i + 1][j], f[i][j - 1]);}}}return f[0][n - 1];}
}

区别在于本题是两个字符串,因此判断时增加两个字符分别在两个字符串即可完成dp

代码实现

  1. 交替合并字符串
class Solution {public:string mergeAlternately(string word1, string word2) {string res("");// 直接翻译题意即可int len1 = word1.size();int len2 = word2.size();// 判断那个单词短int min = len1 <= len2 ? len1 : len2;// 进行拼接for (int i = 0; i < min; ++i) {res += word1[i];res += word2[i];}for (int i = min; i < len1; ++i) {res += word1[i];}for (int i = min; i < len2; ++i) {res += word2[i];}return res;}
};
  1. 移动所有球到每个盒子所需的最小操作数
class Solution {public:vector<int> minOperations(string boxes) {vector<int> res;// 遍历计算相对距离并填入res即可int tmp;// k表示当前需要填入res的为第几个值for (int k = 0; k < boxes.size(); ++k) {tmp = 0;for (int i = 0; i < boxes.size(); ++i) {if (boxes[i] == '1') {tmp += abs(i-k);}}res.push_back(tmp);}return res;}
};
  1. 执行乘法运算的最大分数
class Solution {public int maximumScore(int[] nums, int[] multipliers) {int [][] dp = new int[1000 + 5][1000 + 5];int len1 = nums.length;int len2 = multipliers.length;// dp[i][j]表示nums的前面取i个后面取j个时符合题目要求,那么分三种情况处理// base case: dp[0][0] = 0;// 只从前面取for (int i = 1; i <= len2; ++i) {dp[i][0] = dp[i - 1][0] + nums[i-1] * multipliers[i - 1];}// 只从后面取for (int i = 1; i <= len2; ++i) {dp[0][i] = dp[0][i - 1] + nums[len1 - i] * multipliers[i - 1];}// 从前面取i个,后面取j个for (int i = 1; i <= len2; ++i) {for (int j = 1; j + i <= len2; ++j) {dp[i][j] = Math.max(dp[i - 1][j] + nums[i - 1] * multipliers[i + j - 1],dp[i][j - 1] + multipliers[i + j - 1] * nums[len1 - j]);}}int res = Integer.MIN_VALUE;for (int i = 0; i <= len2; ++i) {res = Math.max(dp[i][len2 - i],res);}return res;}
}
  1. 由子序列构造的最长回文串的长度
class Solution {public:int longestPalindrome(string word1, string word2) {int res = 0;int len1 = word1.size();string s = word1 + word2;int len = s.size();vector<vector<int>> dp(len,vector<int>(len,0));for (int i = len - 1; i >= 0; i--) {dp[i][i] = 1;for (int j = i + 1; j < len; j++) {if (s[i] == s[j]) {dp[i][j] = dp[i + 1][j - 1] + 2;// 在此处与516题有区别,保证两个字符刚好在两个字符串中if (i < len1 && j >= len1) {res = max(res, dp[i][j]);}} else {dp[i][j] = max(dp[i + 1][j], dp[i][j - 1]);}}}return res;}};

写在最后

  1. 冲!

20210224:力扣第229周周赛相关推荐

  1. 20211202:力扣第268周周赛(下)

    力扣第268周周赛(下) 题目 思路与算法 代码实现 写在最后 题目 区间内查询数字的频率 k 镜像数字的和 思路与算法 第三题直接map加二分即可,见代码 这个第四题看了大家的题解有直接打表的,这题 ...

  2. 20211130:力扣第267周周赛(下)

    力扣第267周周赛(下) 题目 思路与算法 代码实现 写在最后 题目 2075 解码斜向换位密码 2076.处理含限制条件的好友请求 思路与算法 第三题是一个比较简单的索引计算题,只需要将斜着放的字符 ...

  3. 20211118:力扣第267周周赛(上)

    力扣第267周周赛(上) 题目 思路与算法 代码实现 写在最后 题目 买票需要的时间 反转偶数长度组的节点 思路与算法 买票需要的时间 处理思路:直接进行模拟即可,找到位置k上的人需要买的票的数量,排 ...

  4. 20210627:力扣第247周周赛(上)

    力扣第247周周赛(上) 题目 思路与算法 代码实现 写在最后 题目 两个数对之间的最大乘积差 循环轮转矩阵 思路与算法 两个数对之间的最大乘积差:排序相减即可 循环轮转矩阵:模拟即可,注意逆时针和顺 ...

  5. (补)20210623:力扣第246周周赛(下)

    力扣第246周周赛(下) 题目 思路与算法 代码实现 写在最后 题目 统计子岛屿 查询差绝对值的最小值 思路与算法 统计子岛屿 : 老DFS了,总之就是遍历题,无需多言,搜就行了. 查询差绝对值的最小 ...

  6. 20210621:力扣第246周周赛(上)

    力扣第246周周赛(上) 题目 思路与算法 代码实现 写在最后 题目 字符串中的最大奇数 你完成的完整对局数 思路与算法 字符串中的最大奇数 :从末尾开始找奇数即可.从头开始算则最大 你完成的完整对局 ...

  7. 20210612:力扣第244周周赛题解(上)

    力扣第244周周赛(上) 题目 思路与算法 代码实现 写在最后 题目 判断矩阵经轮转后是否一致 使数组元素相等的减少操作次数 思路与算法 判断矩阵经轮转后是否一致:本题的前置题目是这道46:.旋转图像 ...

  8. 20210602:力扣第243周周赛(下)

    力扣第243周周赛(下) 题目 思路与算法 代码实现 写在最后 题目 使用服务器处理任务 准时抵达会议现场的最小跳过休息次数 思路与算法 使用服务器处理任务:典型双堆问题,逻辑清晰即可写出代码,今天两 ...

  9. 20210601:力扣第243周周赛(上)

    力扣第243周周赛(上) 题目 思路与算法 代码实现 写在最后 题目 检查某单词是否等于两单词之和 插入后的最大值 思路与算法 检查某单词是否等于两单词之和:直接转化比较即可 插入后的最大值:负数,则 ...

最新文章

  1. GPS坐标转换 百度地图API调用
  2. 微服务 注册中心的作用_102,谈谈微服务注册中心zookeeperamp;Eureka
  3. 1.5w字的Rmarkdown入门教程汇总
  4. 6个原则、50条秘技提高HTML5应用及网站性能
  5. c语言删除行尾的空格,新人提问:如何将输出时每行最后一个空格删除
  6. Day2 python基础
  7. Some file crunching failed, see logs for details
  8. 【突变检验合集】含Pettitt突变检验等
  9. Nebula3 资源管理系统
  10. 如何冻结Excel中的行
  11. 年轻人,你活着不是为了观察K线做布朗运动 ——从“全要素参与分配理论”谈股票市场的赚钱陷阱
  12. 网页服务器 根,服务器根域名301重定向到www完整教程
  13. java图片加文字水印_JAVA实现图片的修改,添加文字水印效果
  14. 牛客网-密码检查-小明同学最近开发了一个网站,在用户注册账户的时候,需要设置账户的密码,为了加强账户的安全性,小明对密码强度有一定要求:。。。。。
  15. CultureInfo
  16. echarts自传作品入口
  17. 响应式布局-bootstap-阿里百秀案例
  18. 银行转账问题(死锁)
  19. Eclipse导入项目左下角有感叹号/红叉
  20. 苹果cms试看无效与用户组权限设置教程

热门文章

  1. HTML + CSS 为何得不到编程界的认可?
  2. 华为前员工李洪元:我的诉求只有见任总能解决;音悦台被传倒闭;.NET Core 3.1 发布 | 极客头条...
  3. 一件程序员必备武器的诞生
  4. 软件开发团队中,凭什么新手当道?| 畅言
  5. 与微信同行近 8 年,49 岁的张小龙去哪儿了?
  6. 公开薪资后,我会被解雇吗?
  7. 继去年“技惊四座”之后,腾讯TPG图片格式在应用领域有了新进展
  8. 史上最大源码泄露事件:iOS 关键源代码被匿名公布在 GitHub 上
  9. linux httpd 支持php配置,Linux9.5 配置httpd支持php
  10. stm32f4有重映射么_STM32管教复用与重映射关系