###题目:
给定一个数组,删除重复出现的元素,使得每个元素只出现一次,并返回数组的新长度。
* 注意:不要使用额外的数组空间,必须在原地修改输入数组,并在使用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