一题多解——求数组中每个元素出现的次数
好久没更新博客了,写博客分享是个好习惯,发现坚持是比较难得的一件事情。
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基础源码。
水文简单,大神略过~
一题多解——求数组中每个元素出现的次数相关推荐
- JavaScript求数组中每个元素的个数,如数组str = [1,2,3,2,4,1,2]中元素2的个数为2。要求:使用对象知识来实现,输出结果为对象,对象包含数组元素和个数值。
求数组中每个元素的个数,如数组str = [1,2,3,2,4,1,2]中元素2的个数为2. 要求:使用对象知识来实现,输出结果为对象,对象包含数组元素和个数值. <script>var ...
- js计算数组中每个元素出现的次数(2种方法)
js计算数组中每个元素出现的次数(2种方法) js动态生成唯一id Javascript生成全局唯一标识符(GUID,UUID)的方法
- LeetCode中等题之在排序数组中查找元素的第一个和最后一个位置
题目 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 如果数组中不存在目标值 target,返回 [-1, -1]. 进阶: 你可以 ...
- es6 取数组的第一个和最后一个_JS算法题之每日一题- 17.在排序数组中查找元素的第一个和最后一个位置...
微信公众号: 题 目 Q:给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置.你的算法时间复杂度必须是 O(log n) 级别.如果数组中 ...
- C#LeetCode刷题之#34-在排序数组中查找元素的第一个和最后一个位置(Find First and Last Position of Element in Sorted Array)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4970 访问. 给定一个按照升序排列的整数数组 nums,和一个目 ...
- 求数组中各个元素的个数?
1 //声明数组 2 char[] chars = {'A', 'B', 'C', 'A', 'A', 'B'}; 3 4 //声明字典,如果chars数组是int类型的, 5 //则相应的colle ...
- Leetcode刷题 34.在排序数组中查找元素的第一个和最后一个位置
解法1: class Solution { public:vector<int> searchRange(vector<int>& nums, int target) ...
- [Letcode]第[34]题[JAVA][在排序数组中查找元素的第一个和最后一个位置][暴力][二分]
[问题描述][中等] [解答思路] 1. 线性扫描(不符合题意) 时间复杂度:O(N) 空间复杂度:O(1) class Solution {public int[] searchRange(int[ ...
- java数组中相同的元素个数_java求两个数组中相同元素出现的次数
法一 public class Methodfifth { public void mixed(int array1[], int n1, int array2[], int n2) { int i ...
最新文章
- create-react-app 2.0中使用antd(eject)
- SQL Server中临时表与表变量的区别
- python中如何创建类的对象_python面向对象中如何建立具体的对象?
- SM30里如何输入物料号自动带出物料描述
- php图片缩略图的方法,php生成图片缩略图的方法
- Linux内核地址空间为什么1GB,为什么Windows为其系统地址空间预留1Gb(或2 Gb)?
- STL之deque详解
- 活照片 android,活照片app安卓
- 多益网络 视频面试面试总结20180816
- linux free 命令中buffers、cached以及-/+ buffers/cache解析
- 发送邮件 ajax,使用Ajax发送电子邮件
- Veeam黑科技之Direct NFS Access
- 10天基于STM32F401RET6智能锁项目实战第1天(环境搭建和新建工程)
- 俄罗斯一款地图软件无意曝光300多个军事基地
- c235delc杂合变异遗传吗_血常规正常就真的没有地贫吗?
- 如何配置微信公众号卡密回复?
- oracle导出数据只能9999,批量快速的导入导出Oracle的数据
- linux下获得root权限运行程序
- js前端实现单个或多个直播视频播放方法总结hls,rtsp
- 将Ubuntu装入移动硬盘
热门文章
- 【董天一】Filecoin: 影响力容错(PFT)和预期共识(EC)
- C语言飞机大战题目,C语言飞机大战源码.pdf
- 维吉尼亚c语言编码原理,维吉尼亚密码的C语言实现
- 安卓时间显示TextClock显示日期时间,24小时制和12小时制(自定义时间)
- 为什么计算机播放音乐不响,酷狗音乐开启以后为什么点选播放没有声音
- Npm发布到私库去的操作
- 如何增加swap空间大小
- [转载]矩阵行列式为零和不为零的充分必要条件
- 100G中长距离光模块,你选对了吗?
- 我的shell脚本实战-编写一个系统发布脚本