有序数据去重并计算平方值相同 的个数

2020-09-26  本文已影响0人  liust15

给定一个有序数组,数组中有正数、负数或者0,对数组中所有的数求平方后问有多少个不同的值。
比如对于数组[-1,0,1,1,1,1],对数组求平方后为[1,0,1,1,1,1],那么最终的结果是2,因为最后只有0和1两个不同的数;

对于数组[-1,0,1,2,3],对数组求平方后为[1,0,1,4,9],那么最终的结果是4,因为最后数组中为0,1,4,9这四个不同的数;

同事提到只有时间复杂度为O(n),空间复杂度为O(1)的算法

  /*
     * 有序数据去重
     * */

    public static void removeDuplicate(int[] arr) {
        int i = 0, j = i + 1;
        for (; j < arr.length; j++) {
            if (arr[i] != arr[j]) {
                arr[++i] = arr[j];
            }
        }
        System.out.println(i);
        System.out.println(Arrays.toString(arr));
        int result = getResult(arr, i);
        System.out.println(result);
    }


    private static int getResult(int[] arr, int r) {
        int l = 0, sum = 0;
        while (l <= r) {
            if (arr[l] >= 0) {
                sum++;
                l++;
                continue;
            }
            if (-arr[l]==arr[r]) {
                l++;
                continue;
            }else if(-arr[l]>=arr[r]){
                l++;
            }else {
                r--;
            }
            sum++;

        }
        return sum;
    }

    public static void main(String[] args) {
        int[] arr = new int[]{-4, -4, -4, -3, -3, -2, -1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 6, 7};
        removeDuplicate(arr);
    }
上一篇下一篇

猜你喜欢

热点阅读