Как найти в массиве целые числа

0 / 0 / 0

Регистрация: 26.10.2010

Сообщений: 17

1

Найти целые числа в одномерном массиве

07.12.2010, 11:58. Показов 2815. Ответов 1


Студворк — интернет-сервис помощи студентам

Помогите решить: В одномерном массиве целых чисел найти число, больше всего раз встречающееся в нём. И если не сложно с полосой загрузки (чтоб на эране отображалось например 0%######## 100% и результат).Спасибо!
МИР

Добавлено через 1 час 10 минут
Можно без последнего PLZ Help me!



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

07.12.2010, 11:58

Ответы с готовыми решениями:

Определить четные числа в одномерном массиве, и найти их сумму
Определить четные числа в одномерном массиве, и найти их сумму.

В одномерном массиве найти все элементы, меньшие заранее заданного числа
В одномерном массиве найти все элементы, меньшие заранее заданного числа, и
из них сформировать…

В массиве A[100],содержащем целые положительные числа, найти сумму максимального количества чисел,при этом их произведение не должно превышать число 3
В массиве A,содержащем целые положительные числа, найти сумму максимального количества чисел,при…

Переставить числа в одномерном массиве в обратном порядке.
1) Удалить из строки слово с заданным номером.

2) В массивах a:array of integer и b:…

1

sirnet

13 / 13 / 5

Регистрация: 12.02.2010

Сообщений: 53

07.12.2010, 12:22

2

Лучший ответ Сообщение было отмечено Kable как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
program srt;
uses crt;
var i,j,h,k,n : byte;
    s: array [1..20] of integer;
BEGIN
    write('Введите размер массива n<20 : ');readln(n);
    writeln('Заполняем массив : ');
    for i:=1 to n do readln(s[i]);
 
for i:=1 to n do 
        begin if k<h then k:=0; end;
    for j:=0 to n do
        begin 
            if s[j]=s[i] then k+=1;
            h:=k;
        end;
writeln();
writeln(k)
END.



1



есть ли в питоне быстрый способ найти числа в массиве, и вывести их.

filter_arr([1,2,'a','b']) чтобы вернуло [1,2]

любы числа 1,2,3,5,…. кроме отрицательных

Эникейщик's user avatar

Эникейщик

25.1k7 золотых знаков30 серебряных знаков46 бронзовых знаков

задан 12 ноя 2021 в 12:39

spectre_it's user avatar

spectre_itspectre_it

3,2794 золотых знака28 серебряных знаков52 бронзовых знака

6

если массив неотсортированный, то все равно равно придется просмотреть все элементы, так что от O(n) никуда не деться,

если записи отсортированы, то легко провести бинарный поиск и найти границы отрицательных и положительных чисел, положительных чисел и не чисел (например, строк) и сложность будет O(log(n)), после чего выделить нужные вам числа, впрочем если условия сортировки задать так, чтобы натуральные числа были старше всего остального, а отрицательные целы больше, чем все кроме натуральных, тогда надо будет найти только 1 границу, а не 2

ну и остаётся вопрос, считать ли строки с числами — числами
'123', 1e2, 0x12 и т.д.

ответ дан 12 ноя 2021 в 12:50

Zhihar's user avatar

Если речь только о целых положительных (из комментария):

res = [el for el in arr if type(el) == int and el > 0]

ответ дан 12 ноя 2021 в 12:53

Эникейщик's user avatar

ЭникейщикЭникейщик

25.1k7 золотых знаков30 серебряных знаков46 бронзовых знаков

Вот пример:

import numbers
arr = [1,2,'a','b']
print( list(filter(lambda x: isinstance(x , numbers.Number) , arr)) )

ответ дан 12 ноя 2021 в 12:54

Alexandr's user avatar

AlexandrAlexandr

1,7961 золотой знак7 серебряных знаков20 бронзовых знаков

There is a standard algorithm to solve such problems using XOR operator:

Time Complexity = O(n)

Space Complexity = O(1)

Suppose your input array contains only one element that occurs odd no of times and rest occur even number of times,we take advantage of the following fact:

Any expression having even number of 0’s and 1’s in any order will always be = 0 when xor is applied.

That is

0^1^....... = 0 as long as number of 0 is even and number of 1 is even 

and 0 and 1 can occur in any order.

Because all numbers that occur even number of times will have their corresponding bits form even number of 1’s and 0’s and only the number which occurs only once will have its bit left out when we take xor of all elements of array because

