算法零基础学习计数法
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
可以这样描述:
- 每一个下标对应不同的目标。
- 对于某一个具体的
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讲》(第39讲) 非比较排序 - 计数排序
《算法零基础100讲》(第24讲) 字符串算法 - 字符计数法