day1Java算法练习
·
一、笨小猴
题目:
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 读一个单词(本题只有一个 case)
String s = in.next();
int[] cnt = new int[26];
// 统计每个字母出现次数
for (char c : s.toCharArray()) {
cnt[c - 'a']++;
}
int max = 0;
int min = 1000; // 初始足够大
for (int num : cnt) {
if (num == 0) continue; // 没出现过的字母不算
if (num > max) max = num;
if (num < min) min = num;
}
int t = max - min;
boolean isPrime = true;
// 质数判断
if (t <= 1) {
isPrime = false;
} else {
for (int i = 2; i * i <= t; i++) { // 用 i*i 避免浮点
if (t % i == 0) {
isPrime = false;
break;
}
}
}
if (isPrime) {
System.out.println("Lucky Word");
System.out.println(t);
} else {
System.out.println("No Answer");
System.out.println(0);
}
}
}
知识点:
1.输入字符串
Scanner in = new Scanner(System.in);
// 读一个单词(本题只有一个 case)
String s = in.next();
2.统计每个字母出现次数,找出出现次数最多和最少的字母
int[] cnt = new int[26];
// 统计每个字母出现次数
for (char c : s.toCharArray()) {
cnt[c - 'a']++;
}
int max = 0;
int min = 1000; // 初始足够大
for (int num : cnt) {
if (num == 0) continue; // 没出现过的字母不算
if (num > max) max = num;
if (num < min) min = num;
}
3.质数判断
int t = max - min;
boolean isPrime = true;
// 质数判断
if (t <= 1) {
isPrime = false;
} else {
for (int i = 2; i * i <= t; i++) { // 用 i*i 避免浮点
if (t % i == 0) {
isPrime = false;
break;
}
}
}
二、主持人调度
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param schedule int整型ArrayList<ArrayList<Integer>>
* @return bool布尔型
*/
public boolean hostschedule (ArrayList<ArrayList<Integer>> schedule) {
int n = schedule.size();
int[] start = new int[n];
int[] end = new int[n];
for (int i = 0; i < n; i++) {
start[i] = schedule.get(i).get(0);
end[i] = schedule.get(i).get(1);
}
Arrays.sort(start);
Arrays.sort(end);
for (int i = 0; i < n - 1; i++) {
if (start[i + 1] < end[i]) {
return false;
}
}
return true;
}
}
1.ArrayList<ArrayList<Integer>>是动态二维数组,ArrayList 嵌套集合
2.拿到所有活动起止时间
start[] 存所有活动开始时间。end[] 存所有活动结束时间
int[] start = new int[n];
int[] end = new int[n];
3.ArrayList 集合遍历
for (int i = 0; i < n; i++) {
start[i] = schedule.get(i).get(0);
end[i] = schedule.get(i).get(1);
}
4.数组排序 Arrays.sort () --贪心
Arrays.sort(start); // 给开始时间排序
Arrays.sort(end); // 给结束时间排序
5.区间重叠判断
for (int i = 0; i < n - 1; i++) {
if (start[i + 1] < end[i]) {
return false; // 有重叠 → 不行
}
}
更多推荐




所有评论(0)