Java查找数组重复元素,并打印重复元素、重复次数、重复元素位置
面试题查找重复元素并打印重复次数和重复位置,一顿懵逼,回来死磕写下来,打印指定重复次数和最大次数,其他在此基础上可以再更新
package sort; import org.testng.annotations.Test;
import sun.org.mozilla.javascript.internal.ast.NewExpression; import java.util.*; /**
* Created by liangwei on 2018/10/18.
*/
public class SearchString {
/**
* 找出重复字符、记录重复字符次数、记录重复字符位置
* @param str
* @return map
*/
public Map get_str_count_index(String[] str){
Map<String,Map<Integer,ArrayList>> map = new HashMap<String ,Map<Integer,ArrayList>>();//key值记录重复的字符串,value记录出现的次数和位置
int i = 0;
for (String s:str ){
if (map.get(s)==null){
Map<Integer,ArrayList> count_where = new HashMap<Integer ,ArrayList>();//key值记录重复字符串出现的次数,value记录重复字符出现的位置
int count = 1;//重复字符串计数器
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(i);//重复字符串下标
count_where.put(count,list);
map.put(s,count_where);
i++;
}else {
for (int c:map.get(s).keySet()){
ArrayList index = map.get(s).get(c);
index.add(i);//增加出现index位置
c++;
map.get(s).put(c,index);//更新计数器和下标信息
map.get(s).remove(--c);//删除掉之前的记录信息
}
i++;
}
}
return map;
} public void display(String[] arry) throws Exception{
if (arry==null){
throw new Exception("输入数组为空,请重新输入");
}
Map<String,HashMap<Integer,ArrayList>> map = get_str_count_index(arry);
ArrayList count = new ArrayList<Integer>();//存取所有字符串出现的次数
for (Map.Entry<String,HashMap<Integer,ArrayList>> key : map.entrySet()){//循环获取记录字符串重复次数和位置map
for (Map.Entry<Integer,ArrayList> map1 :key.getValue().entrySet()){//循环获取记录字符串重复次数
count.add(map1.getKey());
}
}
// Arrays.sort(count.toArray());
Collections.sort(count);//对集合排序,默认是升序,最后一个是重复次数最多的
//打印重复次数最多的元素信息
for (String key : map.keySet()){//循环获取所有的重复字符串
for (int c:map.get(key).keySet()){//循环获取重复字符串的次数
if (c == count.get(count.size()-1)){//和最大重复次数对比,相等就代表当前的字符串是重复次数最多的那个
System.out.printf("重复次数最多的字符串是:%s,重复次数%d,所在位置:%s\n",key,c,map.get(key).get(c));
}
}
}
//输出指定重复次数的字符串信息
for (String key :map.keySet()){
for (int c:map.get(key).keySet()){
if (c==5||c==6||c==1){
System.out.printf("重复字符串:%s,重复次数:%d,重复字符串出现位置:%s\n",key,c,map.get(key).get(c));
}
}
}
} public static void main(String[] args) {
String[] arry = {"aa","bb","cc","bb","aa","ooo","dd","aaa","aa"};
// String[] arry = {};
SearchString searchString = new SearchString();
try {
searchString.display(arry);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Java查找数组重复元素,并打印重复元素、重复次数、重复元素位置的更多相关文章
- java 查找数组中最接近的一个数字
public static Integer getNumberThree(Integer[] intarray,Integer number){ int index = Math.abs(number ...
- Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素-un
ylbtech-Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素 1.返回顶部 1. Java 实例 - 查找数组中的重复元素 Java 实例 以下实例 ...
- JS数组常用函数以及查找数组中是否有重复元素的三种常用方法
阅读目录: DS01:常用的查找数组中是否有重复元素的三种方法 DS02:常用的JS函数集锦 DS01.常用的查找数组中是否有重复元素的三种方法 1. var ary = new Array(&qu ...
- java去除数组重复元素的方法
转载自:https://blog.csdn.net/Solar24/article/details/78672500 import java.util.ArrayList; import java.u ...
- 面试题: 已知一个含有n个不同元素的集合,要求打印其所有具有k个元素的子集(不允许有重复的)
TX面试题2: 已知一个含有n个元素的集合,要求打印其所有具有k个元素的子集(不允许有重复的) 题目分析, 为了便于说明,不妨将问题简化一下: 已知一个盒子中有n个不同的球,分别标记为{a1,a2,. ...
- jar包里查找指定的class文件,排查是否存在或重复,工具软件:Java Class Finder
jar包里查找指定的class文件,排查是否存在或重复,工具软件:Java Class Finder 1,下载工具地址:www.idesksoft.com/classfinder.html,如图: 2 ...
- Java思考——HashSet集合如何保证元素的唯一性也就是不包含重复元素?
首先将源码逐级找出来1.HashSet<String> hs=new HashSet<String>(); hs.add("hello"); ...
- Java实现二分法(折半)查找数组中的元素
二分查找 算法思想:又叫折半查找,要求待查找的序列有序.每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分 ...
- java基础---数组的查找算法(2)
一.查找的基本概念 查找分为有序查找和无序查找,这里均以数组为对象,有序查找指的是数组元素有序排列,无序查找指的是数组元素有序或无序排列 平均查找长度(Average Search Length,AS ...
随机推荐
- Lyft Level 5 Challenge 2018 - Final Round (Open Div. 2) (前三题题解)
这场比赛好毒瘤哇,看第四题好像是中国人出的,怕不是dllxl出的. 第四道什么鬼,互动题不说,花了四十五分钟看懂题目,都想砸电脑了.然后发现不会,互动题从来没做过. 不过这次新号上蓝名了(我才不告诉你 ...
- Java虚拟机详解(十一)------双亲委派模型
在上一篇博客,我们介绍了类加载过程,包括5个阶段,分别是“加载”,“验证”,“准备”,“解析”,“初始化”,如下图所示: 本篇博客,我们来介绍Java虚拟机的双亲委派模型,在介绍之前,我先抛出一个问题 ...
- 动态规划之抢劫问题-LT213
找到大问题和小问题之间共有的特性,列出一定的状态转移规律,然后设计满足条件的小问题解决方案,最后凭借记忆中的中间值快速求出最终解 动态规划问题的复杂性在于你永远不知道下一个题目中的状态是什么,有什么样 ...
- iOS从gif获取图片数组
iOS中,当我们UIImageView实现动画时,如果图片是gif则不会自动播放gif图片,我们可以从gif图片中读取出每一帧的图片,然后组成图片数组,之后再实现使用UIImageView实现动画效果 ...
- Qt中设置窗口图标
转:https://blog.csdn.net/weiren2006/article/details/7438028 1.通过qtcreator新建一个文件filename.qrc,将图片添加到fil ...
- 解决elment 动态多选框组(el-checkbox-group)无法设置默认值问题
<el-checkbox-group v-model="form.showProperty"> <el-checkbox v-for="(item,id ...
- 原生js面向对象编程-选项卡(自动轮播)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 原生javascript实现仿QQ延时菜单
一.实现原理 定时器和排他思想 二.代码 <!DOCTYPE html> <html> <head> <title></title> < ...
- graphviz 的使用教程
node 节点属性如下 : Name Default Values color black node shape color comment any string (format-dependen ...
- await Task.Yield()和await Task.CompletedTask有什么不同
有时候我们在代码中要执行一些非常耗时的操作,我们不希望这些操作阻塞调用线程(主线程)的执行,因为调用线程(主线程)可能还有更重要的工作要做,我们希望将这些非常耗时的操作由另外一个线程去执行,这个时候就 ...