爪哇国新游记之二十二----排序判断重复时间复杂度为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 ...
随机推荐
- APMserv常见问题
一.启动是提示apache启动失败,mysql启动成功 1.去掉ssl的勾选(勾选需要证书),重启看解决没有 2.端口被占,吧apache端口改成80或者8080端口(其他端口也可以试试,80的话访问 ...
- html怎样让表格里面的内容居中
html怎样让表格里面的内容居中 text-align:center; 在表格td中,有两个属性控制居中显示 align——表示左右居中——left,center,right valign——控制上下 ...
- Java常见知识点(二)
21.常量池专门用于管理在编译时被确定并被保存在已编译的.class文件中的一些数据.它包括了关于类.方法.接口中的常量,还包括字符串常量. 22.String已经重写了Object的equals ...
- django配置使用redis
通常redis都是用来保存session.短信验证码.图片验证码等数据. 在django上使用redis,先要安装一个包: pip install django-redis==4.8.0(我用的dja ...
- CSS选择器及其权重
#转载请留言联系 1.标签选择器 标签选择器,此种选择器影响范围大,一般用来做一些通用设置,或用在层级选择器中.举例: div{color:red} ...... <div>这是第一个di ...
- 【C++】默认构造函数
参考文献: 1.黄邦勇帅 2.http://www.cnblogs.com/graphics/archive/2012/10/02/2710340.html 3.http://blog.csdn.ne ...
- poj 2007(凸包)
Scrambled Polygon Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 8005 Accepted: 3798 ...
- CodeForces 669C
链接:http://codeforces.com/problemset/problem/669/C http://www.cnblogs.com/Ash-ly/p/5443155.html 题意: 给 ...
- 蒟蒻的9个背包的浩大工程(更新中)(无限延期)(太长了不舍删虽然写的lj的一匹)
所以说这就是一篇写炸的废文!!!! 所以说背包直接看dd大神的就好了,算了瞎写写吧. 0/1背包 有n件物品和一个容量为C的背包.第i件物品的重量是w[i],价值是v[i].求解将哪些物品放入背包可使 ...
- hdu6071(最短路)
hdu6071 题意 四个点连接形成一个环,给出相邻两个点的距离,求从点 \(2\) 出发再回到 \(2\) 的路程大于等于 \(K\) 的最小值. 分析 首先我们让 \(w=min(d12, d23 ...