提示:4道练习题大概内容:
一、三个数的最大乘积?
-
给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
示例 1:
输入:nums = [1,2,3]
输出:6
示例 2:输入:nums = [1,2,3,4]
输出:24
示例 3:输入:nums = [-1,-2,-3]
输出:-6
提示:
3 <= nums.length <= 104
-1000 <= nums[i] <= 1000
链接:https://leetcode.cn/problems/maximum-product-of-three-numbersclass·Solution·{ ····public·int·maximumProduct(int[]·nums)·{ ········int·n·=·nums.length; ········Arrays.sort(nums); ········return·Math.max(nums[0]*nums[1]*nums[n·-·1],·nums[n·-·1]*nums[n·-·2]*nums[n·-·3]); ····} }
-
给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。
换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。
以数组形式返回答案。
示例 1:
输入:nums = [8,1,2,2,3] 输出:[4,0,1,1,3] 解释: 对于 nums[0]=8 存在四个比它小的数字:(1,2,2 和 3)。 对于 nums[1]=1 不存在比它小的数字。 对于 nums[2]=2 存在一个比它小的数字:(1)。 对于 nums[3]=2 存在一个比它小的数字:(1)。 对于 nums[4]=3 存在三个比它小的数字:(1,2 和 2)。
示例 2:
输入:nums = [6,5,4,8] 输出:[2,1,0,3]
示例 3:
输入:nums = [7,7,7,7] 输出:[0,0,0,0]
提示:
- 2 <= nums.length <= 500
- 0 <= nums[i] <= 100
class·Solution·{
····public·int[]·smallerNumbersThanCurrent(int[]·nums)·{
········int[]·arrays·=·new·int[101];
→ → for·(int·num·:·nums)
→ → → arrays[num]·+=·1;
→ → for·(int·i·=·1;·i·<·arrays.length;·i++)
→ → → arrays[i]·+=·arrays[i·-·1];
→ → for·(int·i·=·0;·i·<·nums.length;·i++)
→ → → nums[i]·=·nums[i]·!=·0·?·arrays[nums[i]·-·1]·:·0;
→ → return·nums;
····}
}
三、使数组唯一的最小增量
给你一个整数数组 nums 。每次 move 操作将会选择任意一个满足 0 <= i < nums.length 的下标 i,并将 nums[i] 递增 1。
返回使 nums 中的每个值都变成唯一的所需要的最少操作次数。
示例 1:
输入:nums = [1,2,2] 输出:1 解释:经过一次 move 操作,数组将变为 [1, 2, 3]。
示例 2:
输入:nums = [3,2,1,2,1,7] 输出:6 解释:经过 6 次 move 操作,数组将变为 [3, 4, 1, 2, 5, 7]。 可以看出 5 次或 5 次以下的 move 操作是不能让数组的每个值唯一的
提示:
- 1 <= nums.length <= 105
- 0 <= nums[i] <= 105
class·Solution·{
····public·int·minIncrementForUnique(int[]·A)·{
········//·先排序
········Arrays.sort(A);
········int·move·=·0;
········//·遍历数组,若当前元素小于等于它的前一个元素,则将其变为前一个数+1
········for·(int·i·=·1;·i·<·A.length;·i++)·{
············if·(A[i]·<=·A[i·-·1])·{
················int·pre·=·A[i];
················A[i]·=·A[i·-·1]·+·1;
················move·+=·A[i]·-·pre;
············}
········}
········return·move;
····}
}
四、Rising Sand
B. 升沙
每次测试的时间限制
1 秒
每次测试的内存限制
为 256 MB
输入
标准输入
输出
标准输出
有$$$n$$$$$$$$$$$$$i$$$$-th的沙堆有$$$a_i$$$$$沙块。如果 $$$i$1 <我< n$$$$ 和 $$$a_i > a_{i-1} + a_{i+1}$$$$,则 $$$$$-th 堆称为太高。也就是说,如果一堆沙子的沙子比两个邻居的总和还要多,那么它就太高了。(请注意,数组两端的堆积不能太高。
您将获得一个整数 $$$k$$$。一项操作包括挑选$ $ $ $k $ $ $连续的沙堆,并向所有沙子添加一个单位的沙子。正式地,选择 $$$1 leq l,r leq n$$$$,使得 $$$r-l+1=k$$$。。然后,对于所有 $$$l leq i leq r$$$,更新 $$$a_i gets a_i+1$$$。。
在一些(可能为零)操作后,同时可能太高的最大桩数是多少?
输入输入由多个测试用例组成。第一行包含一个整数 $$$t$$$ ($$$1 leq t leq 1000$$$)— 测试用例的数量。测试用例的描述如下。
每个测试用例的第一行包含两个整数 $$$n$$$ 和 $$$k$$$ ($$3 leq n leq 2 cdot 10^5$$$; $$$1 leq k leq n$$$) — 分别是沙堆的数量和操作的大小。
每个测试用例的第二行包含 $$$n$$$ 整数 $$$a_1、a_2、ldots a_n$$$($$1 le a_i le 10^9$$$)— 堆的大小。
可以保证所有测试用例的 $$$n$$$ 总和不超过 $$$2 cdot 10^5$$$。。
输出对于每个测试用例,输出一个整数 — 在一些(可能为零)操作后同时太高的最大桩数。
例 输入 复制3 5 2 2 9 2 4 1 4 4 1 3 2 1 3 1 1 3 1输出 复制
2 0 1注意
在第一个测试用例中,我们可以执行以下三个操作:
- 将一个单位的沙子添加到堆中 $$$1$$$ 和 $$$2$$$: $$$[color{red}{3}, color{red}{10}, 2, 4, 1]$$$.
- 将一个单位的沙子添加到堆中 $$$4$$$ 和 $$$$$$ $ $ $ $ $ $$[3, 10, 2, color{red}{5}, color{red}{2}]$$$..
- 将一个单位的沙子添加到堆中 $$$3$$$ 和 $$$$$$ $ $ $ $ $ $$[3, 10, color{red}{3}, color{red}{6}, 2]$$$..
在第二个测试用例中,任何操作都会将所有桩增加 $$$1$$$ 单位,因此太高桩的数量将始终为 $$$0$$$$。。
在第三个测试用例中,我们可以将任何桩增加 $$$1$$$ 单位的沙子。可以看出,过高桩的最大数量是$$$1$$$
import java.util.*;
public class Main{
public static void main(String[] args){
// System.out.println("hello world");
Scanner scanner = new Scanner(System.in);
int t=scanner.nextInt();
while(t--!=0){
int n=scanner.nextInt();
int k=scanner.nextInt();
int[] a=new int[n];
for(int i=0;ia[i-1]+a[i+1])ans++;
}
System.out.println(ans);
}
}
}
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。



