AcWing 3816. 移动元素
原题链接
题目描述
给定一个长度为 nnn 的正整数数组 a1,a2,…,ana_1,a_2,…,a_na1,a2,…,an。
你需要选择其中一个元素,将其移动至数组中的任意位置(也可以留在原位置)。
我们的目标是,在移动元素操作完成以后,将数组分为前后两个非空部分,并使前一部分的各元素之和等于后一部分的各元素之和。
请问,该目标能否达成?
输入格式
第一行包含整数 TTT,表示共有 TTT 组测试数据。
每组数据第一行包含整数 nnn。
第二行包含 nnn 个整数 a1,a2,…,ana_1,a_2,…,a_na1,a2,…,an。
输出格式
每组数据输出一行结果,目标可以达成,则输出 YES,否则输出 NO。
数据范围
1≤T≤201≤T≤201≤T≤20,
1≤n≤1051≤n≤10^51≤n≤105,
1≤ai≤1091≤a_i≤10^91≤ai≤109。
同一测试点内所有 nnn 的和不超过 10510^5105。
样例
输入样例:
3
3
1 3 2
5
1 2 3 4 5
5
2 2 3 4 5
输出样例:
YES
NO
YES
思路
能否达 ...
AcWing 3815. 最大约数
原题链接
题目描述
一个正整数 xxx 被称为一个可爱数当且仅当不存在任何正整数 a>1a>1a>1 满足 a2a^2a2 是 xxx 的约数。
给定一个正整数 nnn,请计算并输出 nnn 的所有约数中,属于可爱数的最大约数。
输入格式
第一行包含整数 TTT,表示共有 TTT 组测试数据。
每组数据占一行,包含一个整数 nnn。
输出格式
每组数据输出一行结果。
数据范围
1≤T≤101≤T≤101≤T≤10,
1≤n≤10121≤n≤10^{12}1≤n≤1012
样例
输入样例:
2
10
12
输出样例:
10
6
思路
任意正整数 mmm 都可以分解质因数成 m=p1α1p2α2⋯pkαkm = p^{\alpha_1}_1p^{\alpha_2}_2 \cdots p^{\alpha_k}_km=p1α1p2α2⋯pkαk 。
可爱数 aaa 同样的可以被分解质因数成 a=p1β1p2β2⋯pkβka = p^{\beta_1}_1p^{\beta_2}_2 \cdots p^{\beta_k}_ka=p1β1p2β2 ...
AcWing 3814. 矩阵变换
原题链接
题目描述
给定一个 n×nn×nn×n 的 010101 矩阵。
你可以选择若干列(也可以不选),并将这些列上的所有元素进行变换(111 变 000,000 变 111)。
你的目标是使得矩阵中有尽可能多的行满足:一行中的所有元素都为 111。
输出可以得到的满足条件的行的最大数量。
输入格式
第一行包含整数 nnn。
接下来 nnn 行,每行包含一个长度为 nnn 的 010101 字符串,表示整个矩阵。
输出格式
输出可以得到的满足条件的行的最大数量。
数据范围
1≤n≤1001≤n≤1001≤n≤100
样例
输入样例1:
4
0101
1000
1111
0101
输出样例1:
2
输入样例2:
3
111
111
111
输出样例2:
3
思路
可以发现,不同的字符串不可能在同样的操作下同时变为全 111 字符串。所以只要找出出现次数最多的字符串,将这个类串中的 000 改为 111 即可。
代码
C++
#include <iostream>
#include <unordered_map>
using names ...
LeetCode 789. 逃脱阻碍者
原题链接
题目描述
你在进行一个简化版的吃豆人游戏。你从 [0,0][0, 0][0,0] 点开始出发,你的目的地是 target=[xtarget,ytarget]target = [x_{target}, y_{target}]target=[xtarget,ytarget] 。地图上有一些阻碍者,以数组 ghosts 给出,第 i 个阻碍者从 ghosts[i]=[xi,yi]ghosts[i] = [x_i, y_i]ghosts[i]=[xi,yi] 出发。所有输入均为 整数坐标 。
每一回合,你和阻碍者们可以同时向东,西,南,北四个方向移动,每次可以移动到距离原位置 111 个单位 的新位置。当然,也可以选择 不动 。所有动作 同时 发生。
如果你可以在任何阻碍者抓住你 之前 到达目的地(阻碍者可以采取任意行动方式),则被视为逃脱成功。如果你和阻碍者同时到达了一个位置(包括目的地)都不算是逃脱成功。
只有在你有可能成功逃脱时,输出 true ;否则,输出 false。
数据范围
1≤ghosts.length≤1001 \le ghosts.length \le ...
LeetCode 443. 压缩字符串
原题链接
题目描述
给你一个字符数组 charscharschars ,请使用下述算法压缩:
从一个空字符串 sss 开始。对于 charscharschars 中的每组 连续重复字符 :
如果这一组长度为 111 ,则将字符追加到 sss 中。
否则,需要向 sss 追加字符,后跟这一组的长度。
压缩后得到的字符串 sss 不应该直接返回,需要转储到字符数组 charscharschars 中。需要注意的是,如果组长度为 101010 或 101010 以上,则在 charscharschars 数组中会被拆分为多个字符。
请在修改完输入数组后,返回该数组的新长度。
你必须设计并实现一个只使用常量额外空间的算法来解决此问题。
数据范围
1≤chars.length≤20001 \le chars.length \le 20001≤chars.length≤2000
chars[i] 可以是小写英文字母、大写英文字母、数字或符号
样例
输入样例1:
chars = ["a","a","b","b& ...
AcWing 3810. 最长连续休息时间
原题链接
题目描述
一天可以被分为 nnn 个时段。
一个工人的每日工作安排可以用一个长度为 nnn 的 010101 序列 a1,a2,…,ana_1,a_2,…,a_na1,a2,…,an 来表示。
aia_iai 为 000 表示第 iii 个时间段是工作时间,aia_iai 为 111 表示第 iii 个时间段是休息时间。
工人日复一日的严格按照这个工作安排来进行工作和休息。
请问,工人的最长连续休息时间有多长(单位:时段)?
注意,连续休息时间可能跨天。
保证工人至少在一个时间段处于工作状态。
输入格式
第一行包含整数 TTT,表示共有 TTT 组测试数据。
每组数据第一行包含整数 nnn。
第二行包含 nnn 个整数 a1,a2,…,ana_1,a_2,…,a_na1,a2,…,an。
输出格式
每组数据输出一行结果,表示最长连续休息时间。
数据范围
1≤T≤101≤T≤101≤T≤10,
1≤n≤2×1051≤n≤2×10^51≤n≤2×105,
0≤ai≤10≤a_i≤10≤ai≤1,
同一测试点内所有 nnn 的和不超过 2×1052×10^ ...
AcWing 3809. 修改数组
原题链接
题目描述
给定一个长度为 nnn 的正整数数组 a1,a2,…,ana_1,a_2,…,a_na1,a2,…,an。
你可以任意改变其中任意元素的值。
但是,改变后的元素的值仍需是正整数。
将一个元素的值从 aaa 变为 bbb 所需要付出的代价为 ∣a−b∣|a-b|∣a−b∣。
对于一个正整数 ttt,如果 ∣ai−t∣≤1|a_i-t|≤1∣ai−t∣≤1,则称第 ii 个元素能够与 ttt 匹配。
现在,请你指定一个正整数 ttt,并且用最小的代价修改整个数组,使得数组中所有元素都能够与 ttt 匹配。
指定的 ttt 不同,所需付出的最小代价也可能不同。
请你合理选择正整数 ttt,目标是让所需付出的最小代价尽可能小。
输入格式
第一行包含整数 TTT,表示共有 TTT 组测试数据。
每组数据第一行包含整数 nnn。
第二行包含 nnn 个整数 a1,a2,…,ana_1,a_2,…,a_na1,a2,…,an。
输出格式
每组数据输出一行结果,首先输出你选择的正整数 ttt,然后输出使得数组中所有元素都能够与 ttt 匹配,所需付出的最小代价。 ...
LeetCode 345. 反转字符串中的元音字母
原题链接
题目描述
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
提示:元音字母不包含字母 “y” 。
样例
输入样例1:
"hello"
输出样例1:
"holle"
输入样例2:
"leetcode"
输出样例2:
"leotcede"
思路
双指针扫描。
用两个指针,从首尾往中间扫描,扫描过程中跳过非元音字母,然后交换两个指针指向的字符。直到两个指针相遇为止。
时间复杂度:每个字符只会被扫描一遍。时间复杂度是 O(n)O(n)O(n) 。
代码
C++
class Solution {
public:
string words = "aeiouAEIOU";
string reverseVowels(string s) {
for ( int i = 0, j = s.size() - 1; i < j; i++, j-- )
{
while ...
AcWing 3807. 构造字符串
原题链接
题目描述
给定两个整数 nnn 和 kkk,请你构造一个长度为 nnn 的字符串 sss。
字符串 sss 需满足:
sss 由前 kkk 个小写字母构成,且前 kkk 个小写字母均在 sss 中出现至少一次。
前 kkk 个小写字母中,出现次数最少的字母的出现的次数尽可能多。
输出任意满足条件的字符串 sss。
输入格式
第一行包含整数 TTT,表示共有 TTT 组测试数据。
每组数据占一行,包含两个整数 nnn 和 kkk。
输出格式
每组数据输出一个结果,表示满足条件的字符串 sss。
如果答案不唯一,输出任意合理方案均可。
数据范围
1≤T≤1001≤T≤1001≤T≤100
1≤n≤1001≤n≤1001≤n≤100
1≤k≤min(n,26)1≤k≤min(n,26)1≤k≤min(n,26)
样例
输入样例:
3
7 3
4 4
6 2
输出样例:
cbcacab
abcd
baabab
思路
题目要求出现次数最小的字母,出现次数尽可能多,只要尽可能平均的分配字母即可。
题目至少需要 kkk 个不同的字母。那么每个字母都可以 ...
LeetCode 541. 反转字符串 II
原题链接
题目描述
给定一个字符串 sss 和一个整数 kkk,从字符串开头算起,每 2k2k2k 个字符反转前 kkk 个字符。
如果剩余字符少于 kkk 个,则将剩余字符全部反转。
如果剩余字符小于 2k2k2k 但大于或等于 kkk 个,则反转前 kkk 个字符,其余字符保持原样。
数据范围
1≤s.length≤1041 \le s.length \le 10^41≤s.length≤104,
sss 仅由小写英文组成,
1≤k≤1041 \le k \le 10^41≤k≤104。
样例
输入样例1:
s = "abcdefg", k = 2
输出样例1:
"bacdfeg"
输入样例2:
s = "abcd", k = 2
输出样例2:
"bacd"
思路
每 2k2k2k 为一组,翻转每组的前 kkk 个字符。不足 kkk 个字符,有多少翻转多少。
枚举每组的左端点 iii 和右端点 min(i+k,n)min(i + k, n)min(i+k,n) 。( nnn ...
