標籤:數組 面試 演算法 java offer
【027-Remove Element(刪除數組中的元素)】
【LeetCode-面試演算法經典-Java實現】【所有題目目錄索引】
原題
Given an array and a value, remove all instances of that value in place and return the new length.
The order of elements can be changed. It doesn’t matter what you leave beyond the new length.
題目大意
給定一個數組和一個值,刪除數組中與這個值相等的元素,並且返回與這個數組的新的長度。
解題思路
從左邊找值為elem的元素的位置,j從右邊找值不為elem的元素的位置,然後將j位置的數值移動到i位置。
代碼實現
演算法實作類別
public class Solution { public int removeElement(int[] A, int elem) { int exchange = 0; // 記錄交換的次數,也就是統計數組中與elem元素值相等的個數 // 演算法思想:i從左邊找值為elem的元素的位置,j從右邊找值不為elem的元素的位置, // 取等號是讓長度為1的數組可以進入 for (int i = 0, j = A.length -1; i <= j; i++) { if (A[i] == elem) { // 找到要交換的元素 exchange++; while (j > i && A[j] == elem) { // 從數組後面開始向前找第一個不等於elem的元素 exchange++; // 有值為elem的元素說明要交換,但是交換過程可以省去 j--; } // 情況1:到到不為elem的元素的位置,將j位置的元素放到i位置 // 情況2:沒有找到不elem的元素的位置,即i後的所有元素值都是e,此時有j=i // 不論哪種情況將j中的值放入i都沒有關係 A[i] = A[j]; j--; // j已經被交換使用了所以還要和前移動到一個新的位置 } } return A.length - exchange; }}
評測結果
點擊圖片,滑鼠不釋放,拖動一段位置,釋放後在新的視窗中查看完整圖片。
特別說明
歡迎轉載,轉載請註明出處【http://blog.csdn.net/derrantcm/article/details/47052643】
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
【LeetCode-面試演算法經典-Java實現】【027-Remove Element(刪除數組中指定的元素)】