给定一个未排序的数组,请计算其中所有不同的元素。
例子:
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
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
输出:
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
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
输出:
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
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
输出:
6