解法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的方式记录而已,小学数学不多说。

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

  1. Spark中Task,Partition,RDD、节点数、Executor数、core数目(线程池)、mem数

    Spark中Task,Partition,RDD.节点数.Executor数.core数目的关系和Application,Driver,Job,Task,Stage理解 from:https://bl ...

  2. 力扣1512.好数对的数目

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

  3. 1512. 好数对的数目

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

  4. 好数对的数目(C++)

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

  5. spark:Task,Partition,RDD、节点数、Executor数、core数目的关系和Application,Driver,Job,Task,Stage理解

    梳理一下Spark中关于并发度涉及的几个概念File,Block,Split,Task,Partition,RDD以及节点数.Executor数.core数目的关系. 输入可能以多个文件的形式存储在H ...

  6. 求出千位数上的数加百位数上的数等于十位数上的数加个位数上的数的个数cnt,再把所有满足条件的四位数依次存入数组b中,然后对数组b中的四位数按从大到小的顺序进行排序。

    已知数据文件IN13.DAT中存有300个四位数,并已调用读函数readDat()把这些数存入数组a中,请编制一个函数jsValue(),其功能是:求出千位数上的数加百位数上的数等于十位数上的数加个位 ...

  7. iodine免费上网——本质就是利用dns tunnel建立tcp,然后tcp proxy来实现通过访问虚拟dns0网卡来访问你的dns 授权server...

    我的命令: server端: sudo iodined -P passwd -f -DD 10.0.0.100 abc.com client端(直连模式,-r表示使用xxx.abc.com的xxx来转 ...

  8. 晋江作者自查收藏数、评论数、点击量变化并利用微信发送给自己Python代码

    最近心血来潮在晋江写了本扑街文学,大概10w字左右,虽然完全没人看,但毕竟是我的心血,如果有访问量的变化还是想及时知道,并且想要及时的消息提示--那么发wx就再好不过了. 那么就开整吧. 第一步:获得 ...

  9. 趣味数模问题2-四人追逐问题(利用matlab进行模拟)

    如图1,在正方形ABCD的四个顶点各有一个人.设在初始时刻t=0时,四人同时出发匀速以v沿顺时针走向下一个人.如果他们始终对准下一个人为目标行进,最终结果会如何.作出各自的运动轨迹. matlab模拟 ...

最新文章

  1. sublime text3 前端插件介绍
  2. 云计算模型 - 1. 概述
  3. 李萍matlab实验报告,基于实验报告自动批阅的系统分析
  4. 灵图天行者9 pc版_原神PC预下载现已开启
  5. SAP ABAP SICF事务码和SAP Hybris的链式过滤器filter chain
  6. create_metrology_model创建测量几何形状所需的数据结构(原理)
  7. matplotlib之scatter
  8. C# - Environment类,获取桌面的路径
  9. Facebook广告设定技巧经验分享
  10. CentOS 7的安装
  11. android有用代码片段 (一)
  12. C++primer 6.7节练习
  13. Java中sleep,wait的区别
  14. win7计算机 管理缺失文件夹,win7缺失dll文件一键修复的方法
  15. Eclipse主题插件DevStyle修改Eclipse主题
  16. 软件设计师历年真题(2016-2021)
  17. android开发从入门到精通 扶松柏 PDF版
  18. 电商后台管理系统--笔记
  19. 从零搭建美团饿了么外卖红包CPS小程序教程
  20. c++:过滤多余的空格

热门文章

  1. Python—day3
  2. [python]-数据科学库Numpy学习
  3. leecode 题解 || Merge k Sorted Lists 问题
  4. HttpService远程校验
  5. winform TopMost
  6. php curl 采集文件,curl获取远程文件内容
  7. python apscheduler执行_python apscheduler 每两小时执行一次
  8. 中国连计算机硬盘都无法生产吗,中国仍无能力制造出电脑中的硬盘
  9. mysql 经典入门教程_MySQL 经典入门教程
  10. 华为鸿蒙出来正当时,关于华为鸿蒙操作系统,中兴率先表态