資料結構演算法題/刪除陣列中重複元素
阿新 • • 發佈:2018-11-19
題目 給定一個排序的陣列,將陣列中的重複元素去掉,相同的只保留一個,並且返回陣列新的元素個數, 不要建立一個新的陣列來儲存結果。在常量時間內解決這個問題 解題思路 從第二個元素開始處理,記為當前處理的元素,如果當前元素與他的前一個元素相同就刪除這個元素, 如果不同就將它移動到正確的位置,返回最後陣列元素個數。比如輸入的陣列為{1,2,3,3,4,5,5,6}, 則最後的陣列為{1,2,3,4,5,6}共6個元素。 也就是index和next位置對於的元素不等的時候next往後走,相等的時候賦值並同時往後走。 public class RemoveArrDua { public int removeDuplicates(int[] A) { if (A.length == 0) { return 0; } int index = 0;//[0,index]記錄去重之後的陣列下標 int next = 1; // 演算法思想:找index之後的比A[index]大的數,如是找到就移動到A[index+1]處, // index移動到下一個位置,next移動到下一個位置,再找比A[index]大的數 while (next < A.length) { while (next < A.length && A[index] == A[next] ) { //找不等於A[index]的元素 next++; } if (next < A.length) {//也就是遇到了後面不相同元素,需要index指標往後移 //遇到第一個不相等的元素就交換 index++; A[index] = A[next]; next++; } } return index; } private void swap(int[] a, int x, int y) { int tmp = a[x]; a[x] = a[y]; a[y] = tmp; } public static void main(String[] args) { RemoveArrDua removeArrDua = new RemoveArrDua(); int[] dataArr = {1,2,3,3,4,5,5,6}; int newLength = removeArrDua.removeDuplicates(dataArr); for (int i = 0; i <= newLength; i++) { System.out.println(dataArr[i]); } } }