1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Leetcode1512. 好数对的数目 抽出本质原型 利用范围条件

Leetcode1512. 好数对的数目 抽出本质原型 利用范围条件

时间:2024-01-26 15:21:01

相关推荐

Leetcode1512. 好数对的数目  抽出本质原型  利用范围条件

解法1:暴力枚举

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

没啥可说的,就是小学数学问题…

解法2:类比:求解重复数字的个数

这道题的本质,其实就是求解重复数字的个数,只不过,统计的是对儿数统计规则不一样而已!,也就是

数字有1个,0对儿数字有2个,1对儿数字有3个,1+2 = 3对儿数字有4个,1+2+3 = 6对儿……

小学数学,想起来没?

写法1:利用题目限制条件

我们直接开一个长度100的数组就行了

class Solution {public int numIdenticalPairs(int[] nums) {int sum = 0;int[] arr = new int[100];for(int v: nums){sum += arr[v-1];arr[v-1]++;}return sum;}}

这样一来,我们为全部可能出现的数字都分配了一个位置,也就是数组下标,如果数字出现,就记录一次,然后总的记录也按照统计规则进行。

写法2:利用哈希表

对于上述写法,确实容易,但是浪费空间,而且如果题目没有这个限制呢?其实我们可以看到记录某个数字重复次数,其实可以用哈希表记录呀!

How to use HashMap in Java?

class Solution {public int numIdenticalPairs(int[] nums) {// Using HashMapHashMap<Integer,Integer> hashMap = new HashMap<>();Integer sum = 0;for(int value: nums){sum += hashMap.getOrDefault(value,0);hashMap.put(value,hashMap.getOrDefault(value,0) + 1);}return sum;}}

getOrDefault方法,就是

如果有这个关键字,就返回关键字对应的值如果没有,就返回设置的默认值

哈希表的本质,其实就是值查找

小结

对于这个好数对儿题目,本质是另外一道题,也就是统计一个数组中,有哪些重复的数字,且记录他们出现的次数。

至于好数对儿,只是按照n(n-1)/2的方式记录而已,小学数学不多说。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。