删除数组中重复的元素(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

猜你喜欢

转载自blog.csdn.net/weixin_42495773/article/details/106091538