0(from no's occuring even times)^1(from no occuring once) = 1 

0(from no's occuring even times)^0(from no occuring once) = 0

as you can see the bit of only the number occuring once is preserved.

This means when given such an array and you take xor of all the elements,the result is the number which occurs only once.

So the algorithm for array of length n is:

 result = array[0]^array[1]^.....array[n-1] 

Different Scenario

As the OP mentioned that input can also be an array which has two numbers occuring only once and rest occur even number of times.

This is solved using the same logic as above but with little difference.

Idea of algorithm:

If you take xor of all the elements then definitely all the bits of elements occuring even number of times will result in 0,which means:

The result will have its bit 1 only at that bit position where the bits of the two numbers occuring only once differ.

We will use the above idea.

Now we focus on the resultant xor bit which is 1(any bit which is 1) and make rest 0.The result is a number which will allow us to differentiate between the two numbers(the required ones).

Because the bit is 1,it means they differ at this position,it means one will have 0 at this position and one will have 1.This means one number when taken AND results in 0 and one does not.

Since it is very easy to set the right most bit,we set it of the result xor as

 A = result & ~(result-1)

Now traverse through the array once and if array[i]&A is 0 store the number in variable number_1 as

 number_1 = number_1^array[i]

otherwise

 number_2 = number_2^array[i]

Because the remaining numbers occur even number of times,their bit will automatically disappear.

So the algorithm is

1.Take xor of all elements,call it xor.

2.Set the rightmost bit of xor and store it in B.

3.Do the following:

number_1=0,number_2=0;
for(i = 0 to n-1)
{
 if(array[i] & B)
  number_1 = number_1^array[i];
 else
  number_2 = number_2^array[i];
}

The number_1 and number_2 are the required numbers.

Учитывая массив n-1 различные целые числа в диапазоне от 1 до n, найти в нем пропущенное число за линейное время.

Например, рассмотрим массив {1, 2, 3, 4, 5, 7, 8, 9, 10} элементы которого различны и находятся в диапазоне от 1 до 10. Недостающее число — 6.

Потренируйтесь в этой проблеме

1. Использование формулы для суммы первых n Натуральные числа

Мы знаем, что сумма первых n натуральные числа можно вычислить по формуле 1 + 2 + … + n = n×(n+1)/2. Мы можем использовать эту формулу, чтобы найти пропущенное число.

Идея состоит в том, чтобы найти сумму целых чисел от 1 до n+1 используя приведенную выше формулу, где n размер массива. Также вычислите фактическую сумму целых чисел в массиве. Теперь недостающее число будет разницей между ними.

Этот подход демонстрируется ниже на C, Java и Python:

C

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

#include <stdio.h>

// Находим пропущенное число в заданном массиве

int getMissingNumber(int arr[], int n)

{

    // фактический размер `n+1`, так как в массиве отсутствует число

    int m = n + 1;

    // получить сумму целых чисел от 1 до `n+1`

    int total = m*(m + 1)/2;

    // получаем реальную сумму целых чисел в массиве

    int sum = 0;

    for (int i = 0; i < n; i++) {

        sum += arr[i];

    }

    // недостающее число — это разница между ожидаемой суммой

    // и фактическая сумма

    return total sum;

}

int main()

{

    int arr[] = { 1, 2, 3, 4, 5, 7, 8, 9, 10 };

    int n = sizeof(arr)/sizeof(arr[0]);

    printf(«The missing number is %d», getMissingNumber(arr, n));

    return 0;

}

Скачать  Выполнить код

результат:

The missing number is 6

Java

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

import java.util.Arrays;

class Main

{

    // Находим пропущенное число в заданном массиве

    public static int getMissingNumber(int[] arr)

    {

        // получаем длину массива

        int n = arr.length;

        // фактический размер `n+1`, так как в массиве отсутствует число

        int m = n + 1;

        // получить сумму целых чисел от 1 до `n+1`

        int total = m * (m + 1) / 2;

        // получаем реальную сумму целых чисел в массиве

        int sum = Arrays.stream(arr).sum();

        // недостающее число — это разница между ожидаемой суммой

        // и фактическая сумма

        return total sum;

    }

    public static void main(String[] args)

    {

        int[] arr = { 1, 2, 3, 4, 5, 7, 8, 9, 10 };

        System.out.println(«The missing number is « + getMissingNumber(arr));

    }

}

Скачать  Выполнить код

результат:

The missing number is 6

Python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

# Найти недостающее число в заданном списке

def getMissingNumber(arr):

    # получить длину массива

    n = len(arr)

    # Фактический размер # равен `n+1`, так как в списке отсутствует номер.

    m = n + 1

    # получить сумму целых чисел от 1 до `n+1`

    total = m * (m + 1) // 2

    # пропущенное число – это разница между ожидаемой суммой и

    # фактическая сумма целых чисел в списке

    return total sum(arr)

if __name__ == ‘__main__’:

    arr = [1, 2, 3, 4, 5, 7, 8, 9, 10]

    print(‘The missing number is’, getMissingNumber(arr))

Скачать  Выполнить код

результат:

The missing number is 6

2. Использование оператора XOR

Мы знаем, что XOR двух одинаковых чисел отменяет друг друга. Мы можем воспользоваться этим фактом, чтобы найти недостающее число в массиве с ограниченным диапазоном.

Идея состоит в том, чтобы вычислить XOR всех элементов массива и вычислить XOR всех элементов от 1 до n+1, куда n размер массива. Теперь недостающее число будет XOR между ними.

Этот подход демонстрируется ниже на C, Java и Python:

C

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

#include <stdio.h>

// Находим пропущенное число в заданном массиве

int getMissingNumber(int arr[], int n)

{

    // Вычислить XOR всех элементов массива

    int xor = 0;

    for (int i = 0; i < n; i++) {

        xor = xor ^ arr[i];

    }

    // Вычислить XOR всех элементов от 1 до `n+1`

    for (int i = 1; i <= n + 1; i++) {

        xor = xor ^ i;

    }

    return xor;

}

int main()

{

    int arr[] = { 1, 2, 3, 4, 5, 7, 8, 9, 10 };

    int n = sizeof(arr) / sizeof(arr[0]);

    printf(«The missing number is %d», getMissingNumber(arr, n));

    return 0;

}

Скачать  Выполнить код

результат:

The missing number is 6

Java

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

class Main

{

    // Находим пропущенное число в заданном массиве

    public static int getMissingNumber(int[] arr)

    {

        // Вычислить XOR всех элементов массива

        int xor = 0;

        for (int i: arr) {

            xor = xor ^ i;

        }

        // Вычислить XOR всех элементов от 1 до `n+1`

        for (int i = 1; i <= arr.length + 1; i++) {

            xor = xor ^ i;

        }

        return xor;

    }

    public static void main(String[] args)

    {

        int[] arr = { 1, 2, 3, 4, 5, 7, 8, 9, 10 };

        System.out.println(«The missing number is « + getMissingNumber(arr));

    }

}

Скачать  Выполнить код

результат:

The missing number is 6

Python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

# Найти недостающее число в заданном списке

def getMissingNumber(arr):

    # Вычислить XOR всех элементов в списке

    xor = 0

    for i in arr:

        xor = xor ^ i

    # Вычислить XOR всех элементов от 1 до `n+1`

    for i in range(1, len(arr) + 2):

        xor = xor ^ i

    return xor

if __name__ == ‘__main__’:

    arr = [1, 2, 3, 4, 5, 7, 8, 9, 10]

    print(‘The missing number is’, getMissingNumber(arr))

Скачать  Выполнить код

результат:

The missing number is 6

Временная сложность обоих рассмотренных выше методов составляет O(n) и не требует дополнительного места, где n это размер ввода.

Поиск числа в массиве на С++

  • В этой теме 0 ответов, 1 участник, последнее обновление 6 лет, 1 месяц назад сделано Васильев Владимир Сергеевич.
  • Сообщения

    • Тема: Массивы.
      Задание:

      Программа проверяет, присутствует ли введенное с клавиатуры число в динамическом массиве, размерность и элементы которого задает пользователь.

      Почитать по теме: «Урок по массивам в С++»

      Блок-схема алгоритма:

      Решение:

      #include "stdafx.h"
      #include <iostream>
      using namespace std;
      
      int main() {
        setlocale(LC_ALL, "Rus");
        int i, n, chislo, x = 0;
        do /*начало проверки условия*/ {
          cout << " Введите количество чисел (n>0) ";
          cin >> n;
        } while (n <= 0); /*конец проверки условия*/
        int * mas = new int[n];
        cout << "Введите эти числа:n";
        for (i = 0; i < n; i++) {
          cin >> mas[i];
        }
        cout << " Введите искомое число ";
        cin >> chislo;
        for (i = 0; i < n; i++) {
          if (mas[i] == chislo)
            x++;
        }
        if (x == 0)
          cout << " Ввведенного числа нет в последовательности n";
        else
          cout << " Ввведенное число присутствует в последовательности n";
        delete[] mas;
        system("pause>>void");
        return 0;
      }

      Линейный поиск можно оформить в виде отдельной функции:

      bool is_member(int* array, int n, int value) {
        for (int i = 0; i < n; ++i) {
          if (array[i] == value)
            return true;
        }
        return false;
      }
  • Автор

    Сообщения

  • Для ответа в этой теме необходимо авторизоваться.

Понравилась статья? Поделить с друзьями:
  • Предохранитель свечей накала как найти
  • Как правильно составить договор для сдачи квартиры в аренду
  • Как найти площадь вершины которого имеют координаты
  • Царапина на шеллаке как исправить
  • Как исправить правила конвертации