给定大小为N的数组arr和整数X。任务是找到数组中整数X的所有索引
例子:
Input: arr = {1, 2, 3, 2, 2, 5}, X = 2
Output: 1 3 4
Element 2 is present at indices 1, 3, 4 (0 based indexing)
Input: arr[] = {7, 7, 7}, X = 7
Output: 0 1 2
迭代方法很简单,只需遍历给定的数组,然后继续将元素的索引存储在另一个数组中。
递归方法:
- 如果起始索引达到数组的长度,则返回空数组
- 否则,将数组的第一个元素保留在一起,并将数组的其余部分传递给递归。
- 如果起始索引处的元素不等于x,则只需返回来自递归的答案即可。
- 否则,如果起始索引处的元素等于x,则将数组元素(这是递归的答案)向右移动一步,然后将起始索引放在数组的前面(通过递归获得)
下面是上述方法的实现:
C++
// CPP program to find all indices of a number
#include
using namespace std;
// A recursive function to find all
// indices of a number
int AllIndexesRecursive(int input[], int size,
int x, int output[])
{
// If an empty array comes
// to the function, then
// return zero
if (size == 0) {
return 0;
}
// Getting the recursive answer
int smallAns = AllIndexesRecursive(input + 1,
size - 1, x, output);
// If the element at index 0 is equal
// to x then add 1 to the array values
// and shift them right by 1 step
if (input[0] == x) {
for (int i = smallAns - 1; i >= 0; i--) {
output[i + 1] = output[i] + 1;
}
// Put the start index in front
// of the array
output[0] = 0;
smallAns++;
}
else {
// If the element at index 0 is not equal
// to x then add 1 to the array values
for (int i = smallAns - 1; i >= 0; i--) {
output[i] = output[i] + 1;
}
}
return smallAns;
}
// Function to find all indices of a number
void AllIndexes(int input[], int n, int x)
{
int output[n];
int size = AllIndexesRecursive(input, n,
x, output);
for (int i = 0; i < size; i++) {
cout << output[i] << " ";
}
}
// Driver Code
int main()
{
int arr[] = { 1, 2, 3, 2, 2, 5 }, x = 2;
int n = sizeof(arr) / sizeof(arr[0]);
// Function call
AllIndexes(arr, n, x);
return 0;
}
Java
// Java program to find all
// indices of a number
public class GFG {
public int[] AllIndexesRecursive(int input[],
int x, int start)
{
// If the start index reaches the
// length of the array, then
// return empty array
if (start == input.length) {
int[] ans = new int[0]; // empty array
return ans;
}
// Getting the recursive answer in
// smallIndex array
int[] smallIndex = AllIndexesRecursive(input, x,
start + 1);
// If the element at start index is equal
// to x then
// (which is the answer of recursion) and then
// (which came through recursion)
if (input[start] == x) {
int[] myAns = new int[smallIndex.length + 1];
// Put the start index in front
// of the array
myAns[0] = start;
for (int i = 0; i < smallIndex.length; i++) {
// Shift the elements of the array
// one step to the right
// and putting them in
// myAns array
myAns[i + 1] = smallIndex[i];
}
return myAns;
}
else {
// If the element at start index is not
// equal to x then just simply return the
// answer which came from recursion.
return smallIndex;
}
}
public int[] AllIndexes(int input[], int x)
{
return AllIndexesRecursive(input, x, 0);
}
// Driver Code
public static void main(String args[])
{
GFG g = new GFG();
int arr[] = { 1, 2, 3, 2, 2, 5 }, x = 2;
int output[] = g.AllIndexes(arr, x);
// Printing the output array
for (int i = 0; i < output.length; i++) {
System.out.print(output[i] + " ");
}
}
}
Python3
# Python3 program to find all
# indices of a number
def AllIndexesRecursive(input, x, start):
# If the start index reaches the
# length of the array, then
# return empty array
if (start == len(input)):
ans = [] # empty array
return ans
# Getting the recursive answer in
# smallIndex array
smallIndex = AllIndexesRecursive(input, x,
start + 1)
# If the element at start index is equal
# to x then
# (which is the answer of recursion) and then
# (which came through recursion)
if (input[start] == x):
myAns = [0 for i in range(len(smallIndex) + 1)]
# Put the start index in front
# of the array
myAns[0] = start
for i in range(len(smallIndex)):
# Shift the elements of the array
# one step to the right
# and putting them in
# myAns array
myAns[i + 1] = smallIndex[i]
return myAns
else:
# If the element at start index is not
# equal to x then just simply return the
# answer which came from recursion.
return smallIndex
# Function to find all indices of a number
def AllIndexes(input, x):
return AllIndexesRecursive(input, x, 0)
# Driver Code
arr = [ 1, 2, 3, 2, 2, 5 ]
x = 2
output=AllIndexes(arr, x)
# Printing the output array
for i in output:
print(i, end = " ")
# This code is contributed by Mohit Kumar
C#
// C# program to find all
// indices of a number
using System;
class GFG
{
public int[] AllIndexesRecursive(int []input,
int x, int start)
{
// If the start index reaches the
// length of the array, then
// return empty array
if (start == input.Length)
{
int[] ans = new int[0]; // empty array
return ans;
}
// Getting the recursive answer in
// smallIndex array
int[] smallIndex = AllIndexesRecursive(input, x,
start + 1);
// If the element at start index is equal
// to x then
// (which is the answer of recursion) and
// then (which came through recursion)
if (input[start] == x)
{
int[] myAns = new int[smallIndex.Length + 1];
// Put the start index in front
// of the array
myAns[0] = start;
for (int i = 0; i < smallIndex.Length; i++)
{
// Shift the elements of the array
// one step to the right
// and putting them in
// myAns array
myAns[i + 1] = smallIndex[i];
}
return myAns;
}
else
{
// If the element at start index is not
// equal to x then just simply return the
// answer which came from recursion.
return smallIndex;
}
}
public int[] AllIndexes(int []input, int x)
{
return AllIndexesRecursive(input, x, 0);
}
// Driver Code
public static void Main()
{
GFG g = new GFG();
int []arr = { 1, 2, 3, 2, 2, 5 };
int x = 2;
int []output = g.AllIndexes(arr, x);
// Printing the output array
for (int i = 0; i < output.Length; i++)
{
Console.Write(output[i] + " ");
}
}
}
// This code is contributed by anuj_67..
输出:
1 3 4