在 C++ 中對排序陣列進行絕對去重計數?


陣列是相同資料型別元素的集合。排序陣列是指元素按升序或降序排列的陣列。

去重計數是指不相同的元素的數量。

絕對去重計數是指元素絕對值的去重計數,即不帶符號(無符號值)的元素。

在本程式中,我們將找到排序陣列中的絕對去重計數。即,如果考慮陣列中每個元素的絕對值,我們將計算不同值的個數。

例如,

Input : [-3 , 0 , 3 , 6 ]
Output : 3

陣列中有 3 個不同的絕對值,元素為 0、3 和 6。

為了解決這個問題,我們有幾種方法,使用不同的方式。

使用集合

集合始終包含不同的元素。因此,我們將檢查集合中的絕對值,如果它不可用,我們將向集合中新增元素。並返回集合的大小。

演算法 -

  • 建立一個與陣列相同資料型別的集合。

  • 找到每個元素的絕對值並將元素儲存在陣列中。即使遇到多個值,集合也會儲存一個唯一值。

  • 輸入所有元素後。返回集合的長度。這將給出陣列中不同元素的數量。

示例

即時演示

#include <bits/stdc++.h>
using namespace std;
int main() {
   int arr[] = {-3, 0, 2, 6};
   int n = sizeof(arr)/sizeof(arr[0]);
   cout << "Count of absolute distinct values : ";
   unordered_set<int> s;
   for (int i = 0 ; i < n; i++)
      s.insert(abs(arr[i]));
      int nof = s.size();
      cout<<nof;
      return 0;
}

輸出

Count of absolute distinct values : 4

使用陣列檢查和計數變數

此方法僅使用單個變數而不是集合。我們將為您提供一個計數變數來計算陣列中不同元素的數量。

示例

即時演示

#include <iostream>
using namespace std;
int main() {
   int arr[] = {-5, -1, 0, 5, 8};
   int n = sizeof(arr)/sizeof(arr[0]);
   cout << "Count of absolute distinct values : ";
   int count = n;
   int i = 0, j = n - 1, sum = 0;
   while (i < j) {
      while (i != j && arr[i] == arr[i + 1])
         count--, i++;
      while (i != j && arr[j] == arr[j - 1])
         count--, j--;
      if (i == j)
         break;
      sum = arr[i] + arr[j];
      if (sum == 0) {
         count--;
         i++, j--;
      }
      else if(sum < 0)
         i++;
      else
         j--;
   }
   cout<< count;
   return 0;
}

輸出

Count of absolute distinct values : 4

更新於: 2020-07-06

232 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.