- 题目链接:https://www.nowcoder.com/exam/company?currentTab=recommand&jobId=100&selectStatus=0&tagIds=179
1.平均数为k的最长连续子数组 #
import java.util.Scanner;
import java.lang.*;
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt(), k = in.nextInt();
long[] nums = new long[n + 1];
int i = 0, ans = -1;
Map<Long, Integer> map = new HashMap<>();
map.put(0L, 0);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
nums[++i] += in.nextInt() - k + nums[i - 1];
if(!map.containsKey(nums[i])) map.put(nums[i], i);
else ans = Math.max(ans, i - map.get(nums[i]));
}
System.out.println(ans);
}
}
2.小球投盒 #
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 输入的n, m
int n = sc.nextInt(), m = sc.nextInt();
// 使用 HashSet 存储整数集合
Set<Integer> set = new HashSet<>();
// 初始化 set 包含从 1 到 n 的所有整数
for (int i = 1; i <= n; i++) set.add(i);
// 循环计数变量
int i;
for (i = 1; i <= m; i++) {
if (sc.nextInt() == 1) {
// 如果输入为 1,移除下一个输入的整数
set.remove(sc.nextInt());
// 如果集合为空,退出循环
if (set.isEmpty()) break;
} else {
// 否则,读取下一个输入的整数
int x = sc.nextInt();
// 如果集合中不包含 x,退出循环
if (!set.contains(x)) break;
// 否则,重置集合并添加 x
set = new HashSet<>();
set.add(x);
}
}
// 输出结果,如果 i 大于 m,输出 -1,否则输出 i
System.out.println(i > m ? -1 : i);
}
}
4.小美的游戏 #
用long也会爆,后来用BigDecimal过了。
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
long temp = (long) (1e9) + 7;
// 注意 hasNext 和 hasNextLine 的区别
Queue<Long> q = new PriorityQueue<>(new Comparator<Long>() {
public int compare(Long a, Long b) {
if (b > a) return 1;
return -1;
}
});
int n = in.nextInt(), k = in.nextInt();
for (int i = 0; i < n; i++) {
q.offer(in.nextLong());
}
for (int i = 0; i < k; i++) {
long a1 = q.poll();
long a2 = q.poll();
q.offer((a1 * a2) % temp);
q.offer((long)1);
}
long ans = 0;
while (!q.isEmpty()) {
ans = ( ans + q.poll()) % temp;
}
System.out.print(ans);
}
}
import java.math.BigDecimal;
import java.util.PriorityQueue;
import java.util.Scanner;
public class Main {
public static final int MOD = (int) 1e9 + 7;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
PriorityQueue<BigDecimal> pq = new PriorityQueue<>((a, b) -> b.compareTo(a));
for (int i = 0; i < n; i++) {
long x = sc.nextLong();
pq.offer(BigDecimal.valueOf(x));
}
BigDecimal ans = BigDecimal.ZERO;
while (k-- > 0) {
BigDecimal x = pq.poll();
BigDecimal y = pq.poll();
pq.offer(x.multiply(y));
pq.offer(BigDecimal.ONE);
}
while (!pq.isEmpty()) {
ans = ans.add(pq.poll());
}
System.out.println(ans.remainder(BigDecimal.valueOf(MOD)));
}
}