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

nums = [1,2,3,4,5,6,7,8,9,10,11,12]
odds = [ n for n in nums if n%2 ]
print odds

Gives:

>>> 
[1, 3, 5, 7, 9, 11]

This can be put into a function like so:

def getOdds(aList):
    return [ n for n in aList if n%2 ]

Example usage:

myOdds = getOdds(nums)
print("{0} has {1} odd numbers which were {2}".format(nums,len(myOdds),myOdds))
print("The odd numbers sum to {0}".format(sum(myOdds)))

Produces:

>>> 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] has 6 odd numbers which were [1, 3, 5, 7, 9, 11]
The odd numbers sum to 36

As to what you’re doing wrong, you’re iterating over an iterable containing the elements 0 to size this won’t always be the value of num (unless num is indeed range(size)). Once you make i represent a value in num which you’re iterating over, if i%2 == 0 will mean it’s even, if you want odds, the number musn’t be divisible by two. Hence this should be changed to either if i%2 != 0 or if i%2. You will also have to declare the odd list before the for i ... loop, so you can append the numbers in num which meet the condition in the if i%2 selection control structure. You should appened the number in num by doing odd.append(i), at the moment you’re reassigning odd a new value. You also should not be incrementing i. ‘i’ should represent a number in num not the index of the number in num.

Найти в массиве нечётные числа

Уровень сложности:






  • Задание
  • Решение

Дан массив размера n, заполнить его случайными числами, Найти все нечётные числа массива.

Читаем у нас на сайте — Как работать с массивами. После создания массива, его необходимо заполнить случайными числами, а для этого нужно воспользоваться генератором случайных чисел. Пример работы программы смотрим ниже:

// array_even_numbers.cpp: определяет точку входа для консольного приложения.

#include "stdafx.h"
#include <iostream>
#include <ctime>
using namespace std;

int main(int argc, char* argv[])
{
    srand(time(0)); // генерация случайных чисел
    cout << "Enter size array: ";
    int array_size;
    cin >> array_size;
    int *ptrarray = new int [array_size]; // создание динамического массива 
        for (int count = 0; count < array_size; count++)
            ptrarray[count] = (rand() % 99 + 1); //заполнение массива случайными числами с масштабированием от 1 до 99
        cout << "array = ";
        for (int count = 0; count < array_size; count++)
            cout << ptrarray[count] << " "; // печать первоначального массива
        cout << "nRezult = ";
        for (int count = 0; count < array_size; count++)
            if ((ptrarray[count] % 2) != 0) // отсеиваем чётные числа
            cout << ptrarray[count] << " "; // печать нечётных значений элементов массива
        delete [] ptrarray; // высвобождение памяти
        cout << endl;
    system("pause");
    return 0;
}

Создаётся динамический массив, который заполняется случайными числами в диапазоне [1;99] и выполняется поиск нечётных чисел. Вот результат:

CppStudio.com

Enter size array: 20
array = 60 78 78 77 75 94 49 7 8 81 35 94 8 38 29 31 76 42 12 67
Rezult = 77 75 49 7 81 35 29 31 67

Следующие статьи помогут вам в решении данной задачи:

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.

nums = [1,2,3,4,5,6,7,8,9,10,11,12]
odds = [ n for n in nums if n%2 ]
print odds

дает:

>>> 
[1, 3, 5, 7, 9, 11]

Это может быть помещено в функцию следующим образом:

def getOdds(aList):
    return [ n for n in aList if n%2 ]

Пример использования:

myOdds = getOdds(nums)
print("{0} has {1} odd numbers which were {2}".format(nums,len(myOdds),myOdds))
print("The odd numbers sum to {0}".format(sum(myOdds)))

Производит:

>>> 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] has 6 odd numbers which were [1, 3, 5, 7, 9, 11]
The odd numbers sum to 36

Что касается того, что вы делаете неправильно, вы перебираете итерацию, содержащую элементы 0 в size это не всегда будет ценность num (Если не указано num это действительно range(size)). Как только вы сделаете i представлять значение в num который вы повторяете, if i%2 == 0 будет означать, что четное, если вы хотите шансы, число не делится на два. Следовательно, это должно быть изменено на if i%2 != 0 или же if i%2, Вы также должны будете объявить odd список перед for i ... цикл, так что вы можете добавить числа в num которые отвечают условию в if i%2 структура выбора управления. Вы должны добавить номер в num при выполнении odd.append(i), в данный момент вы переназначаете нечетное новое значение. Вы также не должны увеличивать i, “Я” должен представлять число в num не индекс числа в num,

8 ответов

public int oddoccurence(int[] arr, int size);

