Java每日一练(20230314)
创始人
2024-06-03 08:53:45
0

目录

1. 字符串转换整数 (atoi)  ★★

2. 重复的DNA序列  ★★

3. 二叉树中的最大路径和  ★★★

🌟 每日一练刷题专栏 🌟

C/C++ 每日一练 ​专栏

Python 每日一练 专栏

Java 每日一练 专栏


1. 字符串转换整数 (atoi)

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。

函数 myAtoi(string s) 的算法如下:

  • 读入字符串并丢弃无用的前导空格
  • 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
  • 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
  • 将前面步骤读入的这些数字转换为整数(即,"123" -> 123, "0032" -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
  • 如果整数数超过 32 位有符号整数范围 [−231,  231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。
  • 返回整数作为最终结果。

注意:

  • 本题中的空白字符只包括空格字符 ' ' 。
  • 除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。

示例 1:

输入:s = "42"
输出:42
解释:加粗的字符串为已经读入的字符,插入符号是当前读取的字符。
第 1 步:"42"(当前没有读入字符,因为没有前导空格)
第 2 步:"42"(当前没有读入字符,因为这里不存在 '-' 或者 '+')
第 3 步:"42"(读入 "42")
解析得到整数 42 。
由于 "42" 在范围 [-231, 231 - 1] 内,最终结果为 42 。

示例 2:

输入:s = "   -42"
输出:-42
解释:
第 1 步:"   -42"(读入前导空格,但忽视掉)
第 2 步:"   -42"(读入 '-' 字符,所以结果应该是负数)
第 3 步:"   -42"(读入 "42")
解析得到整数 -42 。
由于 "-42" 在范围 [-231, 231 - 1] 内,最终结果为 -42 。

示例 3:

输入:s = "4193 with words"
输出:4193
解释:
第 1 步:"4193 with words"(当前没有读入字符,因为没有前导空格)
第 2 步:"4193 with words"(当前没有读入字符,因为这里不存在 '-' 或者 '+')
第 3 步:"4193 with words"(读入 "4193";由于下一个字符不是一个数字,所以读入停止)
解析得到整数 4193 。
由于 "4193" 在范围 [-231, 231 - 1] 内,最终结果为 4193 。

示例 4:

输入:s = "words and 987"
输出:0
解释:
第 1 步:"words and 987"(当前没有读入字符,因为没有前导空格)
第 2 步:"words and 987"(当前没有读入字符,因为这里不存在 '-' 或者 '+')
第 3 步:"words and 987"(由于当前字符 'w' 不是一个数字,所以读入停止)
解析得到整数 0 ,因为没有读入任何数字。
由于 0 在范围 [-231, 231 - 1] 内,最终结果为 0 。

示例 5:

输入:s = "-91283472332"
输出:-2147483648
解释:
第 1 步:"-91283472332"(当前没有读入字符,因为没有前导空格)
第 2 步:"-91283472332"(读入 '-' 字符,所以结果应该是负数)
第 3 步:"-91283472332"(读入 "91283472332")
解析得到整数 -91283472332 。
由于 -91283472332 小于范围 [-2^31, 2^31 - 1] 的下界,最终结果被截断为 -2^31 = -2147483648 。

提示:

  • 0 <= s.length <= 200
  • s 由英文字母(大写和小写)、数字(0-9)、' ''+''-' 和 '.' 组成

代码:

class Solution {public int myAtoi(String s) {long y = 0;int i = 0;boolean w = false;boolean sign = false;int offset = 0;char[] ints = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };while (i < s.length()) {char c = s.charAt(i);boolean isSign = false;if (w == false && c != ' ') {w = true;if (c == '-') {sign = true;isSign = true;}if (c == '+') {isSign = true;}}if (w && (!isSign)) {int v = Arrays.binarySearch(ints, c);if (v < 0) {break;}y = y * 10 + v;if (y > 0x7FFFFFFF) {y = 0x7FFFFFFF;offset = 1;break;}}i++;}return sign ? -(int) (y + offset) : (int) y;}
}

2. 重复的DNA序列

所有 DNA 都由一系列缩写为 'A''C''G' 和 'T' 的核苷酸组成,例如:"ACGAATTCCG"。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。

编写一个函数来找出所有目标子串,目标子串的长度为 10,且在 DNA 字符串 s 中出现次数超过一次。

示例 1:

输入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
输出:["AAAAACCCCC","CCCCCAAAAA"]

示例 2:

输入:s = "AAAAAAAAAAAAA"
输出:["AAAAAAAAAA"]

提示:

  • 0 <= s.length <= 10^5
  • s[i] 为 'A''C''G' 或 'T'

代码:

class Solution {public List findRepeatedDnaSequences(String s) {Set set = new HashSet<>();Set help = new HashSet<>();for (int i = 0; i <= s.length() - 10; i++) {String cur = s.substring(i, i + 10);if (!set.add(cur))help.add(cur);}return new ArrayList(help);}
}

3. 二叉树中的最大路径和

路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。

路径和 是路径中各节点值的总和。

给你一个二叉树的根节点 root ,返回其 最大路径和 。

示例 1:

输入:root = [1,2,3]
输出:6
解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6

示例 2:

输入:root = [-10,9,20,null,null,15,7]
输出:42
解释:最优路径是 15 -> 20 -> 7 ,路径和为 15 + 20 + 7 = 42

提示:

  • 树中节点数目范围是 [1, 3 * 10^4]
  • -1000 <= Node.val <= 1000

代码: 递归法

class Solution {int maxSum = Integer.MIN_VALUE;public int maxPathSum(TreeNode root) {maxGain(root);return maxSum;}public int maxGain(TreeNode node) {if (node == null) {return 0;}int leftGain = Math.max(maxGain(node.left), 0);int rightGain = Math.max(maxGain(node.right), 0);int priceNewpath = node.val + leftGain + rightGain;maxSum = Math.max(maxSum, priceNewpath);return node.val + Math.max(leftGain, rightGain);}
}

非递归法:

用栈来模拟递归过程,用哈希表存储每个节点的最大贡献值。首先将根节点入栈,然后在循环中不断弹出栈顶节点,如果该节点为空,我们将其最大贡献值设为0;如果该节点为叶子节点,将其最大贡献值设为节点值,并更新最大路径和;否则,计算左右子树的最大贡献值,并计算包含该节点的最大路径和,同样更新最大路径和,并将该节点的最大贡献值存入哈希表,同时将左右子节点入栈。最后返回最大路径和即可。 

class Solution {int maxSum = Integer.MIN_VALUE;public int maxPathSum(TreeNode root) {Stack stack = new Stack<>();Map map = new HashMap<>();stack.push(root);while (!stack.isEmpty()) {TreeNode node = stack.pop();if (node == null) {map.put(node, 0);continue;}if (node.left == null && node.right == null) {map.put(node, node.val);maxSum = Math.max(maxSum, node.val);continue;}int leftGain = Math.max(map.getOrDefault(node.left, 0), 0);int rightGain = Math.max(map.getOrDefault(node.right, 0), 0);int priceNewpath = node.val + leftGain + rightGain;maxSum = Math.max(maxSum, priceNewpath);map.put(node, node.val + Math.max(leftGain, rightGain));stack.push(node.left);stack.push(node.right);}return maxSum;}
}

🌟 每日一练刷题专栏 🌟

✨ 持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

 评论,你的意见是我进步的财富!  

C/C++ 每日一练 ​专栏

​​

Python 每日一练 专栏

Java 每日一练 专栏

Golang 每日一练 专栏

 

相关内容

热门资讯

你为什么不说话(精简6篇) 你为什么不说话 篇一在我们的生活中,总会遇到一些沉默寡言的人,他们不善于表达自己的情感和想法,给人一...
退化初一作文(推荐5篇) 退化初一作文 篇一退化初一作文 篇一我所见到的退化社会最近,我注意到了一个令人担忧的现象:社会正在逐...
这样多美丽作文600字_初一... 这样多美丽作文600字_初一作文 篇一梦幻花海梦幻花海是世界上最美丽的景色之一。当你踏入花海时,仿佛...
秋天来了初一作文(实用5篇) 秋天来了初一作文 篇一秋天的脚步悄悄地走进了我们的生活,初一的同学们也开始感受到了秋天的气息。在这个...
写大国工匠精神的作文(通用6... 写大国工匠精神的作文 篇一在当今社会,中国人民正以强烈的工匠精神推动着国家的发展。大国工匠精神是指在...
我的九月初一作文【优秀5篇】 我的九月初一作文 篇一初一的早晨,阳光透过窗户洒进了我的房间,唤醒了我美好的一天。这是我在新学校的第...
描写春天200字初一作文【优... 描写春天200字初一作文 篇一春天是一个美丽的季节,它给大地带来了新的生机和活力。当春天来临的时候,...
不再迷茫初中作文【优选6篇】 不再迷茫初中作文 篇一走出迷茫,迎接初中新生活初中生活对于许多同学来说是一个全新的开始,但同时也会让...
初一学生写的作文【优选6篇】 初一学生写的作文 篇一我的暑假生活暑假终于到了,这是我进入初中以来的第一个暑假。我期待这个假期已经很...
这也是失败的尝试初一作文(精... 这也是失败的尝试初一作文 篇一我的失败经历失败,对于每个人来说都是一种痛苦的经历。而我,也曾经历过一...
成长回眸作文(实用6篇) 成长回眸作文 篇一当我回眸自己的成长历程,我不禁感慨万分。从小到大,我经历了许多的挫折与困难,但也收...
再来一次,我要对你说出那句话... 再来一次,我要对你说出那句话初一作文 篇一第一篇内容再来一次,我要对你说出那句话记得那是一个阳光明媚...
一朵永不凋谢的六色花作文12... 一朵永不凋谢的六色花作文1200字 篇一一朵永不凋谢的六色花在一个幽静的小村庄里,有一位名叫小红的女...
姐姐出嫁作文(优质5篇) 姐姐出嫁作文 篇一姐姐出嫁是人生中一段重要的时刻,它不仅意味着姐姐将和自己的另一半共度一生,更是家庭...
初中作文窗外600字【精简6... 初中作文窗外600字 篇一窗外的四季窗外是一个神奇的世界,它随着四季的更替,展现出不同的景象和色彩。...
初中议论文作文600字【优秀... 初中议论文作文600字 篇一"手机禁用,营造宁静学习环境"如今,手机已经成为人们生活中不可或缺的一部...
我的中国梦作文600字初一(... 我的中国梦作文600字初一 篇一我的中国梦作为一个中国人,我有着自己的中国梦。中国梦,是每个中国人对...
我的年度关键词旅游作文【实用... 我的年度关键词旅游作文 篇一我今年的关键词是“自然”,因此我选择去探索大自然的奇妙之处。我决定去一座...
你好初一优秀作文49篇(优秀... 你好初一优秀作文49篇 篇一初中生活的收获与感悟初中三年的时光匆匆而过,回首看来,这三年是我成长最快...
哑剧表演初一作文【最新6篇】 哑剧表演初一作文 篇一哑剧表演初一作文 篇一哑剧表演是一种没有语言交流的表演形式,通过动作、表情和肢...