java 关于数组 计数的面试题
题目:用面向对象的方法求出数组中重复 value 的个数 : 1 出现:1 次3 出现:2 次8 出现:3 次2 出现:4
提供数组 : int[] arr = {1,4,1,4,2,5,4,5,8,7,8,77,88,5,4,9,6,2,4,1,5} ;
答案:
// 面试题,给定一个数组,按照顺序将 元素的重复次数打印出来
int array [] = {1,4,1,4,2,5,4,5,8,7,8,77,88,5,4,9,6,2,4,1,5} ;
Arrays.sort(array); // 排序
int count = 0 ; // 初始化计数器
int temp = array[0] ; // 初始化一个变量 此时为1(数组第一个元素)
//定义一个map,key为元素,value为次数。利用map 同样的key 会覆盖掉前面的value的特性
Map<Integer,Integer> map = new HashMap<Integer, Integer>() ;
for (int i=0 ; i<array.length ; ++i){
//排完序,相同的元素会在一块,遇到不相同的 进行新的计数
if (temp != array[i]){
temp = array[i] ;
count = 1 ;
}else { //然后遇到重复的 计数器+1,
count ++ ;
}
map.put(array[i],count) ;
}
// 将 map遍历出来
for (Map.Entry<Integer,Integer> entry : map.entrySet()){
System.out.println(entry.getKey()+"出现了:"+entry.getValue());
}
结果:
1出现了:3
2出现了:2
4出现了:5
5出现了:4
6出现了:1
7出现了:1
8出现了:2
88出现了:1
9出现了:1
77出现了:1
解题思路:先进行排序,这样重复的元素会排到一块。然后 将索引为0的元素赋值给 temp,然后循环遍历,如果temp == 遍历出来的值,计数器+1,如果 != 的话,就是新的不与上面的重复的元素,开始新的计数,然后将本次循环的元素 作为key,计数作为值,存到map中(map有个特性,同样的key会覆盖掉原来的value,这样就会一直覆盖到最新的重复数,再进行下一个新key的计数)。 最后将map 遍历打印出来,结束。
java 关于数组 计数的面试题的更多相关文章
- 【Java面试题】18 java中数组有没有length()方法?string没有lenght()方法?下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";
数组没有length()这个方法,有length的属性.String有有length()这个方法. int a[]; a.length;//返回a的长度 String s; s.length();// ...
- Java并发编程75道面试题及答案
1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon( ...
- [Java 基础]数组
数组初始化 定义数组语法格式 定义数组有两种方式,如下两种格式是等价的: int[] a1; int a1[]; 注:在C/C++中,不支持第一种格式.但是,推荐使用这种方式,因为这样似乎更合理,声 ...
- Java的Exception和Error面试题10问10答
在Java核心知识的面试中,你总能碰到关于 处理Exception和Error的面试题.Exception处理是Java应用开发中一个非常重要的方面,也是编写强健而稳定的Java程序的关键,这自然使它 ...
- Java线程相关的热门面试题
---恢复内容开始--- 下面是Java线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序 ...
- Java排序之计数排序
Java排序之计数排序 计数排序思路 计数排序适用于有明确范围的数组,比如给定一个数组,且知道所有值得范围是[m,n].这个时候可以使用一个n-m+1长度的数组,待排序的数组就可以散在这个数组上,数组 ...
- Java:多线程计数
Java:多线程计数 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 1. CountDownLatch 概念 让一些线程阻塞直到另一些线程完成一系列操作才被唤醒 ...
- java中数组的相关知识
1. 2.数组的命名方法 1)int[]ages=new int[5]; 2) int[]ages; ages=new int[5]; 3)int[]ags={1,2,3,4,5}; 4)int[ ...
- Java基础——数组应用之StringBuilder类和StringBuffer类
接上文:Java基础——数组应用之字符串String类 一.StringBuffer类 StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和 ...
随机推荐
- objc变量的获取
[objc变量的获取] C++成员变量通过偏移来寻找,速度极快.But Objc中的变量通过方法调用来寻找,方法首先根据变量名,找到ivar_t,然后在ivar_t对象中取出偏移,再用此偏移来取值(这 ...
- YII 模型关联之 一对一
需求,一个用户对应一个用户信息表, 这两者之间的关系就是一对一 //首先查找出一个用户出来 $user=Users::find()->'])->one(); //然后查询, 第一个参数是 ...
- PHP Curl请求Https接口
在请求http的时候只需要 file_get_contents("http://www.sojson.com/open/api/weather/json.shtml?city=$Positi ...
- Solidity oraclize 常用数据源
1. 股票数据: https://blog.quandl.com/api-for-stock-data iextrading.com www.nowapi.com 中文 2. 外汇数据: https: ...
- Luogu 2886 [USACO07NOV]牛继电器Cow Relays
BZOJ 1706权限题. 倍增$floyd$. 首先这道题有用的点最多只有$200$个,先离散化. 设$f_{p, i, j}$表示经过$2^p$条边从$i$到$j$的最短路,那么有转移$f_{p, ...
- MySQL中having与where
having与where区别: where中不可以用聚合函数(条件字段是未分组中的字段),having中可以用聚合函(条件字段是分组后字段).不过这里也很好理解,SQL语句在执行是先执行select ...
- 9.python 系统批量运维管理器之Fabric模块
前面介绍了paramiko,pexpect模块,今天来说比较适合大型应用自动化部署的模块,或者执行系统命令的模块Fabric. Fabric 是一个 Python 的库,同时它也是一个命令行工具.它提 ...
- Java基础语法(二)<运算符>
运算符: 下面的都是相关的练习: 1.键盘录入一个三位整数数,请分别获取该三位数上每一位的数值 import java.util.Scanner; public class Test02 { publ ...
- String类的subtring(,)
截取字符串,参数(起始位置,截取长度)
- 转 XlsReadWriteII 的博文(自留参考)
如何使用XlsReadWriteII在Delphi中读取Excel文件 XLSReadWriteII v5.20.01a for Delphi XE5 x32下载地址: http://download ...