首页 > 其他分享 >MarsCode青训营打卡Day7(2025年1月20日)|稀土掘金-358.单词出现频率统计、298.素数元素的统计

MarsCode青训营打卡Day7(2025年1月20日)|稀土掘金-358.单词出现频率统计、298.素数元素的统计

时间:2025-01-20 12:58:30浏览次数:3  
标签:map word List 单词 素数 298 sb 20 打卡

资源引用:

358.单词出现频率统计

298.素数元素的统计

今日小记:

1.灵活使用TreeMap解决按字典排序的问题

2.使用StringBuilder构造字符串,注意重置复用

稀土掘金-358.单词出现频率统计(358.单词出现频率统计

题目分析:

给定一个英文句子s,需统计其中的全部单词及其出现字数,最终按照字母顺序将统计结果进行排序,并按照"word:count"的格式添入List<String>,最终返回该List。

解题重点:

  • 统计单词及其频次,可使用哈希映射,即Map来实现。
  • 观察样例可发现,“字母顺序”即按照ASCII码的顺序对各个单词(包括数字)进行排序。

由此二点可知,可使用默认按照字典顺序(字母顺序)进行排序的TreeMap来进行对单词及其频次的统计,只需按照遍历TreeMap的顺序输出到List即可。

解题思路:

  1. 以空格为间隔符,依次读出全部单词并用TreeMap记录其频次
  2. 按照遍历键的顺序,借助StringBuilder构造"word:count"格式的字符串,将单词及其频次输出到List中
  3. 最终返回该List

总结反思:

时刻谨记:循环遍历是否确保处理了首尾特殊情况。

import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.TreeMap;

public class Main {
    public static List<String> solution(String s) {
        List<String> resList = new ArrayList<>();
        Map<String, Integer> map = new TreeMap<>();
        StringBuilder sb = new StringBuilder();

        /* 1.读取单词并统计其频次 */
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == ' ') {
                String word = sb.toString();
                map.put(word, map.getOrDefault(word, 0) + 1);
                sb.setLength(0);
            } else {
                sb.append(s.charAt(i));
            }
        }
        if (sb.length() > 0) {// 处理句子末尾的单词
            String word = sb.toString();
            map.put(word, map.getOrDefault(word, 0) + 1);
            sb.setLength(0);
        }

        /* 2.按照遍历键的顺序构造符合格式的字符串列表,返回统计结果 */
        for (String word : map.keySet()) {
            sb.append(word + ':' + map.get(word));
            resList.add(sb.toString());
            sb.setLength(0);
        }
        return resList;
    }

    public static void main(String[] args) {
        System.out.println(solution("New to Python or choosing between Python 2 and Python 3 Read Python 2 or Python 3")
                .equals(List.of("2:2", "3:2", "New:1", "Python:5", "Read:1", "and:1", "between:1", "choosing:1", "or:2",
                        "to:1")));
        System.out.println(solution("hello world hello python").equals(List.of("hello:2", "python:1", "world:1")));
        System.out.println(solution("the quick brown fox jumps over the lazy dog")
                .equals(List.of("brown:1", "dog:1", "fox:1", "jumps:1", "lazy:1", "over:1", "quick:1", "the:2")));
    }
}

稀土掘金-298.素数元素的统计(298.素数元素的统计

题目分析:

“素数元素”的定义:一种元素,若其满足在数组中的出现次数为素数,且元素值本身也为素数,才叫做素数元素。

本题要求给定的整型序列a种的素数元素个数。

解题重点:

  • 显然可以借助Map对数组中的素数及其频次进行统计,再从中筛选出符合条件的个数。
  • 素数的判断:对于一个大于1的整数,从2开始,到该数的平方根,遍历其是否为该数的因数,若均不为因数,则该数是素数。

解题思路:

  1. 遍历整形序列a中的每一个数,判断其是否为素数,若为素数,则将其添入Map并统计其频次
  2. 按值遍历Map,判断每一个值是否为素数,若是素数,则结果得数+1。
  3. 最终返回结果。
import java.util.*;

public class Main {
    public static int solution(List<Integer> a) {
        Map<Integer, Integer> map = new HashMap<>();
        int res = 0;
        /*1. */
        for (int num : a) {
            if (isPrime(num)) {
                map.put(num, map.getOrDefault(num, 0) + 1);
            }
        }
        /*2. */
        for (int value : map.values()) {
            if (isPrime(value)) {
                res++;
            }
        }
        return res;
    }

    public static boolean isPrime(int num) {
        if (num <= 1) {
            return false;
        }
        for (int i = 2; i <= Math.sqrt(num); i++) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        System.out.println(solution(Arrays.asList(1, 2, 3, 2, 5, 7, 7, 7, 5)) == 3);
        System.out.println(solution(Arrays.asList(1, 4, 6, 8, 10, 12)) == 0);
        System.out.println(solution(Arrays.asList(3, 3, 3, 5, 5, 5, 5)) == 1);
    }
}

标签:map,word,List,单词,素数,298,sb,20,打卡
From: https://blog.csdn.net/csy031117/article/details/145258611

相关文章