美文网首页
有序数据去重并计算平方值相同 的个数

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

作者: liust15 | 来源:发表于2020-09-26 20:41 被阅读0次

    给定一个有序数组,数组中有正数、负数或者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);
        }
    

    相关文章

      网友评论

          本文标题:有序数据去重并计算平方值相同 的个数

          本文链接:https://www.haomeiwen.com/subject/nxjhuktx.html