青少年编程知识记录 codecoming

【题解】最小子序列

【题目描述】

给你一个数组 nums,请你从中抽取一个子序列,满足该子序列的元素之和 严格 大于未包含在该子序列中的各元素之和。

如果存在多个解决方案,只需返回 长度最小 的子序列。如果仍然有多个解决方案,则返回 元素之和最大 的子序列。

与子数组不同的地方在于,「数组的子序列」不强调元素在原数组中的连续性,也就是说,它可以通过从数组中分离一些(也可能不分离)元素得到。

注意,题目数据保证满足所有约束条件的解决方案是 唯一 的。同时,返回的答案应当按 非递增顺序 排列。

【输入描述】

包含一行,每个数用空格隔开。

【输出描述】

包含一行,满足条件的子序列。每个数用空格隔开。

【样例1输入】

4 3 10 9 8

【样例1输出】

10 9

【样例1解释】

子序列 [10,9] 和 [10,8] 是最小的、满足元素之和大于其他各元素之和的子序列。但是 [10,9] 的元素之和最大。

【样例2输入】

4 4 7 6 7

【样例2输出】

7 7 6

【样例2解释】

子序列 [7,7] 的和为 14 ,不严格大于剩下的其他元素之和(14 = 4 + 4 + 6)。因此,[7,6,7] 是满足题意的最小子序列。注意,元素按非递增顺序返回。

【提示】

  • 1 <= nums.length <= 500

  • 1 <= nums[i] <= 100

作者:亿万年的星光 分类:题解目录 浏览:

【题解】种花问题

【题目描述】

假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。

给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false 。

【输入描述】

两行,第一行表示flowerbed,

第二行一个数n,表示要种入n朵花

【输出描述】

一行,true或者false

【样例1输入】

1 0 0 0 1  1

【样例1输出】

true

【样例2输入】

1 0 0 0 1  2

【样例2输出】

false

【提示】

  • 1 <= flowerbed.length <= 2 * 104

  • flowerbed[i] 为 0 或 1

  • flowerbed 中不存在相邻的两朵花

  • 0 <= n <= flowerbed.length

作者:亿万年的星光 分类:题解目录 浏览:

【题解】运动员和训练师的最大匹配数

【题目描述】

给你一个下标从 0 开始的整数数组 players ,其中 players[i] 表示第 i 名运动员的 能力 值,同时给你一个下标从 0 开始的整数数组 trainers ,其中 trainers[j] 表示第 j 名训练师的 训练能力值 。

如果第 i 名运动员的能力值 小于等于 第 j 名训练师的能力值,那么第 i 名运动员可以 匹配 第 j 名训练师。除此以外,每名运动员至多可以匹配一位训练师,每位训练师最多可以匹配一位运动员。

请你返回满足上述要求 players 和 trainers 的 最大 匹配数。

【输入描述】

3行,第一行m和n表示运动员和训练师

第二行是m个运动员的能力值,

第三行是n个训练师的训练值

【输出描述】

最大匹配数

【样例1输入】

3 4  4 7 9  8 2 5 8

【样例1输出】

2

【样例1解释】

得到两个匹配的一种方案是:  - players[0] 与 trainers[0] 匹配,因为 4 <= 8 。  - players[1] 与 trainers[3] 匹配,因为 7 <= 8 。  可以证明 2 是可以形成的最大匹配数。

【样例2输入】

3 1  1 1 1  10

【样例2输出】

1

【样例2解释】

训练师可以匹配所有 3 个运动员  每个运动员至多只能匹配一个训练师,所以最大答案是 1 。

【数据范围】

  • 1 <= players.length, trainers.length <= 105

  • 1 <= players[i], trainers[j] <= 109

作者:亿万年的星光 分类:题解目录 浏览:

【题解】分发饼干

【题目描述】

假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。

对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是满足尽可能多的孩子,并输出这个最大数值。

【输入描述】