Во-первых, может быть несколько чисел, которые встречаются нечетное число раз. Невозможно написать эту функцию и заставить ее работать, если она возвращает только один int. Вам понадобится функция, которая может возвращать несколько номеров.

public int[] oddOccurrences(int[] array);

Во-вторых, не пытайтесь быть умными. Использование XOR является “умным”. Вы не найдете простого решения с помощью XOR. Это будет запутанный, сложный беспорядок. Держите это просто:

  • Подсчитайте количество обращений к каждому номеру.
  • Затем найдите все нечетные числа.

Пример псевдокода:

// Map from numbers to counts. Assume the counts start at 0.
Map<Integer, Integer> counts;

for (number in array) {
    counts[number] += 1
}

// List of numbers that occur an odd number of items.
List<Integer> oddNumbers;

for (number, count in counts) {
    if (count % 2 != 0) {
        oddNumbers.add(number);
    }
}

John Kugelman
06 фев. 2014, в 01:00

Поделиться

//Это решение набрало 100% по кодируемости.

import java.util.Arrays;

решение класса {

public int solution(int[] A) {
    // write your code in Java SE 8

    Arrays.sort(A);

    int length = A.length;

    for (int i = 0, j = 1; i < length; i++) {
        if (j < length && A[i] == A[j]) {
            i++;
            j = j + 2;
        } else {
            return A[i];
        }
    }

    return 0;   
}

}

Ramesh J
04 фев. 2019, в 11:22

Поделиться

Я думаю, что использование Map для хранения количества вхождений является правильным методом решения этой проблемы – но если разных чисел слишком много, нужно больше памяти – использование BitMap также может реализовать и потребовать меньше памяти.

public static List<Integer> oddNumbers(int[] array, int size) {
        BitSet bitSet = new BitSet();
        for (int i = 0; i < size; i++) {
            bitSet.flip(array[i]);
        }

        List<Integer> resp = new ArrayList<>();
        for (int i = 0; i < bitSet.length(); i++) {
            if (bitSet.get(i)) {
                resp.add(i);
            }
        }
        return resp;
    }

Контрольный пример:

@Test
public void test_oddNumbers() throws Exception {
    int[] arr = {2, 5, 5, 2, 2, 3, 3, 3, 1, 7, 8, 9, 9, 9};
    List<Integer> resp = oddNumbers(arr, arr.length);
    assertTrue(resp.size() == 6);
    assertTrue(resp.containsAll(Arrays.asList(1, 2, 3, 7, 8, 9)));
}

TongChen
12 янв. 2019, в 02:41

Поделиться

Этот раствор набрал 100% по кодируемости. То, что мы делаем, это просто инициализируем HashMap. Время поиска для HashMap составляет O (1) постоянное время, смотрите здесь для получения дополнительной информации. Поскольку мы перебираем весь массив только один раз, мы получаем время O (N), где N – длина массива.

Если элемент уже существует в HashMap, то мы можем удалить его, так как мы нашли его соответствующую пару. К концу этого мы должны получить HashMap только с одной парой. Просто выведите это число, и все готово.

import java.util.*;
class Solution {
    public int solution(int[] A) {
        int key;
        Map<Integer, Integer> unpaired = new HashMap<Integer, Integer>();
        for (int i = 0; i < A.length; i++){
            key  = A[i];
            Integer value = unpaired.get(key);
            if (value != null){
                unpaired.remove(key); // Remove by key
            }
            else{
                unpaired.put(key,0);
            }
        }
        for (Map.Entry<Integer, Integer> entry : unpaired.entrySet())
        {
            key =  entry.getKey();
        }
        return key;
    }
}

Omar Abid
12 янв. 2019, в 00:22

Поделиться

Вот мое решение с помощью HashMap:

 public int solution(int[] A) {

        HashMap<Integer, Integer> map = new HashMap<>();
        HashSet<Integer> val = new HashSet<>();
        for (int i=0; i<A.length; i++){
        if (map.get(A[i]) == null) {
            map.put(A[i], 1);
        } else map.put(A[i], map.get(A[i])+1);

        if (map.get(A[i])%2 == 1) 
            val.add(A[i]);
            else val.remove(A[i]);
        }

        Iterator<Integer> itr = val.iterator();  
        return itr.next();  

    }

0xalihn
02 авг. 2017, в 10:28

Поделиться

Вам действительно не нужно отслеживать, сколько раз вы видели каждое целое число, только если вы видели его нечетным числом раз. Поэтому начните с того, что ваша структура данных (карта, хеш-таблица, словарь, что-либо) пуста, что правильно отражает состояние, в котором вы не видели числа нечетным числом раз. Теперь для каждого числа x в массиве, если x находится в карте, удалите его (теперь вы видели его четное количество раз), в противном случае добавьте его

