实现一个去除整型数组中绝对值相同的数字
阿超 发表于 2009-09-07 08:59 | 来源: | 阅读 239 次
一道java面试题目做出来一起学习 完全用java数组实现,实现一个去除整型数组中绝对值相同的数字.最后返回一个长度,不要使用List Map Arrays等现有类实现。
package com.javadou;
import java.util.ArrayList;
import java.util.Arrays;
public class AbsCutIntArr {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = new int[]{0,2,3,3,-2,2};
AbsCutIntArr at = new AbsCutIntArr();
int lg = at.getIntArrAbsLength(arr);
System.out.println(lg);
}
/***为了让实现的条理清晰 用了很多循环 方便理解**/
public int getIntArrAbsLength(int[] arr){
if(arr == null) return 0;
//想里面的数都变正
int[] tmp = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
tmp[i] = Math.abs(arr[i]);
}
//排序
for (int i = 0; i < tmp.length; i++) {
for (int j = i+1; j < tmp.length; j++) {
if(tmp[i] > tmp[j]){
int num = tmp[i];
tmp[i] = tmp[j];
tmp[j] = num;
}
}
}
//去掉重复
int[] tmp2 = new int[tmp.length];
boolean flag = false;
boolean zero = false;
for (int i = 0; i < tmp.length; i++) {
flag = false;
if(tmp[i]==0){
zero = true;
tmp2[i]=tmp[i];
}
for (int j = i+1; j < tmp.length; j++) {
if(tmp[i] == tmp[j]){
flag = true;
}
}
if(!flag){
tmp2[i]=tmp[i];
}
}
int lg = 0;
//得到长度 有个情况就是0的出现,因为tmp2的长度实际会小于原长度 ,但是没有动态的数组所以tmp2的长度用原长度
//但是重复的地方就没有添加到tmp2中 自动会加0
for (int i = 0; i < tmp2.length; i++) {
int j = tmp2[i];
if(j!=0){
lg++;
}
}
if(zero){
lg++;
}
return lg;
}
}
不知道大家有没有好的算法 分享一下 欢迎讨论

