小红每天都要背单词,然后她会把每天记住了多少单词记录下来,并在小红书上打卡。
当小红背单词时,如果她已经记住了
个单词,且背了一个没有记住的新单词
次,则她就会记住这个新的单词。
例如,当她按顺序背["you","thank","thank"]时,她第一次背单词"you"时她就能记住"you"。而由于她已经记住了一个单词,所以需要背两次"thank"才能记住"thank"。
第一行一个整数。
接下来行,每行一个字符串,保证每个字符串长度不超过 10。
输出一个整数,表示她记住了多少个单词。
5 you thank queue queue thank
2
小红先记住了单词"you",又因为背了两次"queue",于是记住了单词"queue"。由于已经记住了两个单词,所以背两次"thank"还不能让小红记住。
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int k=1;
int sum =0;
for(int i=0; i<n; i++){
k++;
sum = sum+k;
if(sum>=n){
break;
}
}
System.out.println(k-1);
}
} import java.util.*;
public class Main {
public static void main(String[] args) {
// 创建Scanner对象,用于读取输入数据
Scanner in = new Scanner(System.in);
// 读取第一行输入的整数n,代表小红背诵单词的总次数
int n = in.nextInt();
// 定义HashSet集合,存储已经记住的单词(HashSet查询效率高,适合判断是否存在)
Set<String> knownWords = new HashSet<>();
// 定义HashMap,存储"未记住但已背诵过"的单词及其累计背诵次数(键:单词,值:累计次数)
Map<String, Integer> countWords = new HashMap<>();
// 循环遍历每一次背诵的单词(共n次)
for (int i = 0; i < n; i++) {
// 读取当前背诵的单词
String word = in.next();
// 若当前单词已在"记住的单词"集合中,直接跳过(无需再统计次数)
if (knownWords.contains(word)) {
continue;
}
// 若单词未记住:更新其累计背诵次数
// getOrDefault(word, 0):若单词已在map中,取当前次数;否则取默认值0,之后+1
countWords.put(word, countWords.getOrDefault(word, 0) + 1);
// 获取当前已记住的单词总数k(记忆新单词的要求是:累计次数 ≥ k+1)
int k = knownWords.size();
// 检查当前单词的累计次数是否达到记忆要求
if (countWords.get(word) >= k + 1) {
// 达到要求:将单词加入"记住的单词"集合
knownWords.add(word);
}
}
// 输出最终记住的单词总数(即knownWords集合的大小)
System.out.println(knownWords.size());
}
}