gurubelli
09 фев. 2017, в 21:42

Поделиться

Может быть, старый пост.. но вот мой ответ.

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

Что-то вроде этого:

public int solution(int[] A){

    Set<Integer> unpaired = new HashSet<Integer>();
    for (int i = 0; i<A.length; i++){
        if (unpaired.contains(A[i])){
            unpaired.remove(new Integer(A[i]));
        }else{
            unpaired.add(A[i]);
        }
    }


    // all printed out values are odd
    for (Integer res : unpaired){
        System.out.println(res);
    } 
}

gipinani
24 май 2016, в 22:25

Поделиться

это будет хорошим решением для вашей проблемы.

public int oddoccurence(int []a){
    if(a.length==1){
        return a[0];
    }
    Arrays.sort(a);
    for(int i=0;i<a.length-1;){
        if(a[i]==a[i+1]){
            i+=2;
        }else{
            return a[i];
        }
    }
    return a[a.length-1];
}

Ahmed gouda
27 июнь 2016, в 22:29

Поделиться

Ещё вопросы

  • 1Как определить, является ли вертикальная полоса прокрутки Grid Control видимой или скрытой. Дев экспресс
  • 1Использование конкретных номеров для достижения целевого числа
  • 1Могут ли непредсказуемо типизированные аргументы обрабатываться в службе WCF?
  • 1java-связывание со свободной функцией c: как правильно освободить объект
  • 1Как получить скорость вращения вентилятора моего графического или центрального процессора с помощью OpenHardwareMonitor?
  • 1Как я могу найти CDP-код native_request_wait в Android SDK?
  • 0Преобразовать код GIF в изображение GIF или вывести в файл?
  • 0Пароль типа предоставления Symfony2 FOSOAuthServerBundle требует секрет клиента
  • 1c # назначить кнопку пользовательское расположение на FlowLayoutPanel
  • 1SciChart График разрыва
  • 1Android-редактирование smali: младшие биты должны быть нулем
  • 1Читайте целочисленные значения через Reader. (Sql-сервер)
  • 1404 Assets Play Framework
  • 1установка Swing JDialog на немодальный
  • 1Отображение полей месяца в DatePickerDialog в числовом формате вместо алфавитного
  • 0Способы передачи информации из PHP в JQUERY?
  • 0Обработчики событий не запускаются
  • 0Как импортировать несколько CSV-файлов в MySQL
  • 1Лучше ли стилизовать элемент на основе его состояния с помощью атрибута данных или класса?
  • 0Необычное поведение кнопки возврата jquery mobile, phonegap / cordova
  • 1Итерация по файлу с чтением первых N значений
  • 1Конкретный числовой формат Python в Excel
  • 1Рассчитать RA DEC / AZ EL точек Лагранжа, видимых с места на земле
  • 0$ _SESSION не хранит значения
  • 0JQuery проблема с выпадающим меню
  • 0PHP заполнить выпадающий список с помощью jquery
  • 0Считать значения списка радиокнопок
  • 1Импорт телефонных номеров с облачным питоном Google Python
  • 0c ++: инициализировать вектор shared_ptr в конструкторе как разные указатели
  • 0AngularJS щелкает ячейку на столе, которая будет перенаправлять на другую веб-страницу
  • 0как сделать пользовательскую директиву в угловых для расчета расстояния с помощью карт Google
  • 1C # Формат даты {0: t} – {0: t + 1} 00:00 – 01:00
  • 0Ошибка MySQL: 1251 не может добавить внешний ключ
  • 1Как настроить палитру цветов?
  • 0Ошибка счетчика текстовых символов при загрузке страницы
  • 0Конвертировать массив php в гораздо меньший json?
  • 0Могу ли я использовать! = И == в C ++ для сравнения строк без написания собственного?
  • 0Ошибка с вызовом oleacc.dll – ошибка доступа запрещена 80020009
  • 1Обновить формат нескольких ячеек с помощью запроса API updateCells
  • 1Редактирование текстового средства просмотра текста для всех редактируемых текстов в просмотре списка
  • 1Ошибка Play Console 403 после принятия приглашения
  • 0Почему я получаю числа вне диапазона, который я передал?
  • 1Размещение горизонтального рециркулятора в определенной позиции с помощью ConstraintLayout
  • 0Как удалить следующие выделенные элементы из DOM?
  • 1Поместите карту Java в JSON
  • 1Проблемы запуска Spring с JUnit
  • 1Android Studio не может разрешить ресурсы для пользовательских представлений в предварительном просмотре макета
  • 1Динамический поворот в LINQ: поворотные столбцы, определенные во время выполнения
  • 0Элементы AngularJS 2 и SVG <ellipse> не отображаются

Добавить комментарий