给定一个未排序的数组,计算其中所有不同的元素。
例子:
Input : arr[] = {10, 20, 20, 10, 30, 10}
Output : 3
There are three distinct elements 10, 20 and 30.
Input : arr[] = {10, 20, 20, 10, 20}
Output : 2
一个简单的解决方案是运行两个循环。对于每个元素,检查它之前是否出现过。如果是,则增加不同元素的计数。
C++
// C++ program to count distinct elements
// in a given array
#include
using namespace std;
int countDistinct(int arr[], int n)
{
int res = 1;
// Pick all elements one by one
for (int i = 1; i < n; i++) {
int j = 0;
for (j = 0; j < i; j++)
if (arr[i] == arr[j])
break;
// If not printed earlier, then print it
if (i == j)
res++;
}
return res;
}
// Driver program to test above function
int main()
{
int arr[] = { 12, 10, 9, 45, 2, 10, 10, 45 };
int n = sizeof(arr) / sizeof(arr[0]);
cout << countDistinct(arr, n);
return 0;
}
Java
// Java program to count distinct
// elements in a given array
class GFG
{
static int countDistinct(int arr[], int n)
{
int res = 1;
// Pick all elements one by one
for (int i = 1; i < n; i++)
{
int j = 0;
for (j = 0; j < i; j++)
if (arr[i] == arr[j])
break;
// If not printed earlier,
// then print it
if (i == j)
res++;
}
return res;
}
// Driver code
public static void main(String[] args)
{
int arr[] = { 12, 10, 9, 45, 2, 10, 10, 45 };
int n = arr.length;
System.out.println(countDistinct(arr, n));
}
}
// This code is contributed by Code_Mech.
Python3
# Python3 program to count distinct
# elements in a given array
def countDistinct(arr, n):
res = 1
# Pick all elements one by one
for i in range(1, n):
j = 0
for j in range(i):
if (arr[i] == arr[j]):
break
# If not printed earlier, then print it
if (i == j + 1):
res += 1
return res
# Driver Code
arr = [12, 10, 9, 45, 2, 10, 10, 45]
n = len(arr)
print(countDistinct(arr, n))
# This code is contributed by Mohit Kumar
C#
// C# program to count distinct
// elements in a given array
using System;
class GFG
{
static int countDistinct(int []arr, int n)
{
int res = 1;
// Pick all elements one by one
for (int i = 1; i < n; i++)
{
int j = 0;
for (j = 0; j < i; j++)
if (arr[i] == arr[j])
break;
// If not printed earlier,
// then print it
if (i == j)
res++;
}
return res;
}
// Driver code
public static void Main()
{
int []arr = { 12, 10, 9, 45,
2, 10, 10, 45 };
int n = arr.Length;
Console.WriteLine(countDistinct(arr, n));
}
}
// This code is contributed
// by Akanksha Rai
PHP
Javascript
C++
// C++ program to count all distinct elements
// in a given array
#include
#include
using namespace std;
int countDistinct(int arr[], int n)
{
// First sort the array so that all
// occurrences become consecutive
sort(arr, arr + n);
// Traverse the sorted array
int res = 0;
for (int i = 0; i < n; i++) {
// Move the index ahead while
// there are duplicates
while (i < n - 1 && arr[i] == arr[i + 1])
i++;
res++;
}
return res;
}
// Driver program to test above function
int main()
{
int arr[] = { 6, 10, 5, 4, 9, 120, 4, 6, 10 };
int n = sizeof(arr) / sizeof(arr[0]);
cout << countDistinct(arr, n);
return 0;
}
Java
// Java program to count all distinct elements
// in a given array
import java.util.Arrays;
class GFG
{
static int countDistinct(int arr[], int n)
{
// First sort the array so that all
// occurrences become consecutive
Arrays.sort(arr);
// Traverse the sorted array
int res = 0;
for (int i = 0; i < n; i++)
{
// Move the index ahead while
// there are duplicates
while (i < n - 1 &&
arr[i] == arr[i + 1])
{
i++;
}
res++;
}
return res;
}
// Driver code
public static void main(String[] args)
{
int arr[] = {6, 10, 5, 4, 9, 120, 4, 6, 10};
int n = arr.length;
System.out.println(countDistinct(arr, n));
}
}
// This code is contributed by 29AjayKumar
Python3
# Python3 program to count all distinct
# elements in a given array
def countDistinct(arr, n):
# First sort the array so that all
# occurrences become consecutive
arr.sort();
# Traverse the sorted array
res = 0;
i = 0;
while(i < n):
# Move the index ahead while
# there are duplicates
while (i < n - 1 and
arr[i] == arr[i + 1]):
i += 1;
res += 1;
i += 1;
return res;
# Driver Code
arr = [ 6, 10, 5, 4, 9, 120, 4, 6, 10 ];
n = len(arr);
print(countDistinct(arr, n));
# This code is contributed by mits
C#
// C# program to count all distinct elements
// in a given array
using System;
class GFG
{
static int countDistinct(int[] arr, int n)
{
// First sort the array so that all
// occurrences become consecutive
Array.Sort(arr);
// Traverse the sorted array
int res = 0;
for (int i = 0; i < n; i++)
{
// Move the index ahead while
// there are duplicates
while (i < n - 1 &&
arr[i] == arr[i + 1])
{
i++;
}
res++;
}
return res;
}
// Driver code
public static void Main()
{
int[] arr = {6, 10, 5, 4, 9, 120, 4, 6, 10};
int n = arr.Length;
Console.WriteLine(countDistinct(arr, n));
}
}
// This code is contributed by Code_Mech.
PHP
Javascript
C++
/* CPP program to print all distinct elements
of a given array */
#include
using namespace std;
// This function prints all distinct elements
int countDistinct(int arr[], int n)
{
// Creates an empty hashset
unordered_set s;
// Traverse the input array
int res = 0;
for (int i = 0; i < n; i++) {
// If not present, then put it in
// hashtable and increment result
if (s.find(arr[i]) == s.end()) {
s.insert(arr[i]);
res++;
}
}
return res;
}
// Driver program to test above function
int main()
{
int arr[] = { 6, 10, 5, 4, 9, 120, 4, 6, 10 };
int n = sizeof(arr) / sizeof(arr[0]);
cout << countDistinct(arr, n);
return 0;
}
Java
// Java Program to count
// Unique elements in Array
import java.util.*;
class GFG
{
// This method returns count
// of Unique elements
public static int countDistinct(int arr[],int n)
{
HashSet hs = new HashSet();
for(int i = 0; i < n; i++)
{
// add all the elements to the HashSet
hs.add(arr[i]);
}
// return the size of hashset as
// it consists of all Unique elements
return hs.size();
}
// Driver code
public static void main(String[] args)
{
int arr[] = new int[]{6, 10, 5, 4, 9,
120, 4, 6, 10};
System.out.println(countDistinct(arr,
arr.length));
}
}
// This code is contributed by Adarsh_Verma
Python3
''' Python3 program to prall distinct elements
of a given array '''
# This function prints all distinct elements
def countDistinct(arr, n):
# Creates an empty hashset
s = set()
# Traverse the input array
res = 0
for i in range(n):
# If not present, then put it in
# hashtable and increment result
if (arr[i] not in s):
s.add(arr[i])
res += 1
return res
# Driver code
arr = [6, 10, 5, 4, 9, 120, 4, 6, 10]
n = len(arr)
print(countDistinct(arr, n))
# This code is contributed by SHUBHAMSINGH10
C#
// C# Program to count
// Unique elements in Array
using System;
using System.Collections.Generic;
class GFG
{
// This method returns count
// of Unique elements
public static int countDistinct(int []arr,int n)
{
HashSet hs = new HashSet();
for(int i = 0; i < n; i++)
{
// add all the elements to the HashSet
hs.Add(arr[i]);
}
// return the size of hashset as
// it consists of all Unique elements
return hs.Count;
}
// Driver code
public static void Main()
{
int []arr = new int[]{6, 10, 5, 4, 9,
120, 4, 6, 10};
Console.WriteLine(countDistinct(arr,
arr.Length));
}
}
/* This code contributed by PrinciRaj1992 */
PHP
Javascript
C++
#include
using namespace std;
// function that accepts the array and it's size and returns
// the number of distince elements
int distinct(int* arr, int len)
{
set S; // declaring a set container using STL
for (int i = 0; i < len; i++) {
S.insert(arr[i]); // inserting all elements of the
// array into set
}
int ans = S.size(); // calculating the size of the set
return ans;
}
int main()
{
int arr[] = { 12, 10, 9, 45, 2, 10, 10, 45};
int l = sizeof(arr)
/ sizeof(
int); // calculating the size of the array
int dis_elements
= distinct(arr, l); // calling the function on array
cout << dis_elements << endl;
return 0;
}
输出
5
上述解决方案的时间复杂度为 O(n 2 )。我们可以使用排序在 O(nLogn) 时间内解决问题。这个想法很简单,首先对数组进行排序,使每个元素的所有出现都变得连续。一旦出现连续,我们就可以遍历已排序的数组并在 O(n) 时间内计算不同的元素。下面是这个想法的实现。
C++
// C++ program to count all distinct elements
// in a given array
#include
#include
using namespace std;
int countDistinct(int arr[], int n)
{
// First sort the array so that all
// occurrences become consecutive
sort(arr, arr + n);
// Traverse the sorted array
int res = 0;
for (int i = 0; i < n; i++) {
// Move the index ahead while
// there are duplicates
while (i < n - 1 && arr[i] == arr[i + 1])
i++;
res++;
}
return res;
}
// Driver program to test above function
int main()
{
int arr[] = { 6, 10, 5, 4, 9, 120, 4, 6, 10 };
int n = sizeof(arr) / sizeof(arr[0]);
cout << countDistinct(arr, n);
return 0;
}
Java
// Java program to count all distinct elements
// in a given array
import java.util.Arrays;
class GFG
{
static int countDistinct(int arr[], int n)
{
// First sort the array so that all
// occurrences become consecutive
Arrays.sort(arr);
// Traverse the sorted array
int res = 0;
for (int i = 0; i < n; i++)
{
// Move the index ahead while
// there are duplicates
while (i < n - 1 &&
arr[i] == arr[i + 1])
{
i++;
}
res++;
}
return res;
}
// Driver code
public static void main(String[] args)
{
int arr[] = {6, 10, 5, 4, 9, 120, 4, 6, 10};
int n = arr.length;
System.out.println(countDistinct(arr, n));
}
}
// This code is contributed by 29AjayKumar
蟒蛇3
# Python3 program to count all distinct
# elements in a given array
def countDistinct(arr, n):
# First sort the array so that all
# occurrences become consecutive
arr.sort();
# Traverse the sorted array
res = 0;
i = 0;
while(i < n):
# Move the index ahead while
# there are duplicates
while (i < n - 1 and
arr[i] == arr[i + 1]):
i += 1;
res += 1;
i += 1;
return res;
# Driver Code
arr = [ 6, 10, 5, 4, 9, 120, 4, 6, 10 ];
n = len(arr);
print(countDistinct(arr, n));
# This code is contributed by mits
C#
// C# program to count all distinct elements
// in a given array
using System;
class GFG
{
static int countDistinct(int[] arr, int n)
{
// First sort the array so that all
// occurrences become consecutive
Array.Sort(arr);
// Traverse the sorted array
int res = 0;
for (int i = 0; i < n; i++)
{
// Move the index ahead while
// there are duplicates
while (i < n - 1 &&
arr[i] == arr[i + 1])
{
i++;
}
res++;
}
return res;
}
// Driver code
public static void Main()
{
int[] arr = {6, 10, 5, 4, 9, 120, 4, 6, 10};
int n = arr.Length;
Console.WriteLine(countDistinct(arr, n));
}
}
// This code is contributed by Code_Mech.
PHP
Javascript
输出
6
我们可以使用哈希在平均 O(n) 时间内解决这个问题。这个想法是从左到右遍历给定的数组并跟踪散列集合中访问过的元素,因为一个集合只包含唯一的元素。
下面是这个想法的实现。
C++
/* CPP program to print all distinct elements
of a given array */
#include
using namespace std;
// This function prints all distinct elements
int countDistinct(int arr[], int n)
{
// Creates an empty hashset
unordered_set s;
// Traverse the input array
int res = 0;
for (int i = 0; i < n; i++) {
// If not present, then put it in
// hashtable and increment result
if (s.find(arr[i]) == s.end()) {
s.insert(arr[i]);
res++;
}
}
return res;
}
// Driver program to test above function
int main()
{
int arr[] = { 6, 10, 5, 4, 9, 120, 4, 6, 10 };
int n = sizeof(arr) / sizeof(arr[0]);
cout << countDistinct(arr, n);
return 0;
}
Java
// Java Program to count
// Unique elements in Array
import java.util.*;
class GFG
{
// This method returns count
// of Unique elements
public static int countDistinct(int arr[],int n)
{
HashSet hs = new HashSet();
for(int i = 0; i < n; i++)
{
// add all the elements to the HashSet
hs.add(arr[i]);
}
// return the size of hashset as
// it consists of all Unique elements
return hs.size();
}
// Driver code
public static void main(String[] args)
{
int arr[] = new int[]{6, 10, 5, 4, 9,
120, 4, 6, 10};
System.out.println(countDistinct(arr,
arr.length));
}
}
// This code is contributed by Adarsh_Verma
蟒蛇3
''' Python3 program to prall distinct elements
of a given array '''
# This function prints all distinct elements
def countDistinct(arr, n):
# Creates an empty hashset
s = set()
# Traverse the input array
res = 0
for i in range(n):
# If not present, then put it in
# hashtable and increment result
if (arr[i] not in s):
s.add(arr[i])
res += 1
return res
# Driver code
arr = [6, 10, 5, 4, 9, 120, 4, 6, 10]
n = len(arr)
print(countDistinct(arr, n))
# This code is contributed by SHUBHAMSINGH10
C#
// C# Program to count
// Unique elements in Array
using System;
using System.Collections.Generic;
class GFG
{
// This method returns count
// of Unique elements
public static int countDistinct(int []arr,int n)
{
HashSet hs = new HashSet();
for(int i = 0; i < n; i++)
{
// add all the elements to the HashSet
hs.Add(arr[i]);
}
// return the size of hashset as
// it consists of all Unique elements
return hs.Count;
}
// Driver code
public static void Main()
{
int []arr = new int[]{6, 10, 5, 4, 9,
120, 4, 6, 10};
Console.WriteLine(countDistinct(arr,
arr.Length));
}
}
/* This code contributed by PrinciRaj1992 */
PHP
Javascript
输出
6
设置 STL 方法:
集合是一种关联容器,其中每个元素都必须是唯一的,因为元素的值可以标识它。元素的值一旦添加到集合中就无法修改,但可以删除和添加该元素的修改后的值。我们利用了集合 STL 的非常基本的特性,即它只存储唯一的数字。
例子:
Arr = [1,2,2,2,3,16,2,8,2,1,8]
存在不同的元素 = [1,2,3,16,8]
数组中不同元素的总数为5
算法 :
1. 将所有元素一一插入到集合S中。
2.存储的总大小S使用组::大小的一组()。
3.总大小s是数组中存在的不同元素的数量。
C++
#include
using namespace std;
// function that accepts the array and it's size and returns
// the number of distince elements
int distinct(int* arr, int len)
{
set S; // declaring a set container using STL
for (int i = 0; i < len; i++) {
S.insert(arr[i]); // inserting all elements of the
// array into set
}
int ans = S.size(); // calculating the size of the set
return ans;
}
int main()
{
int arr[] = { 12, 10, 9, 45, 2, 10, 10, 45};
int l = sizeof(arr)
/ sizeof(
int); // calculating the size of the array
int dis_elements
= distinct(arr, l); // calling the function on array
cout << dis_elements << endl;
return 0;
}
输出
5
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。