好久没更新博客了,写博客分享是个好习惯,发现坚持是比较难得的一件事情。

2021年第一更,就写一篇比较简单常用的算法入门题吧,主要是利用程序算法思想,求数组中每个元素出现的次数。

先看一下需求描述:

现在有一列数组:
    a[0] , a[1] , a[2] , ...... a[n-1]
求这列数组中每个元素出现的次数
打印格式: {a[0]=次数,a[1]=次数,......a[m]=次数}
打印说明:打印结果中,a[m]不重复打印,a[m]可以不按照数组顺序

拿到这样一道题,我们脑海中可能想到很多种方式来解决这个问题,看一下以下总结的两种经典做法吧。

1、纯数组方式

/*** 用数组的方式,求数组中每个元素出现的次数* @param arr*/public void ArrNumOfEveryone(int arr[]) {int b[] = new int[100]; //用于存放数组中每个元素出现的次数,对应关系arr[i]->b[i]for(int i = 0 ;i<=arr.length-1;i++)for(int j=0 ; j<=arr.length-1;j++) {if(arr[i]==arr[j]) {b[i]++;}}//打印第一个元素及其出现的次数System.out.print("{"+arr[0]+"="+b[0]);boolean flag = false; //去重标志,元素相同不重复打印//这里采用数组内部比较法,不用hashset容器for(int x = 1 ;x<=arr.length - 1 ; x++) {for(int y = 0 ;y<=x - 1 ;y++) {if(arr[x]==arr[y])   flag = true;}if(flag == true) {flag = false; //重新初始化标志continue; //元素相同不重复打印}System.out.print(" ," + arr[x] +"=" + b[x]);}System.out.println("}"); }

以上的做法是用纯数组的思想,用另外一个数组来记录原来数组的元素出现的个数,通过循环遍历和比较去重,打印出满足需求的结果。这段程序在可读性方面比较一般,而且出现两次嵌套循环,效率比较低下。下面第二种方式,借助于Java util中的集合容器类,更加高效地改进了程序,而且代码简洁,效率高,可读性强。

2、容器方式

/*** 用容器的方式,求数组中每个元素出现的次数* @param arr*/public void hashNumOfEveryone(int arr[]) {//构建一个hashmap,key为数组元素,value为元素对应的个数Map<Integer,Integer> map = new HashMap<Integer,Integer>();for(int i = 0;i<=arr.length-1;i++) {//arr[i]不存在hashmap的key中,将其作为key存入map中,value初始化为1if(!map.containsKey(arr[i])) {map.put(arr[i], 1);}//arr[i]存在hashmap的key中,将其作为key存入map中,原有的value+1,这里key值相同会覆盖原有的键值对else {map.put(arr[i], map.get(arr[i])+1);}      }//打印System.out.print(map);}

Java的util包为开发者提供了大量便于开发和使用的工具类,集合容器就是最常用的。希望通过这篇文章,能提醒到读者朋友们有空记得复习Java基础源码。

水文简单,大神略过~

一题多解——求数组中每个元素出现的次数相关推荐

  1. JavaScript求数组中每个元素的个数,如数组str = [1,2,3,2,4,1,2]中元素2的个数为2。要求:使用对象知识来实现,输出结果为对象,对象包含数组元素和个数值。

    求数组中每个元素的个数,如数组str = [1,2,3,2,4,1,2]中元素2的个数为2. 要求:使用对象知识来实现,输出结果为对象,对象包含数组元素和个数值. <script>var ...

  2. js计算数组中每个元素出现的次数(2种方法)

    js计算数组中每个元素出现的次数(2种方法) js动态生成唯一id Javascript生成全局唯一标识符(GUID,UUID)的方法

  3. LeetCode中等题之在排序数组中查找元素的第一个和最后一个位置

    题目 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 如果数组中不存在目标值 target,返回 [-1, -1]. 进阶: 你可以 ...

  4. es6 取数组的第一个和最后一个_JS算法题之每日一题- 17.在排序数组中查找元素的第一个和最后一个位置...

    微信公众号: 题 目 Q:给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置.你的算法时间复杂度必须是 O(log n) 级别.如果数组中 ...

  5. C#LeetCode刷题之#34-在排序数组中查找元素的第一个和最后一个位置(Find First and Last Position of Element in Sorted Array)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4970 访问. 给定一个按照升序排列的整数数组 nums,和一个目 ...

  6. 求数组中各个元素的个数?

    1 //声明数组 2 char[] chars = {'A', 'B', 'C', 'A', 'A', 'B'}; 3 4 //声明字典,如果chars数组是int类型的, 5 //则相应的colle ...

  7. Leetcode刷题 34.在排序数组中查找元素的第一个和最后一个位置

    解法1: class Solution { public:vector<int> searchRange(vector<int>& nums, int target) ...

  8. [Letcode]第[34]题[JAVA][在排序数组中查找元素的第一个和最后一个位置][暴力][二分]

    [问题描述][中等] [解答思路] 1. 线性扫描(不符合题意) 时间复杂度:O(N) 空间复杂度:O(1) class Solution {public int[] searchRange(int[ ...

  9. java数组中相同的元素个数_java求两个数组中相同元素出现的次数

    法一 public class Methodfifth { public void mixed(int array1[], int n1, int array2[], int n2) { int i ...

最新文章

  1. create-react-app 2.0中使用antd(eject)
  2. SQL Server中临时表与表变量的区别
  3. python中如何创建类的对象_python面向对象中如何建立具体的对象?
  4. SM30里如何输入物料号自动带出物料描述
  5. php图片缩略图的方法,php生成图片缩略图的方法
  6. Linux内核地址空间为什么1GB,为什么Windows为其系统地址空间预留1Gb(或2 Gb)?
  7. STL之deque详解
  8. 活照片 android,活照片app安卓
  9. 多益网络 视频面试面试总结20180816
  10. linux free 命令中buffers、cached以及-/+ buffers/cache解析
  11. 发送邮件 ajax,使用Ajax发送电子邮件
  12. Veeam黑科技之Direct NFS Access
  13. 10天基于STM32F401RET6智能锁项目实战第1天(环境搭建和新建工程)
  14. 俄罗斯一款地图软件无意曝光300多个军事基地
  15. c235delc杂合变异遗传吗_血常规正常就真的没有地贫吗?
  16. 如何配置微信公众号卡密回复?
  17. oracle导出数据只能9999,批量快速的导入导出Oracle的数据
  18. linux下获得root权限运行程序
  19. js前端实现单个或多个直播视频播放方法总结hls,rtsp
  20. 将Ubuntu装入移动硬盘

热门文章

  1. 【董天一】Filecoin: 影响力容错(PFT)和预期共识(EC)
  2. C语言飞机大战题目,C语言飞机大战源码.pdf
  3. 维吉尼亚c语言编码原理,维吉尼亚密码的C语言实现
  4. 安卓时间显示TextClock显示日期时间,24小时制和12小时制(自定义时间)
  5. 为什么计算机播放音乐不响,酷狗音乐开启以后为什么点选播放没有声音
  6. Npm发布到私库去的操作
  7. 如何增加swap空间大小
  8. [转载]矩阵行列式为零和不为零的充分必要条件
  9. 100G中长距离光模块,你选对了吗?
  10. 我的shell脚本实战-编写一个系统发布脚本