版权声明:原创版权为博主所有,博主项目网址www.github.com/994683607,转载请注明出处。 https://blog.csdn.net/qq_35180973/article/details/82499663
1.Leetcode 有序数组去重,点击查看题目。
注:方法一和方法二能通过测试,方法三不能。
源代码如下:
package hello01.Leetcode.数组;
import java.util.*;
/**
* @author created by Zhangdazhuang
* @version v.0.1
* @date 2018/9/7
* @备注 地址:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/description/
* <p>
* 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,
* ------返回移除后数组的新长度。----------
* <p>
* 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
* 输入:nums = [1,1,2], 输出:2
* nums = [0,0,1,1,1,2,2,3,3,4], 输出 5
*/
public class shuzu1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int[] nums = {0, 0, 1, 1, 1, 2, 2, 3, 3, 4};
System.out.println("第一种方法:" + removeDuplicates1(nums));
System.out.println("第二种方法:" + removeDuplicates2(nums));
System.out.println("第三种方法:" + removeDuplicates3(nums));
}
public static int removeDuplicates1(int[] array) {
//数组统一用字母表示
//判断空和长度为0的情况
if (array == null || array.length == 0) return 0;
int pre = 0, cur = 1;
int pos = 1; //最后返回长度
//cur=1,pre=0 有序数组
//a[0]=1,a[1]=1,a[2]=2
while (cur < array.length) { //判断条件 cur从1到length-1
//cur:当前数组元素,pre下一数组元素
if (array[cur] != array[pre]) {
//当前元素和前一元素不同时,将当前元素赋值给新数组元素
array[pos++] = array[cur];
}
//每次比较相邻两个元素,发现不同就加一
pre++; // 0 1
cur++; // 1 2
}
return pos;
}
public static int removeDuplicates2(int[] nums) {
//1 1 2,返回2,数组前两个元素修改为1 2
int i, number = 0;
for (i = 1; i < nums.length; i++) {
if (nums[number] != nums[i]) {
nums[++number] = nums[i];
}
}
return ++number;
}
public static int removeDuplicates3(int[] array) {
//数组统一用字母表示
//判断空和长度为0的情况
if (array == null || array.length == 0) return 0;
int count = 0;
Set<Integer> setarray = new HashSet<>();
for (int i = 0; i < array.length; i++) {
setarray.add(array[i]);
}
int i = 0;
Iterator it = setarray.iterator();
while (it.hasNext()) {
array[i++] = (int) it.next();
}
for (i = 0; i < array.length; i++) {
System.out.println("改变以后的数组:" + array[i]);
}
//System.out.println("length:" + array.length);
Arrays.sort(array);
/* for (Integer newarray : setarray) {
System.out.println("新set为:" + newarray);
}*/
return setarray.size();
}
}
以后会把自己的Leetcode之旅记录下来,争取拿下leetcode小Tshirt。