实现一个去除整型数组中绝对值相同的数字

阿超 发表于 2009-09-07 08:59 | 来源: | 阅读 197 次

    一道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;
	}
}

不知道大家有没有好的算法 分享一下 欢迎讨论
关键字:
喜欢Java豆技术站点的文章,那就通过 RSS Feed 功能订阅阅读吧!

我要评论

*

* 绝不会泄露



返回首页 | 关于我们 | 联系我们 | 广告合作 | 网站地图 | 友情链接 | 版权声明 | 模板设计