刪除數組中重複的元素(leetcode算法練習)

###題目:

給定一個數組,刪除重複出現的元素,使得每個元素只出現一次,並返回數組的新長度。
 *   注意:不要使用額外的數組空間,必須在原地修改輸入數組,並在使用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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章