1. 程式人生 > >leetcode-26- 刪除排序陣列中的重複項-java

leetcode-26- 刪除排序陣列中的重複項-java

題目與測試樣例

package pid26;
/*26. 刪除排序陣列中的重複項
題目描述提示幫助提交記錄社群討論閱讀解答
隨機一題
給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。

不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。

示例 1:

給定陣列 nums = [1,1,2], 

函式應該返回新的長度 2, 並且原陣列 nums 的前兩個元素被修改為 1, 2。 

你不需要考慮陣列中超出新長度後面的元素。
示例 2:

給定 nums = [0,0,1,1,1,2,2,3,3,4],

函式應該返回新的長度 5, 並且原陣列 nums 的前五個元素被修改為 0, 1, 2, 3, 4。

你不需要考慮陣列中超出新長度後面的元素。
說明:

為什麼返回數值是整數,但輸出的答案是陣列呢?

請注意,輸入陣列是以“引用”方式傳遞的,這意味著在函式裡修改輸入陣列對於呼叫者是可見的。

你可以想象內部操作如下:

// nums 是以“引用”方式傳遞的。也就是說,不對實參做任何拷貝
int len = removeDuplicates(nums);

// 在函式裡修改輸入陣列對於呼叫者是可見的。
// 根據你的函式返回的長度, 它會打印出陣列中該長度範圍內的所有元素。
for (int i = 0; i < len; i++) {
    print(nums[i]);
}*/
public class main { public static void main(String[] args) { int[][] testTable = {{1,1,2},{1,1,2,2,5,6,7,7},{1,2,3,5},{1,1,1,1}}; for (int[] ito : testTable) { test(ito); } } private static void test(int[] ito) { Solution solution = new Solution(); int
rtn; long begin = System.currentTimeMillis(); for (int i = 0; i < ito.length; i++) { System.out.print(ito[i]+" "); }//開始時列印陣列 rtn = solution.removeDuplicates(ito);//執行程式 long end = System.currentTimeMillis(); System.out.println(ito + ": rtn="
+ rtn); for (int i = 0; i < rtn; i++) { System.out.print(ito[i]+" "); }//列印結果幾陣列 System.out.println(); System.out.println("耗時:" + (end - begin) + "ms"); System.out.println("-------------------"); } }

解答1(原始,出錯)
應該是沒有考慮到陣列大小為1的情況,導致越界

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at Solution.removeDuplicates(Solution.java:4)
    at __DriverSolution__.__helper__(__Driver__.java:8)
    at __Driver__.main(__Driver__.java:52)
package pid26;

public class Solution {

