在 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
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP