Leetcode之旅----------------入门:有序数组去重

版权声明:原创版权为博主所有,博主项目网址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。

猜你喜欢

转载自blog.csdn.net/qq_35180973/article/details/82499663