3行,第一行n和m表示有n个孩子的胃口,m表示有块饼干。

第二行是这n个孩子的胃口,每个数中间用空格隔开

第三行是m块饼干的尺寸。

【输出描述】

满足尽可能多的最大数值

【样例1输入】

3 2  1 2 3  1 1

【样例1输出】

1

【样例1解释】

你有三个孩子和两块小饼干,3 个孩子的胃口值分别是:1,2,3。  虽然你有两块小饼干,由于他们的尺寸都是 1,你只能让胃口值是 1 的孩子满足。  所以你应该输出 1。

【样例2输入】

2 3  1 2  1 2 3

【样例2输出】

2

【样例2解释】

你有两个孩子和三块小饼干,2 个孩子的胃口值分别是 1,2。  你拥有的饼干数量和尺寸都足以让所有孩子满足。  所以你应该输出 2。

【数据范围】

  • 1 <= g.length <= 3 * 104

  • 0 <= s.length <= 3 * 104

  • 1 <= g[i], s[j] <= 231 - 1

作者:亿万年的星光 分类:题解目录 浏览:

【题解】分糖果问题

【题目描述】



一群孩子做游戏,现在请你根据游戏得分来发糖果,要求如下:

  1. 每个孩子不管得分多少,起码分到一个糖果。

  2. 任意两个相邻的孩子之间,得分较多的孩子必须拿多一些糖果。(若相同则无此限制)

给定一个数组 arrarr 代表得分数组,请返回最少需要多少糖果。

【输入描述】

一行,包含n个数

【输出描述】

一行一个数,表示最少需要多少糖果

【样例输入1】

1 1 2

【样例输出1】

4

【样例1解释】

最优分配方案为1 1 2

【样例2输入】

1 1 1

【样例2输出】

3

【样例2解释】

最优分配方案是1,1,1



作者:亿万年的星光 分类:题解目录 浏览:

【题解】柠檬水找零

【题目描述】

在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。

每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。

注意,一开始你手头没有任何零钱。

给你一个整数数组 bills ,其中 bills[i] 是第 i 位顾客付的账。如果你能给每位顾客正确找零,返回 true ,否则返回 false 。

【输入描述】

输入一行,n个数。

【样例输出】

是否能正确找零

【样例输入1】

5 5 5 10 20

【样例输出1】

true

【样例1解释】

前 3 位顾客那里,我们按顺序收取 3 张 5 美元的钞票。  第 4 位顾客那里,我们收取一张 10 美元的钞票,并返还 5 美元。  第 5 位顾客那里,我们找还一张 10 美元的钞票和一张 5 美元的钞票。  由于所有客户都得到了正确的找零,所以我们输出 true。

【样例输入2】

5 5 10 10 20

【样例输出2】

false

【样例2解释】

前 2 位顾客那里,我们按顺序收取 2 张 5 美元的钞票。  对于接下来的 2 位顾客,我们收取一张 10 美元的钞票,然后返还 5 美元。  对于最后一位顾客,我们无法退回 15 美元,因为我们现在只有两张 10 美元的钞票。  由于不是每位顾客都得到了正确的找零,所以答案是 false。

【提示】

  • 1 <= bills.length <= 105

  • bills[i] 不是 5 就是 10 或是 20 

作者:亿万年的星光 分类:题解目录 浏览:

【题解】阳光

【题目描述】

给出一个n*n的矩阵,矩阵每个元素数值代表这个位置的阳光情况,给出正整数k,需要我们求出哪一处的k*k 区域的阳光平均值最多,阳光平均值为k*k 区域的阳光总和除于k*k。蒜头君想让我们输出阳光平均值最多的那块区域的阳光平均值是多少,结果保留小数位后2 位。



【输入格式】

第一行输入两个正整数 n,k,代表矩阵的大小和题目给出的 k 值,均不超过 50,并且 k 小于等于 n。

