给定一个数组arr[]和一个整数K 。任务是找到最大子集的大小,使得子集(X, Y)中的每一对都具有Y != (X * K) 形式,其中X < Y 。
例子:
Input: arr[] = {2, 3, 6, 5, 4, 10}, K = 2
Output: 3
{2, 3, 5} is the required sub-set
Input: arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, K = 2
Output: 6
方法:
- 对所有数组元素进行排序。
- 创建一个空的整数集S ,它将保存子集的元素。
- 遍历已排序的数组,对于数组中的每个整数x :
- 如果x % k = 0或x / k不存在于S 中,则将x插入到S 中。
- 否则丢弃x并检查下一个元素。
- 最后打印集合S的大小。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
// Function to return the size of the required sub-set
int sizeSubSet(int a[], int k, int n)
{
// Sort the array
sort(a, a + n);
// Set to store the contents of the required sub-set
unordered_set s;
// Insert the elements satisfying the conditions
for (int i = 0; i < n; i++) {
if (a[i] % k != 0 || s.count(a[i] / k) == 0)
s.insert(a[i]);
}
// Return the size of the set
return s.size();
}
// Driver code
int main()
{
int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int n = sizeof(a) / sizeof(a[0]);
int k = 2;
cout << sizeSubSet(a, k, n);
return 0;
}
Java
// Java implementation of the approach
import java.util.*;
class GFG
{
// Function to return the size of the required sub-set
static int sizeSubSet(int a[], int k, int n)
{
// Sort the array
Arrays.sort(a);
// HashMap to store the contents
// of the required sub-set
HashMap< Integer, Integer> s = new HashMap< Integer, Integer>();
// Insert the elements satisfying the conditions
for (int i = 0; i < n; i++)
{
if (a[i] % k != 0 || s.get(a[i] / k) == null)
s.put(a[i], s.get(a[i]) == null ? 1 : s.get(a[i]) + 1);
}
// Return the size of the set
return s.size();
}
// Driver code
public static void main(String args[])
{
int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int n = a.length;
int k = 2;
System.out.println( sizeSubSet(a, k, n));
}
}
// This code is contributed by Arnab Kundu
Python3
# Python3 implementation of the approach
import math as mt
# Function to return the size of the required sub-set
def sizeSubSet(a, k, n):
# Sort the array
a.sort()
# Set to store the contents of the required sub-set
s=set()
# Insert the elements satisfying the conditions
for i in range(n):
if (a[i] % k != 0 or a[i] // k not in s):
s.add(a[i])
# Return the size of the set
return len(s)
# Driver code
a=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
n = len(a)
k = 2
print(sizeSubSet(a, k, n))
# This is contributed by Mohit kumar 29
C#
// C# mplementation of the approach
using System;
using System.Collections.Generic;
class GFG
{
// Function to return the size of
// the required sub-set
static int sizeSubSet(int []a, int k, int n)
{
// Sort the array
Array.Sort(a);
// HashMap to store the contents
// of the required sub-set
Dictionary s = new Dictionary();
// Insert the elements satisfying the conditions
for (int i = 0; i < n; i++)
{
if (a[i] % k != 0 || !s.ContainsKey(a[i] / k))
{
if(s.ContainsKey(a[i]))
{
var val = s[a[i]];
s.Remove(a[i]);
s.Add(a[i], val + 1);
}
else
{
s.Add(a[i], 1);
}
}
}
// Return the size of the set
return s.Count;
}
// Driver code
public static void Main(String []args)
{
int []a = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int n = a.Length;
int k = 2;
Console.WriteLine(sizeSubSet(a, k, n));
}
}
// This code is contributed by PrinciRaj1992
PHP
Javascript
输出:
6
想要从精选的视频和练习题中学习,请查看C++ 基础课程,从基础到高级 C++ 和C++ STL 课程,了解语言和 STL。要完成从学习语言到 DS Algo 等的准备工作,请参阅完整的面试准备课程。