算法零基础学习计数法

Posted 妙七先生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法零基础学习计数法相关的知识,希望对你有一定的参考价值。

前言

今天和英雄哥一起学习「计数法」,一起来万人千题学习算法吧!

计数法

计数法的关键在于:使用 计数器 对目标的数量等进行统计。

例题:好数对的数目

链接:1512. 好数对的数目

问题描述

给你一个整数数组 nums
如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。
返回好数对的数目。

思路分析

这道题需要对 好数对 的数目进行统计,根据题意,好数对指的是数值相同的两对数的下标。所以,直接遍历数组,需要存在几对相同的数。

代码

class Solution 
    public int numIdenticalPairs(int[] nums) 
        int count = 0;
        int length = nums.length;
        for(int i = 0; i < length - 1; ++i)
            for(int j = i + 1; j < length; ++j)
                if(nums[i] == nums[j])
                    count++;
            
        

        return count;
    

计数法的改进——计数数组

如果目标有多个,那么,可以使用 计数数组 对目标进行计数。
对计数数组 cnt 可以这样描述:

  1. 每一个下标对应不同的目标
  2. 对于某一个具体的 cnt[i],应该存放该目标的数量。

目标的特征:每一个目标都有一个唯一的数值与之相对;目标相同的话,数值也相同。

练习:唯一元素的和

链接:1748. 唯一元素的和

问题描述

给你一个整数数组 nums 。数组中唯一元素是那些只出现 恰好一次 的元素。
请你返回 nums 中唯一元素的 和 。

提示

1 <= nums.length <= 100
1 <= nums[i] <= 100

思路分析

该问题需要找到数组 nums 中所有的 唯一元素,再计算他们的和。

由于该数组中的元素在 [1, 100] 范围之内,所有可以使用一个大小为 101 的计数数组对 nums 数组的元素进行计数。然后筛选出其中所有的 **数量为 1 的元素(即,唯一元素)**进行 求和 操作。

代码

class Solution 
    public int sumOfUnique(int[] nums) 
        int[] cnt = new int[101];
        int sum = 0;
        for(int i = 0; i < nums.length; ++i)
            ++cnt[nums[i]];
        
        for(int i = 1; i <= 100; ++i)
            if(cnt[i] == 1)
                sum += i;
        

        return sum;
    

相似题目

题号题目
1检查是否所有字符出现次数相同
2找到所有数组中消失的数字

以上是关于算法零基础学习计数法的主要内容,如果未能解决你的问题,请参考以下文章

算法零基础学习计数法

《算法零基础100讲》(第5讲) 计数法

《算法零基础100讲》(第39讲) 非比较排序 - 计数排序

《算法零基础100讲》(第24讲) 字符串算法 - 字符计数法

《算法零基础100例》(第42例) 非比较排序 - 计数排序

题解《算法零基础100例》(第5例) 计数法(java版)