LCR 182. 动态口令
某公司门禁密码使用动态口令技术。初始密码为字符串 password,密码更新均遵循以下步骤:
设定一个正整数目标值 target
将 password 前 target 个字符按原顺序移动至字符串末尾
请返回更新后的密码字符串。
示例 1:
输入: password = “s3cur1tyC0d3”, target = 4
输出: “r1tyC0d3s3cu”
示例 2:
输入: password = “lrloseumgh”, target = 6
输出: “umghlrlose”
提示:
1 <= target < password.length <= 10000
翻转两次能恢复顺序,我们可以先分别翻转两部分,在翻转整体,这样各部分内容的顺序不变,但是两部分顺序会翻转
1234567891011121314class Solution {public: string dynamicPassword(string password, int target) { reverse(password, 0, target - 1); ...
LCR 181. 字符串中的单词反转
你在与一位习惯从右往左阅读的朋友发消息,他发出的文字顺序都与正常相反但单词内容正确,为了和他顺利交流你决定写一个转换程序,把他所发的消息 message 转换为正常语序。
注意:输入字符串 message 中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。
示例 1:
输入: message = “the sky is blue”
输出: “blue is sky the”
示例 2:
输入: message = " hello world! "
输出: “world! hello”
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3:
输入: message = “a good example”
输出: “example good a”
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
提示:
0 <= message.length <= 10(4)
message 中包含英文大小写字母、空格和数字
可以直接反向获取t ...
LCR 180. 文件组合
待传输文件被切分成多个部分,按照原排列顺序,每部分文件编号均为一个 正整数(至少含有两个文件)。传输要求为:连续文件编号总和为接收方指定数字 target 的所有文件。请返回所有符合该要求的文件传输组合列表。
注意,返回时需遵循以下规则:
每种组合按照文件编号 升序 排列;
不同组合按照第一个文件编号 升序 排列。
示例 1:
**输入:**target = 12
输出:[[3, 4, 5]]
**解释:**在上述示例中,存在一个连续正整数序列的和为 12,为 [3, 4, 5]。
示例 2:
**输入:**target = 18
输出:[[3,4,5,6],[5,6,7]]
**解释:**在上述示例中,存在两个连续正整数序列的和分别为 18,分别为 [3, 4, 5, 6] 和 [5, 6, 7]。
根据求和公式,一组中最多可有pow(target * 2, 0.5)个元素,由此可以遍历可能的元素个数 i ;
并且如果 i 为奇数,因为除去mid,左右两边元素数量相等,所以target一定为mid的 i 倍
如果 i 为偶数,则mid为左边最右元素,此时 target % i 一定等 ...
LCR 179. 查找总价格为目标值的两个商品
购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总和刚好是 target。若存在多种情况,返回任一结果即可。
示例 1:
**输入:**price = [3, 9, 12, 15], target = 18
输出:[3,15] 或者 [15,3]
示例 2:
**输入:**price = [8, 21, 27, 34, 52, 66], target = 61
输出:[27,34] 或者 [34,27]
提示:
1 <= price.length <= 10^5
1 <= price[i] <= 10^6
1 <= target <= 2*10^6
可以通过hashmap来记录每个值所需的目标值,遍历一次就能找到
注意到数组是有序的,同样倒过来遍历也是有序的,可以采用双指针的方法
1234567891011121314151617class Solution {public: vector<int> twoSum(vector<int> &price, int targe ...
LCR 178. 训练计划 VI
教学过程中,教练示范一次,学员跟做三次。该过程被混乱剪辑后,记录于数组 actions,其中 actions[i] 表示做出该动作的人员编号。请返回教练的编号。
示例 1:
**输入:**actions = [5, 7, 5, 5]
**输出:**7
示例 2:
**输入:**actions = [12, 1, 6, 12, 6, 12, 6]
**输出:**1
提示:
1 <= actions.length <= 10000
1 <= actions[i] < 2^31
我们还是考虑二进制表示
对于出现三次的数,他每个一出现的位置一定会出现3次,
也就是说如果我们统计所有数二进制32位上1出现的次数
如果是3次则说明单独那个数此位置为0
如果是其他情况说明单独那个数此位置为1
1234567891011121314151617181920class Solution {public: int trainingPlan(vector<int> &actions) { vector<int> ...
LCR 177. 撞色搭配
整数数组 sockets 记录了一个袜子礼盒的颜色分布情况,其中 sockets[i] 表示该袜子的颜色编号。礼盒中除了一款撞色搭配的袜子,每种颜色的袜子均有两只。请设计一个程序,在时间复杂度 O(n),空间复杂度O(1) 内找到这双撞色搭配袜子的两个颜色编号。
示例 1:
**输入:**sockets = [4, 5, 2, 4, 6, 6]
输出:[2,5] 或 [5,2]
示例 2:
**输入:**sockets = [1, 2, 4, 1, 4, 3, 12, 3]
输出:[2,12] 或 [12,2]
提示:
2 <= sockets.length <= 10000
寻找两个无配对的数字,因为对时间空间复杂度的要求,无法使用哈希表,我们只能在原数组上处理
需要知道相同数字异或结果为零,
假设两个数字为a,b,当我们把所有数字异或后,得到的结果就是a^b
再想分别得到a和b我们需要有一个条件,在异或时能把a,b分开
考虑到a,b的二进制表示,a^b的某一位为0说明a,b该位值相等,为一则不等,那我们就可以根据为一的那位值来区分a,b
1234567891011121 ...






