Java算法题-删除有序数组中的重复元素

题目:编写一个方法,删除有序数组中的重复元素。例如:数组:1,2,2,4,5,5,5,8,9,9,10。删除重复元素后:1,2,4,5,8,9,10。

RemoveRepeatItem.java

 1 public class RemoveRepeatItem {
 2     /**
 3      * 单元测试
 4      */
 5     public static void main(String[] args){
 6         int[] sortArr = { 1,3,3,4,5,5,5,7,8,9,9,9 };
 7         int[] arr = removeRepeat(sortArr);
 8         for(int item : arr){
 9             System.out.print(item + " ");
10         }
11     }
12     
13     /**
14      * 删除有序数组中重复元素
15      */
16     public static int[] removeRepeat(int[] a){
17         int N = a.length;
18         int[] arr = new int[N];
19         for(int i = 0;i < N; i++){
20             arr[i] = a[i]; //保护性复制
21         }
22         int len = N;
23         for(int i = 0; i < len; i++){
24             //记录重复元素个数
25             int repeatCnt = 0;
26             for(int j = i + 1;j < len;j++){
27                 if(arr[j] == arr[i]){
28                     //如果重复,repeatCnt加1
29                     repeatCnt++;
30                 } else if(arr[j] > arr[i]){
31                     //及时跳出循环
32                     break;
33                 }
34             }
35             //如果重复,开始移动元素
36             if(repeatCnt > 0){
37                 for(int k = i + repeatCnt + 1; k < len;k++){
38                     arr[k - repeatCnt] = arr[k];
39                 }
40                 //数组长度减小
41                 len = len - repeatCnt;
42             } 
43         }
44         
45         //结果数组
46         int[] result = new int[len];
47         for(int i = 0;i < len; i++){
48             result[i] = arr[i];
49         }
50         
51         return result;
52     }
53 }

 

 

posted on 2013-04-02 00:01  DongLiYang  阅读(3086)  评论(0编辑  收藏  举报

导航