Добавьте тогда пример, чтобы не был голый текст, например: def index(items, value): for i, x in enumerate(items): if x == value: return i
это после цикла: return -1
. После пример использования: s = [3,4,1,2,5]
print(index(s, 1))
– gil9red
7 июн 2018 в 8:07
Given an array of N elements and an element K, find the index of an array element in Java.
Examples:
Input: a[] = { 5, 4, 6, 1, 3, 2, 7, 8, 9 }, K = 5 Output: 0 Input: a[] = { 5, 4, 6, 1, 3, 2, 7, 8, 9 }, K = 7 Output: 6
An element in an array of N integers can be searched using the below-mentioned methods.
- Linear Search: Doing a linear search in an array, the element can be found in O(N) complexity.
Below is the implementation of the linear-search approach:
Java
import
java.util.*;
public
class
index {
public
static
int
findIndex(
int
arr[],
int
t)
{
if
(arr ==
null
) {
return
-
1
;
}
int
len = arr.length;
int
i =
0
;
while
(i < len) {
if
(arr[i] == t) {
return
i;
}
else
{
i = i +
1
;
}
}
return
-
1
;
}
public
static
void
main(String[] args)
{
int
[] my_array = {
5
,
4
,
6
,
1
,
3
,
2
,
7
,
8
,
9
};
System.out.println(
"Index position of 5 is: "
+ findIndex(my_array,
5
));
System.out.println(
"Index position of 7 is: "
+ findIndex(my_array,
7
));
}
}
Output:
Index position of 5 is: 0 Index position of 7 is: 6
Time Complexity: O(N)
Auxiliary Space: O(1)
2. Binary search: Binary search can also be used to find the index of the array element in an array. But the binary search can only be used if the array is sorted. Java provides us with an inbuilt function which can be found in the Arrays library of Java which will return the index if the element is present, else it returns -1. The complexity will be O(log n).
Below is the implementation of Binary search.
Java
import
java.util.Arrays;
public
class
index {
public
static
int
findIndex(
int
arr[],
int
t)
{
int
index = Arrays.binarySearch(arr, t);
return
(index <
0
) ? -
1
: index;
}
public
static
void
main(String[] args)
{
int
[] my_array = {
1
,
2
,
3
,
4
,
5
,
6
,
7
};
System.out.println(
"Index position of 5 is: "
+ findIndex(my_array,
5
));
System.out.println(
"Index position of 7 is: "
+ findIndex(my_array,
7
));
}
}
Output:
Index position of 5 is: 4 Index position of 7 is: 6
Time Complexity: O(log N)
Auxiliary Space: O(1)
3. Guava: Guava is an open source, Java-based library developed by Google. It provides utility methods for collections, caching, primitives support, concurrency, common annotations, string processing, I/O, and validations. Guava provides several-utility class pertaining to be primitive like Ints for int, Longs for long, Doubles for double etc. Each utility class has an indexOf() method that returns the index of the first appearance of the element in array.
Below is the implementation of Guava.
Java
import
java.util.List;
import
com.google.common.primitives.Ints;
public
class
index {
public
static
int
findIndex(
int
arr[],
int
t)
{
return
Ints.indexOf(arr, t);
}
public
static
void
main(String[] args)
{
int
[] my_array = {
5
,
4
,
6
,
1
,
3
,
2
,
7
,
8
,
9
};
System.out.println(
"Index position of 5 is: "
+ findIndex(my_array,
5
));
System.out.println(
"Index position of 7 is: "
+ findIndex(my_array,
7
));
}
}
Output:
Index position of 5 is: 0 Index position of 7 is: 6
Time Complexity: O(N)
Auxiliary Space: O(1)
4. Stream API: Stream is a new abstract layer introduced in Java 8. Using stream, you can process data in a declarative way similar to SQL statements. The stream represents a sequence of objects from a source, which supports aggregate operations. In order to find the index of an element Stream package provides utility, IntStream. Using the length of an array we can get an IntStream of array indices from 0 to n-1, where n is the length of an array.
Below is the implementation of Stream API approach.
Java
import
java.util.stream.IntStream;
public
class
index {
public
static
int
findIndex(
int
arr[],
int
t)
{
int
len = arr.length;
return
IntStream.range(
0
, len)
.filter(i -> t == arr[i])
.findFirst()
.orElse(-
1
);
}
public
static
void
main(String[] args)
{
int
[] my_array = {
5
,
4
,
6
,
1
,
3
,
2
,
7
,
8
,
9
};
System.out.println(
"Index position of 5 is: "
+ findIndex(my_array,
5
));
System.out.println(
"Index position of 7 is: "
+ findIndex(my_array,
7
));
}
}
Output:
Index position of 5 is: 0 Index position of 7 is: 6
Time Complexity: O(N)
Auxiliary Space: O(1)
5. Using ArrayList
In this approach, we will convert the array into ArrayList, and then we will use the indexOf method of ArrayList to get the index of the element.
Java
import
java.util.ArrayList;
public
class
GFG {
public
static
int
findIndex(
int
arr[],
int
t)
{
ArrayList<Integer> clist =
new
ArrayList<>();
for
(
int
i : arr)
clist.add(i);
return
clist.indexOf(t);
}
public
static
void
main(String[] args)
{
int
[] my_array = {
5
,
4
,
6
,
1
,
3
,
2
,
7
,
8
,
9
};
System.out.println(
"Index position of 5 is: "
+ findIndex(my_array,
5
));
System.out.println(
"Index position of 7 is: "
+ findIndex(my_array,
7
));
}
}
Output:
Index position of 5 is: 0 Index position of 7 is: 6
Time Complexity: O(N)
Auxiliary Space: O(N)
6. Using Recursion
We will use recursion to find the first index of the given element.
Java
public
class
GFG {
public
static
int
index(
int
arr[],
int
t,
int
start)
{
if
(start==arr.length)
return
-
1
;
if
(arr[start]==t)
return
start;
return
index(arr,t,start+
1
);
}
public
static
int
findIndex(
int
arr[],
int
t)
{
return
index(arr,t,
0
);
}
public
static
void
main(String[] args)
{
int
[] my_array = {
5
,
4
,
6
,
1
,
3
,
2
,
7
,
8
,
9
};
System.out.println(
"Index position of 5 is: "
+ findIndex(my_array,
5
));
System.out.println(
"Index position of 7 is: "
+ findIndex(my_array,
7
));
}
}
Output:
Index position of 5 is: 0 Index position of 7 is: 6
Time Complexity: O(N)
Auxiliary Space: O(1)
Last Updated :
20 Feb, 2023
Like Article
Save Article
В этом посте представлен обзор доступных методов поиска индекса первого вхождения элемента в массив в C++.
1. Наивное решение
Простое решение — написать собственную процедуру для поиска индекса первого вхождения элемента. Идея состоит в том, чтобы выполнить линейный поиск в заданном массиве для определения индекса. Этот подход демонстрируется ниже:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include <iostream> using namespace std; int main() { int arr[] = { 6, 3, 5, 2, 8 }; int n = sizeof(arr)/sizeof(arr[0]); int elem = 2; int i = 0; while (i < n) { if (arr[i] == elem) { break; } i++; } if (i < n) { cout << «Element « << elem << » is present at index « << i << » in the given array»; } else { cout << «Element is not present in the given array»; } return 0; } |
Скачать Выполнить код
результат:
Element 2 is present at index 3 in the given array
2. Использование std::find
алгоритм
Мы также можем использовать std::find
алгоритм, который возвращает итератор, указывающий на целевое значение. Он определен в <algorithm>
заголовок. Чтобы получить требуемый индекс, примените арифметику указателя или вызовите std::distance
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#include <iostream> #include <algorithm> using namespace std; int main() { int arr[] = { 6, 3, 5, 2, 8 }; int n = sizeof(arr)/sizeof(arr[0]); int elem = 2; auto itr = find(arr, arr + n, elem); if (itr != end(arr)) { cout << «Element « << elem << » is present at index « << distance(arr, itr) << » in the given array»; } else { cout << «Element is not present in the given array»; } return 0; } |
Скачать Выполнить код
результат:
Element 2 is present at index 3 in the given array
3. Использование std::find_if
алгоритм
Иногда требуется найти в массиве элемент, удовлетворяющий определенным условиям. Например, найдите индекс первого двузначного числа в массиве. Рекомендуемый подход заключается в использовании std::find_if
алгоритм, который принимает предикат для обработки таких случаев.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#include <iostream> #include <algorithm> using namespace std; struct comp { int elem; comp(int const &i): elem(i) {} bool operator()(int const &i) { return (i == elem); } }; int main() { int arr[] = { 6, 3, 5, 2, 8 }; int n = sizeof(arr)/sizeof(arr[0]); int elem = 2; auto itr = find_if(arr, arr + n, comp(elem)); if (itr != end(arr)) { cout << «Element « << elem << » is present at index « << distance(arr, itr) << » in the given array»; } else { cout << «Element is not present in the given array»; } return 0; } |
Скачать Выполнить код
результат:
Element 2 is present at index 3 in the given array
Вот и все, что касается поиска индекса элемента в массиве в C++.
Спасибо за чтение.
Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.
Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования
Чтобы найти индекс искомого элемента в массиве можно в цикле перебрать все элементы и сравнить их с искомым. Если они равны, будет выведен индекс первого подходящего элемента.
// Число, которое будем искать
int num = 3;
// Переменная для хранения индекса,
// найденного числа
int index = -1;
int[] arr = {1, 2, 3, 4, 5};
for (int i = 0; i < arr.length; i++) {
// Если элемент и число равны, то
// сохраняй индекс
if (arr[i] == num) {
index = i;
}
}
System.out.println(index); // => 2
Также можно воспользоваться пакетом org.apache.commons.lang
, методом indexOf()
из класса ArrayUtils
для нахождения индекса элемента.
import org.apache.commons.lang3.ArrayUtils;
public class Example {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
// индекс числа 3
int index = ArrayUtils.indexOf(arr, 3);
System.out.println(index); // => 2
}
}
1 / 1 / 0 Регистрация: 31.12.2019 Сообщений: 33 Записей в блоге: 2 |
|
1 |
|
Как теперь найти индекс числа?13.06.2020, 12:58. Показов 11187. Ответов 7
У меня есть массив h = [1, 6, 3, 4]
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
13.06.2020, 12:58 |
Ответы с готовыми решениями: Как в массиве найти повторяющиеся числа, взять каждого того повторяющегося числа индекс В строке первый символ получает индекс 1, последний индекс 2, второй индекс 3, предпоследний индекс 4, третий индекс 5 Найти индекс числа в многомерном массиве Найти индекс наибольшего числа в массиве 7 |
Viktorrus 1728 / 967 / 199 Регистрация: 22.02.2018 Сообщений: 2,694 Записей в блоге: 6 |
||||||||
13.06.2020, 13:14 |
2 |
|||||||
Сообщение было отмечено Вивид как решение РешениеВивид, С помощью метода index
Добавлено через 2 минуты
1 |
Catstail Модератор 35559 / 19459 / 4071 Регистрация: 12.02.2012 Сообщений: 32,497 Записей в блоге: 13 |
||||
13.06.2020, 14:08 |
3 |
|||
h.index(max(h)) — двукратный проход по массиву. Можно за один проход:
1 |
Garry Galler |
13.06.2020, 14:13
|
Не по теме:
как теперь найти index этого числа? Вы и так и не рискнули открыть документацию? Да, конечно, она скушнее ковыряния в косметичке, однако избавляет вас и форум от бесполезных вопросов, которые повторяются изо дня в день.
0 |
1728 / 967 / 199 Регистрация: 22.02.2018 Сообщений: 2,694 Записей в блоге: 6 |
|
13.06.2020, 14:20 |
5 |
двукратный проход по массиву. Можно за один проход Для меня на первом месте простота кода К тому же я использую встроенные функции, которые написаны на Си, Так что не известно, что быстрее. Но проверять мне лень, так как скорость меня мало волнует, когда она исчисляется миллисекундами
0 |
Модератор 35559 / 19459 / 4071 Регистрация: 12.02.2012 Сообщений: 32,497 Записей в блоге: 13 |
|
13.06.2020, 14:24 |
6 |
Для меня на первом месте простота кода К тому же я использую встроенные функции, которые написаны на Си, Так что не известно, что быстрее. — а для меня — понимание сути. Что же до «встроенных функций», то можно найти список некоего размера N, на котором однократный проход питоновским кодом будет быстрее двукратного — сишным.
0 |
1728 / 967 / 199 Регистрация: 22.02.2018 Сообщений: 2,694 Записей в блоге: 6 |
|
13.06.2020, 14:33 |
7 |
можно найти список некоего размера N Задан конкретный список и я дал решение в соответствии с условием. Решать для всех случаев, включая бесконечные последовательности с прерыванием процесса по времени, у меня нет желания, так как это уже другая задача.
0 |
Catstail Модератор 35559 / 19459 / 4071 Регистрация: 12.02.2012 Сообщений: 32,497 Записей в блоге: 13 |
||||
13.06.2020, 14:37 |
8 |
|||
Задан конкретный список и я дал решение в соответствии с условием. Решать для всех случаев, включая бесконечные последовательности с прерыванием процесса по времени, у меня нет желания, так как это уже другая задача. — задачу нужно всегда решать в максимальной общности. Для конкретной же задачи (в Вашей т.з.) оптимальным решением будет:
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
13.06.2020, 14:37 |
8 |