有序數(shù)據(jù)去重并計算平方值相同 的個數(shù)

給定一個有序數(shù)組,數(shù)組中有正數(shù)、負數(shù)或者0,對數(shù)組中所有的數(shù)求平方后問有多少個不同的值。
比如對于數(shù)組[-1,0,1,1,1,1],對數(shù)組求平方后為[1,0,1,1,1,1],那么最終的結果是2,因為最后只有0和1兩個不同的數(shù);

對于數(shù)組[-1,0,1,2,3],對數(shù)組求平方后為[1,0,1,4,9],那么最終的結果是4,因為最后數(shù)組中為0,1,4,9這四個不同的數(shù);

同事提到只有時間復雜度為O(n),空間復雜度為O(1)的算法

  /*
     * 有序數(shù)據(jù)去重
     * */

    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);
    }
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容