接下来第 n 行每行输入 几个正整数,代表矩阵的每个元素的大小,范围均在0到 1000 之间。

【输出格式】

输出题目要求的答案。

【样例输入】

2 2  1 1  1 1

【样例输出】

1.00

样例解释1

由于 n等于k,则直接求该矩阵的阳光平均值即可,注意保留两位小数,



【样例输入2】

4 2  1 1 1 1  1 2 2 1  1 4 4 1  1 1 1 1

样例输出2

3.00

样例解释2

在这个 4*4 的矩阵中,很明显中间部分的 2*2 区域的阳光平均值最多,为 3.00.

作者:亿万年的星光 分类:题解目录 浏览:

【题解】玩具

【题目描述】

商店正在出售蒜头君最喜欢的系列玩具,在接下来的 " 周中,每周会出售其中的一款,同一款玩具不会重复出现。由于是蒜头君最喜欢的系列,他希望尽可能多地购买这些玩具,但是同一款玩具蒜头君只会购买一个。同时,蒜头君的预算只有元,因此他无法将每一款都纳入囊中。此外,蒜头君不能连续两周都购买玩具,否则他会陷入愧疚。现在蒜头君想知道,他最多可以买多少款不同的玩具呢?

【输入格式】

输入共2行:

第一行两个正整数几和 m,中间用一个空格隔开;

第二行共几个正整数,第i个正整数表示第:周出售的玩具的价格

【输出格式】

输出文件只有一行,包含一个整数,表示蒜头君最多能买多少款不同的玩具,

【数据范围】

对于 30%的数据,n< 10,m< 100;

对于 60%的数据,n< 100,m< 1000;

对于 100% 的数据,n< 1000,m< 50000,单个玩具的价格< 1000。

------------------------------

作者:亿万年的星光 分类:C++知识 浏览:

【动态规划】完全背包

【题目描述】

设有n种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为m,今从n种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于m,而价值的和为最大。

【输入】

第一行:两个整数,m(背包容量,m<=200)和n(物品数量n<=30);

第2....N+1行:每行二个整数Wi,Ci表示每个物品的重量和价值。

【输出】

仅一行,一个数,表示最大总价值。

【输入样例】

10 4  2 1  3 3  4 5  7 9



【输出样例】

max=12
作者:亿万年的星光 分类:题解目录 浏览:

植树节

【题目描述】

植树节快要到了,学校要组织志愿者去给树苗浇水。有一排树苗,编号依次是 0,1,2, . . . 。现有 n个志愿者去给树苗浇水,第 i 个志愿者选定了一个区间[ai, bi],表示第 i个志愿者将 [ai,bi] 这一区间内的每一棵树都浇一次水。如某个志愿者选择的浇水区间为 [4,9] ,表示他将给编号为 4,5,6,7,8,9 的树各浇水一次。当所有的志愿者完成各自所选区间的浇水后,可能有些树苗被不同的志愿者浇水多次,也可能有的树苗一次也没被浇过水。请你求出浇水最多的树苗被浇了多少次

【输入描述】

第 1 行,一个整数 n,表示志愿者的人数。

第 2 行到第 n + 1 行,每行两个整数 ai, bi( i= 0,1,2, . . . n− 1) ,表示志愿者 i 选择的浇水区间

【输出描述】

输出 1 行, 1 个整数,表示浇水最多的树苗被浇水的次数。

【样例输入1】

4  0 2  2 4  1 4  6 7

【样例输出1】

3

【样例输入2】

4  1000000 1000000  1000000 1000000  0 1000000  1 1000000

【样例输出2】

4

对于所有的数据:n≤ 105;0 ≤ ai≤ bi ≤ 106 。

测试点编号ai<=bi<=n<=特殊性质
1,2,3103103103
4,5,6,7106106105
8106106105ai=bi
9106106105ai=1,bi=103
10106106105
作者:亿万年的星光 分类:题解目录 浏览: