###題目:
給定一個數組,刪除重複出現的元素,使得每個元素只出現一次,並返回數組的新長度。
* 注意:不要使用額外的數組空間,必須在原地修改輸入數組,並在使用O(1)額外空間的條件下完成
* 示例:
* 給定數組nums = [0,0,1,1,1,2,2,3,3,4]。
* 函數因該返回新的長度5,並且原數組nums的前5個元素被修改爲0,1,2,3,4。
* 不需要考慮數組中超出新長度後面的元素。
### (個人)解題思路
* 1、準備一個變量n,初始賦值爲0。
* 2、遍歷數組元素,初始下標從1開始。
* (1)、開始判斷首次a[0]與a[1]的值是否相等,如果不相等,則讓n+1,同時把a[i]的值賦值給a[0+1];
* 然後進入下一次a[n]與a[i]比對,也就是a[1] 與 a[2]比對,依次類推,直到比對完最後一個元素。
* (2)、因爲n是從0開始的,n最後比對次數比“去掉重複元素個數後的數組長度(array.length)小了1”,所以返回值要加1。
package com.zpark.leetcode;
/**
* @author LLJ
* @time 2020-5-9 上午8:49:21
* @Description 給定一個數組,刪除重複出現的元素,使得每個元素只出現一次,並返回數組的新長度。
* 注意:不要使用額外的數組空間,必須在原地修改輸入數組,並在使用O(1)額外空間的條件下完成
* 示例:
* 給定數組nums = [0,0,1,1,1,2,2,3,3,4]。
* 函數因該返回新的長度5,並且原數組nums的前5個元素被修改爲0,1,2,3,4。
* 不需要考慮數組中超出新長度後面的元素。
*
* ### 解題思路
* 1、準備一個變量n,初始賦值爲0。
* 2、遍歷數組元素,初始下標從1開始。
* (1)、開始判斷首次a[0]與a[1]的值是否相等,如果不相等,則讓n+1,同時把a[i]的值賦值給a[0+1];
* 然後進入下一次a[n]與a[i]比對,也就是a[1] 與 a[2]比對,依次類推,直到比對完最後一個元素。
* (2)、因爲n是從0開始的,n最後比對次數比“去掉重複元素個數後的數組長度(array.length)小了1”,所以返回值要加1。
*/
public class Code1 {
public static void main(String[] args) {
int nums[] = {1,1,1,3,3,5,7,9};
int n = returnArray(nums);
System.out.println(n);
}
/**
* 返回不重複的數組元素的個數
* @Time 2020-5-11 上午10:15:00
* @param a
* @return
*/
public static int returnArray(int a[]){
if(a == null || a.length == 0){//排除數組爲空的元素
return 0;
}
int n = 0;
for (int i = 1; i < a.length; i++) {
if(a[n] != a[i]){//如果a[0] != a[1],則把a[1]的值賦值給a[n],讓a[n]繼續往後比對
n++;
a[n] = a[i];
}
}
return n+1;//因爲n是從0開始的,但元素個數是從1開始的,所以要+1
}
}
輸出結果爲:
5