LeetCode每日一题
2129. 将标题首字母大写
2024/3/11
给你一个字符串
title
,它由单个空格连接一个或多个单词组成,每个单词都只包含英文字母。请你按以下规则将每个单词的首字母 大写 :
- 如果单词的长度为
1
或者2
,所有字母变成小写。- 否则,将单词首字母大写,剩余字母变成小写。
请你返回 大写后 的
title
。示例 1:
1
2
3
4 输入:title = "capiTalIze tHe titLe"
输出:"Capitalize The Title"
解释:
由于所有单词的长度都至少为 3 ,将每个单词首字母大写,剩余字母变为小写。示例 2:
1
2
3
4
5 输入:title = "First leTTeR of EACH Word"
输出:"First Letter of Each Word"
解释:
单词 "of" 长度为 2 ,所以它保持完全小写。
其他单词长度都至少为 3 ,所以其他单词首字母大写,剩余字母小写。示例 3:
1
2
3
4
5 输入:title = "i lOve leetcode"
输出:"i Love Leetcode"
解释:
单词 "i" 长度为 1 ,所以它保留小写。
其他单词长度都至少为 3 ,所以其他单词首字母大写,剩余字母小写。
双指针 + 原地修改
两个常用函数toupper()
tolower()
转大写转小写
1 | class Solution { |
1261. 在受污染的二叉树中查找元素
2024/3/12
给出一个满足下述规则的二叉树:
root.val == 0
- 如果
treeNode.val == x
且treeNode.left != null
,那么treeNode.left.val == 2 * x + 1
- 如果
treeNode.val == x
且treeNode.right != null
,那么treeNode.right.val == 2 * x + 2
现在这个二叉树受到「污染」,所有的
treeNode.val
都变成了-1
。请你先还原二叉树,然后实现
FindElements
类:
FindElements(TreeNode* root)
用受污染的二叉树初始化对象,你需要先把它还原。bool find(int target)
判断目标值target
是否存在于还原后的二叉树中并返回结果。示例 1:
1
2
3
4
5
6
7
8
9 输入:
["FindElements","find","find"]
[[[-1,null,-1]],[1],[2]]
输出:
[null,false,true]
解释:
FindElements findElements = new FindElements([-1,null,-1]);
findElements.find(1); // return False
findElements.find(2); // return True示例 2:
1
2
3
4
5
6
7
8
9
10 输入:
["FindElements","find","find","find"]
[[[-1,-1,-1,-1,-1]],[1],[3],[5]]
输出:
[null,true,true,false]
解释:
FindElements findElements = new FindElements([-1,-1,-1,-1,-1]);
findElements.find(1); // return True
findElements.find(3); // return True
findElements.find(5); // return False示例 3:
1
2
3
4
5
6
7
8
9
10
11 输入:
["FindElements","find","find","find","find"]
[[[-1,null,-1,-1,null,-1]],[2],[3],[4],[5]]
输出:
[null,true,false,false,true]
解释:
FindElements findElements = new FindElements([-1,null,-1,-1,null,-1]);
findElements.find(2); // return True
findElements.find(3); // return False
findElements.find(4); // return False
findElements.find(5); // return True提示:
TreeNode.val == -1
- 二叉树的高度不超过
20
- 节点的总数在
[1, 10^4]
之间- 调用
find()
的总次数在[1, 10^4]
之间0 <= target <= 10^6
按照题目意思就是遍历这个二叉树把值填回去,判断值用个哈希表存储查找。
1 | /** |
2864. 最大二进制奇数
2024/3/13
给你一个 二进制 字符串
s
,其中至少包含一个'1'
。你必须按某种方式 重新排列 字符串中的位,使得到的二进制数字是可以由该组合生成的 最大二进制奇数 。
以字符串形式,表示并返回可以由给定组合生成的最大二进制奇数。
注意 返回的结果字符串 可以 含前导零。
示例 1:
1
2
3 输入:s = "010"
输出:"001"
解释:因为字符串 s 中仅有一个 '1' ,其必须出现在最后一位上。所以答案是 "001" 。示例 2:
1
2
3 输入:s = "0101"
输出:"1001"
解释:其中一个 '1' 必须出现在最后一位上。而由剩下的数字可以生产的最大数字是 "100" 。所以答案是 "1001" 。提示:
1 <= s.length <= 100
s
仅由'0'
和'1'
组成s
中至少包含一个'1'
贪心,最后一位是1,其他的1放在最前面
1 | class Solution { |
2789. 合并后数组中的最大元素
2024/3/14
给你一个下标从 0 开始、由正整数组成的数组
nums
。你可以在数组上执行下述操作 任意 次:
- 选中一个同时满足
0 <= i < nums.length - 1
和nums[i] <= nums[i + 1]
的整数i
。将元素nums[i + 1]
替换为nums[i] + nums[i + 1]
,并从数组中删除元素nums[i]
。返回你可以从最终数组中获得的 最大 元素的值。
示例 1:
1
2
3
4
5
6
7 输入:nums = [2,3,7,9,3]
输出:21
解释:我们可以在数组上执行下述操作:
- 选中 i = 0 ,得到数组 nums = [5,7,9,3] 。
- 选中 i = 1 ,得到数组 nums = [5,16,3] 。
- 选中 i = 0 ,得到数组 nums = [21,3] 。
最终数组中的最大元素是 21 。可以证明我们无法获得更大的元素。示例 2:
1
2
3
4
5
6 输入:nums = [5,3,3]
输出:11
解释:我们可以在数组上执行下述操作:
- 选中 i = 1 ,得到数组 nums = [5,6] 。
- 选中 i = 0 ,得到数组 nums = [11] 。
最终数组中只有一个元素,即 11 。提示:
1 <= nums.length <= 105
1 <= nums[i] <= 106
这题有codeforce的感觉了,
贪心 + 倒序遍历数组
有个坑,结果是long long
,但输入数组是int
,即不能在原数组上操作
1 | class Solution { |
- Title: LeetCode每日一题
- Author: LoftyDust
- Created at : 2024-03-14 21:23:47
- Updated at : 2024-05-18 12:03:31
- Link: https://loftydust.top/cfbc460f111e.html
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments