爪哇国新游记之二十二----排序判断重复时间复杂度为2n的位图法
import java.util.ArrayList;
import java.util.List;
/**
* 位图法
* 用于整型数组判重复,得到无重复列表
*
*/
public class Bit{
int max;
int min;
int[] arr;
public Bit(int[] arrInput){
// 找出极值
for(int i=0;i<arrInput.length;i++){
if(max<arrInput[i]){
max=arrInput[i];
}
if(min>arrInput[i]){
min=arrInput[i];
}
}
// 新建数组
arr=new int[max-min+1];
// 数组插值
for(int i:arrInput){
int index=i-min;
arr[index]++;
}
}
/**
* 判断有无元素重复
* @return
*/
public boolean hasDuplicateItem(){
for(int i=0;i<arr.length;i++){
int value=arr[i];
if(value>1){
return true;
}
}
return false;
}
/**
* 得到已排序的元素列表,有重复
* @return
*/
public List<Integer> getSortedList(){
List<Integer> ls=new ArrayList<Integer>();
for(int i=0;i<arr.length;i++){
int value=arr[i];
if(value!=0){
for(int j=0;j<value;j++){
ls.add(min+i);
}
}
}
return ls;
}
/**
* 得到已排序的元素列表,无重复
* @return
*/
public List<Integer> getUniqueSortedList(){
List<Integer> ls=new ArrayList<Integer>();
for(int i=0;i<arr.length;i++){
int value=arr[i];
if(value!=0){
ls.add(min+i);
}
}
return ls;
}
public static void main(String[] args){
int[] arr={-2,-1,3,5,7,9,30,4,-2,5,8,3};
Bit b=new Bit(arr);
System.out.print("排序后数组(有重复)为:");
for(int i:b.getSortedList()){
System.out.print(i+",");
}
System.out.println();
System.out.print("排序后数组(无重复)为:");
for(int i:b.getUniqueSortedList()){
System.out.print(i+",");
}
System.out.println();
String str=(b.hasDuplicateItem())?"有":"无";
System.out.println("数组arr"+str+"重复元素.");
int[] arr2={9,8,7,2};
str=(new Bit(arr2).hasDuplicateItem())?"有":"无";
System.out.println("数组arr2"+str+"重复元素.");
}
}
输出:
排序后数组(有重复)为:-2,-2,-1,3,3,4,5,5,7,8,9,30, 排序后数组(无重复)为:-2,-1,3,4,5,7,8,9,30, 数组arr有重复元素. 数组arr2无重复元素.
爪哇国新游记之二十二----排序判断重复时间复杂度为2n的位图法的更多相关文章
- 爪哇国新游记之二十九----访问URL获取输入流
代码: import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileWriter; import ...
- 爪哇国新游记之二十八----从url指定的地址下载文件到本地
package download; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; ...
- 爪哇国新游记之二----用于计算三角形面积的Point类和TAngle类
这次尝试用两个类完成一个面积计算任务: Point类代表平面上的点: public class Point { private float x; private float y; public Poi ...
- 爪哇国新游记之三十四----Dom4j的XPath操作
Dom4j是Java访问XML的利器之一,另一个是JDom.记得当年因为粗掌握点JDomAPI但项目要求使用Dom4j还闹一阵情绪,现在看来真是没必要,只花一些时间成本就进去一个新世界绝对是值得做的一 ...
- 爪哇国新游记之十四----初试JDBC
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...
- 爪哇国新游记之十九----使用Stack检查数字表达式中括号的匹配性
/** * 辅助类 * 用于记载字符和位置 * */ class CharPos{ char c; int pos; public CharPos(char c,int pos){ this.c=c; ...
- 爪哇国新游记之十三----XML文件读写
/** * XML读写示例 * @author hx * */ public class XmlReaderWriter{ /** * 读取一个XML文件,返回一个雇员链表 * @param file ...
- 爪哇国新游记之七----使用ArrayList统计水果出现次数
之前学习制作了DArray,了解ArrayList就容易了. /** * 用于存储水果名及数量 * */ public class Fruit{ private String name; public ...
- 爪哇国新游记之一----第一个类Cube
将这个类作为Java学习的第一个类,简单易懂易上手. /** * 正方体类 */ public class Cube { private int length;// 正方体边长 private sta ...
随机推荐
- sphinx-python文档化
概述 下文讲述使用sphinx自动生成reStructuredText python API文档的简单过程. 配置流程 安装依赖 $ pip install sphinx blurb python-d ...
- 子类构造函数 supper关键字
在导出类的构造函数,如果没有明确指定调用哪一个基类构造器,它会默默调用默认构造器. 如果不存在默认构造器,编译器就会报错. java编程思想 p158(p194)
- docker从零开始(三)服务初体验docker compose
决条件 安装Docker 1.13或更高版本. 获取Docker Compose.在适用于Mac的Docker和适用于Windows的Docker上,它已预先安装,因此您可以随意使用.在Linux系统 ...
- Mysql中大表添加索引的办法
Hash索引与 Btree索引的区别http://database.51cto.com/art/201010/229525.htm Creating Indexes/Sorting on very l ...
- .NET Core on Raspberry Pi
原文地址:传送门 .NET Core on Raspberry Pi Arm32 builds are available as community supported builds for .NET ...
- hdu6231
hdu6231 题意 给出一些数字,对于任意长度不小于 \(k\) 的区间,把第 \(k\) 大数加入到一个新的数组 \(B\) 中,求 \(B\) 数组第 \(m\) 大数. 分析 二分答案 \(x ...
- KMP+差分 文章过滤器 (filter)
Description 给定一些短串,要求你在一个长串中,将这些短串部分变为\(*\) Input 第一行包括一个整数\(n\),表示短串的数量. 接下来的\(n\)行,为\(n\)个短串. 最后一行 ...
- 表(Table)
虽然我们已经将不同用途的物品保存在不同的仓库中了,但是在同一个仓库中数据的保存仍然存在问题.比如食品分为熟食.生肉.大米等,如果把他们随意的堆放在一起,就会造成我们无法很容易的对这些食品进行管理,当要 ...
- 【AC自动机】hdu2222 Keywords Search
AC自动机模板题,给你n个模式串和一个文本串,问你有几个模式串在文本串出现过. 注意防止重复统计 这里推荐一波郭大爷的介绍,简单易懂. http://www.bilibili.com/video/av ...
- [AGC012F]Prefix Median
题目大意: 给定一个长度为$2n-1(n\le50)$的数组$a$,可以重排$a$中的元素,生成一个长度为$n$的数组$b$,其中$b_i$为$a_1\sim a_{2i-1}$的中位数.求对于给定的 ...