8月算法训练------第七天(哈希表)解题报告

8月算法训练------第七天(哈希表)解题报告

题目类型:哈希表
题目难度:简单

第一题、2068. 检查两个字符串是否几乎相等

  1. 题目链接:2068. 检查两个字符串是否几乎相等
  2. 思路分析:
    字符串中的每个字符都是在'a'~'z'所以定义一个长度为26的数组,表示26个字符,遍历word1,在对应位置的num[i]++
    然后,遍历word2,在对应位置num[i]--
    遍历一遍num数组,如果num[i]的绝对值大于3,则返回false,若都没有大于3的,就返回true。
  3. 代码:
class Solution {
    public boolean checkAlmostEquivalent(String word1, String word2) {
        int[] num = new int[26];
        for(int i = 0; i < word1.length(); i++){
            char c = word1.charAt(i);
            num[c-'a']++;
        }
        for(int i = 0; i < word2.length(); i++){
            char c = word2.charAt(i);
            num[c-'a']--;
        }
        for(int i = 0; i < num.length; i++){
            if(Math.abs(num[i]) > 3) return false;
        }
        return true;
    }
}

第二题、2283. 判断一个数的数字计数是否等于数位的值

  1. 题目链接:2283. 判断一个数的数字计数是否等于数位的值
  2. 思路分析:
    这一题和上一题思路其实差不多,字符串中的字符都是在'0'~'9'所以申请一个长度为10的数组,用于存放数字出现的次数,第一次遍历字符串,用来找出字符串中每个数字出现的次数;
    第二次遍历数组就用来检查是否符合要求。
  3. 代码:
class Solution {
    public boolean digitCount(String num) {
        int[] arr = new int[10];
        for(int i = 0; i < num.length(); i++){
            char c = num.charAt(i);
            String s = Character.toString(c);
            arr[Integer.parseInt(s)]++;
        }
        for(int i = 0; i < num.length(); i++){
            char c = num.charAt(i);
            String s = Character.toString(c);
            int a = Integer.parseInt(s);
            if(a != arr[i]){
                return false;
            }
        }
        return true;
    }
}

第三题、剑指 Offer 40. 最小的k个数

  1. 题目链接:剑指 Offer 40. 最小的k个数
  2. 思路分析:
    将arr进行排序,将最小的k个数以数组的形式输出。
  3. 代码:
class Solution {
    public int[] getLeastNumbers(int[] arr, int k) {
        Arrays.sort(arr);
        int[] num = new int[k];
        for(int i = 0; i < k; i++){
            num[i] = arr[i];
        }
        return num;
    }
}

第四题、剑指 Offer 41. 数据流中的中位数

  1. 题目链接:剑指 Offer 41. 数据流中的中位数

  2. 思路分析:

  3. 代码:

芜湖 起飞
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值