题目:给定任意一个有序整数数组,计算出去除重复后的数组长度,并按长度生序重新组合该数组,超出新数组成都后面的数不做要求。但是要求只能在原数组进行更改。
示例:
输入: nums=[1,2,2,3,3,3,4,5,6,6,7]
输出:7
(新数组为: newNums=[1,2,3,4,5,6,7,5,6,6,7])
题目分析:
Java代码:
import java.util.Arrays;
/**
* 给定任意一个有序整数数组,计算出去除重复后的数组长度,
* 并按长度生序重新组合该数组,超出新数组成都后面的数不做要求。
* 但是要求只能在原数组进行更改。
*/
public class DeleteArray {
public static void main(String[] args) {
int[] nums1 = {1,2,2,3,3,3,5,6,6,7};
int result = removeDuplicates2(nums1);
System.out.println(result);
}
/**
* 双指针之快慢指针
* @param arr
* @return
*/
private static int removeDuplicates2(int[] arr) {
// 边界处理
if (arr==null || arr.length==0){
return 0;
}
int slow = 0; // 慢指针
// 快慢指针从同一个位置出发
for (int fast = 0; fast < arr.length; fast++) {
if (arr[slow]!=arr[fast]){
slow++;
arr[slow] = arr[fast];
}
}
return slow+1;
}
}
【注】
(1):leetcode 等平台只要我们完成一个函数即可,本人初出茅庐,为了巩固基本知识,故自己补充了部分代码,用于练手。本代码也许存在漏洞,望高手赐教。感谢!