本帖最后由 z47057554 于 2015-3-4 19:54 编辑
为什么内存溢出,求解
- /**
- * 第5题: 数组去重复,
- * 例如: 原始数组是{4,2,4,6,1,2,4,7,8},得到结果{4,2,6,1,7,8}
- * @author
- *
- *答:分析:已知数组,int[]arr,定义起始标记start,定义方法getNewarr(arr,start),该方法可以得到
- *一个数组newarr,newarr在start之后没有元素与arr[start]重复,完动作后,
- *getNewarr(newarr,start++);当start从0位置开始时,它每调用一次getNewarr,对应位置在新得到的
- *数组中是唯一的,并保留了第一次在原数组中出现的顺序,当start=newarr.length-2时,newarr[start]
- *无论是否等于newarr[newarr.length-1],再调用一次,都会得到所有元素唯一的数组
- */
- public class Test52 {
- public static void main(String[] args) {
-
- int[] arr={4,2,4,6,1,2,4,7,8};
-
- System.out.println("原数组为");
- myPrint(arr);
-
- System.out.println("去重后数组为");
- myPrint(getNewarr(arr,0));
- }
-
- public static int[] getNewarr(int[]arr,int start){
- if(start < arr.length-1){
- int count=0;
- for (int i = start+1; i < arr.length; i++) {
- if(arr[i]==arr[start])
- count++;
- }
-
- int[] newarr=new int[arr.length-count];
- for (int i = 0; i < start+1; i++) {
- newarr[i]=arr[i];
- }
-
- if(count!=0){
- int arrnum=start+1;
- for (int i = start+1; i < newarr.length; i++) {
- for ( ; arrnum < arr.length; arrnum++) {
- if(arr[arrnum]==newarr[start])
- continue;
- else{
- newarr[i]=arr[arrnum];
- arrnum++;
- break;
- }
- }
- }
- return getNewarr(newarr,start++);
- }
-
- else
- return getNewarr(arr,start++);
- }
-
- else
-
- return arr;
- }
-
- public static void myPrint(int[] arr){
-
- System.out.print("[");
- for(int i=0;i <arr.length;i++){
- if(i!=arr.length-1)
- System.out.print(arr[i]+",");
- else
- System.out.println(arr[i]+"]");
- }
- }
- }
复制代码
|