    public int removeDuplicates(int[] nums) {
        int length=1;
        int previous=nums[0];
        for(int i=1;i<nums.length;i++){
            if(nums[i]==previous){

            }
            else{
                length++;               
                previous=nums[i];
                nums[length]=previous;
            }
        }
       return length;
    }

}

解答2(出錯) 得到數字正確,但是陣列不正確,第二個數字重複

public int removeDuplicates(int[] nums) {
        int length=1;
        if(nums.length==1){
            return 1;
        }

        int previous=nums[0];
        for(int i=1;i<nums.length;i++){
            if(nums[i]==previous){

            }
            else{
                length++;               
                previous=nums[i];
                nums[length]=previous;
            }
        }
       return length;
    }
1 1 2 [[email protected]: rtn=2
1 1 
耗時:1ms
-------------------
1 1 2 2 5 6 7 7 [[email protected]: rtn=5
1 1 2 5 6 
耗時:0ms
-------------------
1 2 3 5 [[email protected]: rtn=3
1 2 2 
耗時:0ms
-------------------
1 1 1 1 [[email protected]: rtn=1
1 
耗時:1ms
------------

解答3(leetcode出錯還是indexoutofbound,自己檢驗正確)
此時將nums[length-1]=previous;,length改為-1,因為佇列的關係,最後一個的index為length-1。
此時將if註釋掉還是這樣,將length作為solution的變數而不是函式的還是這樣

public int removeDuplicates(int[] nums) {
        int length=1;
        if(nums.length==1){
            return 1;
        }

        int previous=nums[0];
        for(int i=1;i<nums.length;i++){
            if(nums[i]==previous){

            }
            else{
                length++;               
                previous=nums[i];
                nums[length-1]=previous;
            }
        }
       return length;
    }

解答4(成功 11ms)
此時考慮了陣列為空的情況

package pid26;

public class Solution {
    int length=1;   
    public int removeDuplicates(int[] nums) {
        if(nums.length==0){
            return 0;
        }
        if(nums.length==1){
            return 1;
        }

        int previous=nums[0];
        for(int i=1;i<nums.length;i++){
            if(nums[i]==previous){

            }
            else{
                length++;               
                previous=nums[i];
                nums[length-1]=previous;
            }
        }
       return length;
    }

}

解答5(成功,自我優化後結果,10ms)
附思路

public class Solution {
    //計算思路,設定結果length,前一個的數值previous
    //從第二個陣列中的數字開始,向最後一個迴圈
    //如果該數字與previous相同,啥也不幹
    //如果不同,長度+1,previous變為當前的數字,陣列中的計算的當前不重複的位置為該值。

    public int removeDuplicates(int[] nums) {
        int length=1;
        if(nums.length==0){
            return 0;
        }       
        int previous=nums[0];
        for(int i=1;i<nums.length;i++){
            if(nums[i]!=previous){
                length++;               
                previous=nums[i];
                nums[length-1]=previous;
            }           
        }
       return length;
    }

}

解答6 別人的(成功)
思路基本一致,沒有用previous儲存前一個的值,直接取值

public int removeDuplicates(int[] nums) {
         if (nums.length == 0)
            return 0;
        //判斷無輸入
        int number = 0;//標記計數
        for (int i=0; i < nums.length ; i++) {
            if ( nums[i] != nums[number] ) {
                number++;
                nums[number] = nums[i];
            }
        }
        number+=1; //標記+1即為數字個數
        return number;

    }

相關推薦

LeetCode 26 刪除排序陣列重複 --python

給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。 示例 1: 給定陣列 nums = [1,1,2]函式應該返回新的長度 2, 並且

leetcode:26. 刪除排序陣列重複(C++)

給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。示例 1:給定陣列 nums = [1,1,2], 函式應該返回新的長度 2, 並且原陣列 nums

Leetcode(26)刪除排序陣列重複

題目描述 給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。 示例 1: 給定陣列 nums = [1,1,2], 函式應該返回新的長度 2, 並且原陣

leetcode 26. 刪除排序陣列重複陣列

題目: 給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。 示例 1: 給定陣列 nums = [1,1,2], 函式應該返回新的

LeetCode(26. 刪除排序陣列重複)

演算法描述 : 給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下

leetCode 26. 刪除排序陣列重複(swift)

給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。 給定一

Leetcode 26.刪除排序陣列重複(Python3)

26.刪除排序陣列中的重複項 給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。 示例 1: 給定陣列 nums = [1,1,2],

LeetCode 26.刪除排序陣列重複

給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。 示例 1: 給定陣列 nums = [1,1,2], 函式應該返回新的長度

LeetCode[26].刪除排序陣列重複

要求 給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。 示例 1: 給定陣列 nums = [1,1,2], 函式應該返

LeetCode 26. 刪除排序陣列重複 Remove Duplicates from Sorted Array(C語言)

題目描述: 給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。 示例 1: 給定陣列 nums = [1,1,2], 函式應該返

LeetCode 26 刪除排序陣列重複 python

給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。 示例 1: 給定陣列 nums = [1,1,2], 函式應該返回新

LeetCode 26. 刪除排序陣列重複 C++程式碼實現

題目描述: 給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。 示例 1: 給定陣列 nums = [1,1,2], 函式應

leetcode-26- 刪除排序陣列重複-java

題目與測試樣例 package pid26; /*26. 刪除排序陣列中的重複項 題目描述提示幫助提交記錄社群討論閱讀解答 隨機一題 給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素

leetcode-26 刪除排序陣列重複(RemoveDuplicatesFromSortedArray)-java

題目:刪除排序陣列中的重複項給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。示例 1:給定陣列 nums = [1,1,2], 函式

LeetCode 26. 刪除排序陣列重複(C++)

題目: 給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。 思路 由於是有序陣列,所以可以一次遍歷陣列,通

scala刷LeetCode--26 刪除排序陣列重複

一、題目描述 給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。 二、示例 示例 1 給定陣列 nums = [1,1,2], 函式應該返回新的長度

26. 刪除排序陣列重複Leetcode

文章目錄 題目描述 思路及解答 題目描述 給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在

Leetcode做題日記:26. 刪除排序陣列重複(PYTHON)

給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。 示例 1: 給定陣列 nums = [1,1,2], 函式應該返回新的長度 2, 並且原陣列 num

leetcode python 26. 刪除排序陣列重複

class Solution: def removeDuplicates(self, nums): """ :type nums: List[int] :rtype: int """

26.刪除排序陣列重複

題目:刪除排序陣列中的重複項 給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。 思路: 1.陣列完成排序後,設定兩個指標 i 和 j,其中 j 是