查找数组中元素的索引,该数组将其之前的大多数元素相除
给定一个数组arr ,任务是找到一个数组中元素的索引,该数组将它之前的大多数元素相除
例子:
Input: arr = {5, 2, 1, 4, 5, 8, 2}
Output: 6
Explanation
arr[6] = 2
it divides 2, 4, and 8 (3 elements)
Input: arr = {8, 1, 28, 4, 1, 6, 7}
Output: 4
方法:
- 维护一张地图。
- 对于每个 arr[i],通过查看 ar[i] 的映射来更新计数变量,并将 ar[i] 的所有除数插入到映射中。
- 如果 cnt > maxx 则更新 maxElement。
- 最后用 maxElement 返回索引。
以下是上述方法的实现:
CPP
// C++ program find the index of the element
// in an array which divides
// most elements before it
#include
using namespace std;
// Function to get the max element
// divisible by arr[i]
int maxElement(int arr[], int n)
{
map mp;
int maxx = -1, maxElement = -1;
for (int i = 0; i < n; i++) {
int num = arr[i];
int cnt = 0;
// Update count for A[i]
if (mp.find(num) != mp.end()) {
cnt += mp[num];
}
// Generate Divisor For A[i]
for (int j = 1; j * j <= num; j++) {
if (num % j == 0) {
mp[j]++;
if (j != num / j)
mp[num / j]++;
}
}
// Update Max Element
if (cnt > maxx) {
maxElement = i;
maxx = cnt;
}
}
return maxElement;
}
// Driver code
int main()
{
int arr[] = { 5, 2, 1, 4, 5, 8, 2 };
int n = sizeof(arr) / sizeof(arr[0]);
cout << maxElement(arr, n) << '\n';
return 0;
}
Java
// Java program find the index of the element
// in an array which divides
// most elements before it
import java.util.*;
class GFG
{
// Function to get the max element
// divisible by arr[i]
static int maxElement(int arr[], int n)
{
HashMap mp = new HashMap();
int maxx = -1, maxElement = -1;
for (int i = 0; i < n; i++)
{
int num = arr[i];
int cnt = 0;
// Update count for A[i]
if (mp.containsKey(num))
{
cnt += mp.get(num);
}
// Generate Divisor For A[i]
for (int j = 1; j * j <= num; j++)
{
if (num % j == 0)
{
if (mp.containsKey(j))
mp.put(j, mp.get(j) + 1);
else
mp.put(j, 1);
if (j != num / j)
if (mp.containsKey(num / j))
mp.put(num / j, mp.get(num / j) + 1);
else
mp.put(num / j, 1);
}
}
// Update Max Element
if (cnt > maxx)
{
maxElement = i;
maxx = cnt;
}
}
return maxElement;
}
// Driver code
public static void main(String[] args)
{
int arr[] = { 5, 2, 1, 4, 5, 8, 2 };
int n = arr.length;
System.out.print(maxElement(arr, n));
}
}
// This code is contributed by 29AjayKumar
Python
# Python3 program find the index of the element
# in an array which divides
# most elements before it
# Function to get the max element
# divisible by arr[i]
def maxElement(arr, n):
mp = dict()
maxx = -1
maxElement = -1
for i in range(n):
num = arr[i]
cnt = 0
# Update count for A[i]
if (num in mp):
cnt += mp[num]
# Generate Divisor For A[i]
j = 1
while j * j <= num:
if (num % j == 0):
mp[j] = mp.get(j, 0) + 1
if (j != num // j):
mp[num // j] = mp.get(num//j, 0) + 1
j += 1
# Update Max Element
if (cnt > maxx):
maxElement = i
maxx = cnt
return maxElement
# Driver code
arr = [5, 2, 1, 4, 5, 8, 2]
n = len(arr)
print(maxElement(arr, n))
# This code is contributed by mohit kumar 29
C#
// C# program find the index of the element
// in an array which divides
// most elements before it
using System;
using System.Collections.Generic;
class GFG
{
// Function to get the max element
// divisible by arr[i]
static int maxElement(int []arr, int n)
{
Dictionary mp = new Dictionary();
int maxx = -1, maxElement = -1;
for (int i = 0; i < n; i++)
{
int num = arr[i];
int cnt = 0;
// Update count for A[i]
if (mp.ContainsKey(num))
{
cnt += mp[num];
}
// Generate Divisor For A[i]
for (int j = 1; j * j <= num; j++)
{
if (num % j == 0)
{
if (mp.ContainsKey(j))
mp[j] = mp[j] + 1;
else
mp.Add(j, 1);
if (j != num / j)
if (mp.ContainsKey(num / j))
mp[num / j] = mp[num / j] + 1;
else
mp.Add(num / j, 1);
}
}
// Update Max Element
if (cnt > maxx)
{
maxElement = i;
maxx = cnt;
}
}
return maxElement;
}
// Driver code
public static void Main(String[] args)
{
int []arr = { 5, 2, 1, 4, 5, 8, 2 };
int n = arr.Length;
Console.Write(maxElement(arr, n));
}
}
// This code is contributed by PrinciRaj1992
Javascript
输出:
6
时间复杂度:O(N√max(Arr))