Как найти максимальное возможное число

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

Например,

Input:  { 10, 68, 75, 7, 21, 12 }

 
Output: 77568211210

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

Простая сортировка массива в порядке убывания и рассмотрение порядка сортировки здесь невозможны, поскольку отсортированный массив {75, 68, 21, 12, 10, 7} приведет к числу 75682112107, что меньше максимально возможного числа 77568211210.

 
Идея состоит в том, чтобы написать наш пользовательская функция сравнения для сортировки рутина. Для двух чисел, X а также Y, пользовательская функция компаратора не будет сравнивать X а также Y друг с другом, но сравнивается XY с YX, и большее число будет стоять первым в порядке сортировки. Здесь, XY обозначает число, образованное добавлением Y к X, а также YX обозначает число, образованное добавлением X к Y. Например, для X = 15 а также Y = 4, XY = 154 а также YX = 415.

Как видно из приведенного выше примера, X > Y но XY < YX, поэтому функция сравнения будет учитывать Y > X. Это показано ниже на C, C++ и Java:

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

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

/*

    Примечание. Элемент `a` имеет тип `char*`, а `const void*` в

    сравните точку с `*char`, поэтому передается `char**`.

    Следовательно, правильное приведение — `*(const char**)a`.

*/

int compare(const void *a, const void *b)

{

    const char **X = (const char **)a;

    const char **Y = (const char **)b;

    int len = strlen(*X) + strlen(*Y) + 1;

    // создаем новую строку `X + Y`

    char XY[len];

    strcpy(XY, *X);

    strcat(XY, *Y);

    // создаем новую строку `Y + X`

    char YX[len];

    strcpy(YX, *Y);

    strcat(YX, *X);

    // наибольший из `YX` и `XY` должен идти первым в отсортированном массиве

    return strcmp(YX, XY);

}

int main(void)

{

    char *arr[] = { «10», «68», «97», «9», «21», «12» };

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

    // пользовательская сортировка

    qsort(arr, n, sizeof(arr[0]), compare);

    // вывести отсортированную последовательность

    printf(«The largest number is «);

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

        printf(«%s», arr[i]);

    }

    return 0;

}

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

результат:

The largest number is 99768211210

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

32

33

34

35

#include <iostream>

#include <string>

#include <vector>

#include <algorithm>

using namespace std;

// сортировка с использованием объекта пользовательской функции

struct {

    bool operator()(int a, int b) const

    {

        string value1 = to_string(a) + to_string(b);

        string value2 = to_string(b) + to_string(a);

        return value1 > value2;

    }

} customCompare;

string findLargestNumber(vector<int> &nums)

{

    sort(nums.begin(), nums.end(), customCompare);

    string s;

    for (int &i: nums) {

        s += to_string(i);

    }

    return s;

}

int main()

{

    vector<int> numbers = { 10, 68, 97, 9, 21, 12 };

    cout << «The largest number is « << findLargestNumber(numbers) << endl;

    return 0;

}

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

результат:

The largest number is 99768211210

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

import java.util.Arrays;

import java.util.Collections;

import java.util.List;

import java.util.stream.Collectors;

public class Main

{

    public static String findLargestNumber(List<Integer> nums)

    {

        // сортировка с использованием объекта пользовательской функции

        Collections.sort(nums, (a, b) -> (String.valueOf(b) + a).compareTo(String.valueOf(a) + b));

        return nums.stream()

                .map(Object::toString)

                .collect(Collectors.joining(«»));

    }

    public static void main(String[] args)

    {

        List<Integer> numbers = Arrays.asList(10, 68, 97, 9, 21, 12);

        String largestNumber = findLargestNumber(numbers);

        System.out.println(«The largest number is « + largestNumber);

    }

}

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

результат:

The largest number is 99768211210

Python

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

from functools import cmp_to_ключ

@cmp_to_key

def custom_compare(a, b):

    value1 = str(a) + str(b)

    value2 = str(b) + str(a)

    if value1 < value2:

        return 1

    elif value1 > value2:

        return 1

    else:

        return 0

def findLargestNumber(numbers):

    # sort using a custom function object

    numbers.sort(key=custom_compare)

    # join and return

    return ».join(map(str, numbers))

if __name__ == ‘__main__’:

    numbers = [10, 68, 97, 9, 21, 12]

    largestNumber = findLargestNumber(numbers)

    print(‘The largest number is’, largestNumber)

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

результат:

The largest number is 99768211210

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

Given a list of numbers, the task is to find the largest number possible from the elements given in the list. This is one of the problems that is essential in competitive point of view and this article discusses various shorthands to solve this problem in Python. Let’s discuss certain ways in which this problem can be solved. 

Method #1 : Using sorted() + lambda The combination of the above function can be used to perform this task. The sorted function performs the reverse sort of list indices converted into string and lambda functions handles the conversion and iteration operation. 

Python

from functools import cmp_to_key

test_list = [23, 65, 98, 3, 4]

print ("The original list is : " + str(test_list))

res = sorted(test_list, key = cmp_to_key(lambda i, j: -1

                if str(j) + str(i) < str(i) + str(j) else 1))

print ("The largest possible number : " + ''.join(map(str,res)))

Output:

The original list is : [23, 65, 98, 3, 4]
The largest possible number : 98654323

Time Complexity: O(nlogn)
Auxiliary Space: O(1)

  Method #2 : Using itertools.permutation() + join() + max() The itertools.permutation can be used to get possible permutation and max function chooses the maximum of it after being converted to integer as a result of joined output as given by join function. 

Python3

from itertools import permutations

test_list = [23, 65, 98, 3, 4]

print ("The original list is : " + str(test_list))

res = int(max((''.join(i) for i in permutations(str(i)

                     for i in test_list)), key = int))

print ("The largest possible number : " +  str(res))

Output:

The original list is : [23, 65, 98, 3, 4]
The largest possible number : 98654323

Method #3 : Using functools and a custom comparison function

This approach works by defining a custom comparison function that compares two numbers by concatenating them in both orders and returning the result of the comparison of the resulting integers. The sorted function is then used to sort the list using this comparison function, which results in the largest number possible being at the beginning of the list. Finally, the list is converted to a string and printed.

The cmp_to_key function is a utility function from the functools module that converts a comparison function to a key function, which can be used as the key argument in functions like sorted that expect a key function.

Python3

from functools import cmp_to_key

test_list = [23, 65, 98, 3, 4]

print ("The original list is : " + str(test_list))

def compare(a, b):

    ab = int(str(a) + str(b))

    ba = int(str(b) + str(a))

    if ab > ba:

        return -1

    elif ab < ba:

        return 1

    else:

        return 0

res = sorted(test_list, key=cmp_to_key(compare))

print ("The largest possible number : " + ''.join(map(str,res)))

Output

The original list is : [23, 65, 98, 3, 4]
The largest possible number : 98654323

The time complexity of the approach using the sorted function and a custom comparison function is O(n log n), where n is the length of the list. This is because the sorted function uses a sorting algorithm that has a time complexity of O(n log n) in the average and worst case.

The space complexity is O(n), since the sorted function creates a new list as a result of the sorting operation, which has the same size as the original list.

 Method #4 : Using sorted

in this, we define a custom function called compare_numbers that takes two numbers a and b as input and compares them based on their concatenated value. The function converts the numbers to strings, concatenates them in both possible orders, converts the result back to integers, and returns their difference. We then use this function as the key for the sorted function to sort the list of numbers in descending order of their concatenated value. Finally, we concatenate the sorted numbers to form the largest possible number and print it to the console.

Python3

original_list = [23, 65, 98, 3, 4]

def key_func(num):

    return str(num)*3 

sorted_list = sorted(original_list, key=key_func, reverse=True)

largest_number = "".join([str(num) for num in sorted_list])

print("The largest possible number:", largest_number)

Output

The largest possible number: 98654323

The complexity analysis of the code is as follows:

Defining the custom key function:
This function takes a constant amount of time, regardless of the size of the input list. Hence, its time complexity is O(1).

Sorting the original list:
Sorting takes O(nlogn) time in the worst case, where n is the size of the original list. Since we are sorting based on a custom key function, each comparison operation between the elements of the list takes O(k) time, where k is the length of the string representation of the largest number in the list. Therefore, the overall time complexity of the sorting operation in this code is O(nklogn).

Concatenating the sorted list:
Concatenating the elements of a list takes O(n) time, where n is the size of the list. In this case, we are iterating over the sorted list once, so the time complexity of concatenating the sorted list is O(n).

Therefore, the overall time complexity of the code is O(nklogn), where n is the size of the original list and k is the length of the string representation of the largest number in the list.

Method #5: using the reduce() method and lambda function:

Algorithm:

1.Initialize the list of integers.
2.Define a lambda function to compare the digits at the first index of two integers.
3.Sort the list using the lambda function as the key in the descending order.
4.Convert the sorted list of integers to a string.
5.Convert the resulting string to an integer.

Python3

from functools import reduce

test_list = [23, 65, 98, 3, 4]

res = int(reduce(lambda x, y: x + y, map(str, sorted(test_list, key=lambda x: int(str(x)[0]), reverse=True))))

print("The original list is : " + str(test_list))

print("The largest possible number is:", res)

Output

The original list is : [23, 65, 98, 3, 4]
The largest possible number is: 98654323

Time Complexity:  O(nlogn), where n is the length of the input list. The sorting operation has a time complexity of O(nlogn).

Space Complexity:  O(n), where n is the length of the input list. The space is used to store the sorted list of integers.

Last Updated :
15 Mar, 2023

Like Article

Save Article

Получи максимально возможное число. 41 уровень Брайан Тест – это захватывающая игра с хитрыми задачками. В игре тебя ждет много невероятных задач. Проведи время в игре и протестируй свой ум. Ты можешь играть со своими друзьями. Проходи уровни и узнай на что ты способен! Если ты любишь словесные игры, головоломки, судоку и различные задачки, то тебе наверняка понравится игра Брейн Тест! Получи максимально возможное число. 41 уровень Brain Test

Максимальное число из 3 цифр — это 999

40 УРОВЕНЬ

ВСЕ УРОВНИ

42 УРОВЕНЬ

  • Все калькуляторы
  • /

  • Учеба и наука
  • /

  • Математика
  • /   Найти максимальное и минимальное число

    Найти максимальное и минимальное число

    Онлайн калькулятор поможет найти максимально большое число и минимальное число в строке, массиве. Находит минимальное и максимальное значение целых, дробных, натуральных чисел.

    Минимальное и максимальное число

    Разделитель

    Разделитель групп разрядов

    Округлить до

    Число прописью

    Скачать калькулятор

    Рейтинг: 3.8 (Голосов 9)

    ×

    Пожалуйста напишите с чем связна такая низкая оценка:

    ×

    Для установки калькулятора на iPhone — просто добавьте страницу
    «На главный экран»

    Для установки калькулятора на Android — просто добавьте страницу
    «На главный экран»

    Сообщить об ошибке

    Смотрите также

    Среднее арифметическое взвешенное Среднее геометрическое Среднее гармоническое Среднее квадратичное
    Выборочная дисперсия Среднее арифметическое Медиана чисел Расчет выборки

    На чтение 6 мин Просмотров 2.8к. Опубликовано

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

    Содержание

    1. Методы для нахождения максимального числа в списке
    2. Использование цикла for и условного оператора
    3. Использование встроенной функции max()
    4. Использование метода sort()
    5. Использование функции sorted()
    6. Обработка исключений при поиске максимального числа
    7. Заключение

    Методы для нахождения максимального числа в списке

    В Python есть несколько способов найти максимальное число в списке. Мы рассмотрим наиболее распространенные методы:

    1. Использование цикла for для перебора элементов списка.
    2. Использование встроенной функции max()
    3. Использование метода sort()
    4. Использование функции sorted()

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

    Вам может быть интересно: Как найти максимальное число в списке Python

    Использование цикла for и условного оператора

    Использование цикла for и условного оператора — один из наиболее простых и понятных способов нахождения максимального числа в списке Python.

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

    Вот пример кода, который иллюстрирует этот метод:

    # Исходный список чисел
    numbers = [12, 45, 67, 23, 56, 8, 91]
    
    # Инициализация переменной max_number
    max_number = numbers[0]
    
    # Цикл for для прохода по всем элементам списка
    for number in numbers:
        if number > max_number:
            max_number = number
    
    # Вывод максимального числа
    print("Максимальное число в списке:", max_number)

    В этом примере мы проходим циклом for по всем элементам списка numbers и сравниваем каждый элемент с переменной max_number, которая изначально инициализирована первым элементом списка. Если текущий элемент больше, чем значение max_number, мы обновляем значение max_number на текущий элемент. В конце цикла мы выводим максимальное число.

    Этот метод может быть использован для любого типа элементов списка, который можно сравнивать оператором «>». Он также может быть легко изменен для нахождения минимального числа в списке, заменив оператор «>» на «<«.

    Хотя этот метод является простым, он может быть неэффективным для очень больших списков. Для более эффективного решения этой задачи можно использовать встроенную функцию max(), которая работает быстрее для больших списков.

    Использование встроенной функции max()

    Python предоставляет встроенную функцию max(), которая принимает любое количество аргументов и возвращает наибольшее значение. Для того чтобы найти максимальное значение в списке, можно передать в функцию список целиком.

    Пример использования функции max() для нахождения максимального числа в списке:

    my_list = [1, 3, 5, 2, 4]
    max_number = max(my_list)
    print(max_number)  # выводит 5

    Здесь мы создаем список my_list, содержащий пять чисел. Затем мы вызываем функцию max() и передаем ей весь список, который возвращает максимальное число. Наконец, мы выводим результат на экран.

    Преимуществом использования функции max() является ее простота и читаемость. Вместо написания цикла или сложных условий, мы можем использовать одну функцию, которая выполняет всю необходимую работу за нас.

    Использование метода sort()

    Метод sort() является методом списка, который может быть использован для сортировки элементов списка в порядке возрастания или убывания. Однако, после сортировки можно легко найти максимальный или минимальный элемент в списке.

    Для того, чтобы найти максимальный элемент в списке, можно отсортировать его в порядке убывания, используя метод sort() с параметром reverse=True. Затем, первый элемент списка будет максимальным.

    Вот пример использования метода sort() для нахождения максимального числа в списке:

    numbers = [4, 7, 2, 9, 1, 5]
    numbers.sort(reverse=True)
    max_number = numbers[0]
    print(max_number)

    Этот код сначала сортирует список numbers в порядке убывания, используя метод sort() с параметром reverse=True. Затем максимальное число в списке будет первым элементом списка после сортировки, который затем присваивается переменной max_number. В выводе мы получаем максимальное число, которое равно 9.

    Однако, важно помнить, что метод sort() изменяет исходный список, поэтому, если необходимо сохранить порядок элементов в списке, лучше использовать другой метод для нахождения максимального числа.

    Использование функции sorted()

    Иногда нужно не только найти максимальный элемент списка, но и получить список, отсортированный по возрастанию или убыванию. В этом случае удобно использовать функцию sorted().

    Функция sorted() возвращает отсортированный список из переданного ей списка. В отличие от метода sort(), функция sorted() не изменяет исходный список, а возвращает новый отсортированный список.

    Пример использования функции sorted() для нахождения максимального числа в списке и получения списка, отсортированного по убыванию:

    numbers = [5, 10, 2, 8, 7]
    max_number = sorted(numbers, reverse=True)[0]
    sorted_numbers_descending = sorted(numbers, reverse=True)
    
    print(max_number)  # 10
    print(sorted_numbers_descending)  # [10, 8, 7, 5, 2]

    В этом примере мы передали список numbers в функцию sorted() и использовали параметр reverse=True для получения списка, отсортированного по убыванию. Затем мы получили максимальный элемент этого списка, обращаясь к его первому элементу [0].

    Обработка исключений при поиске максимального числа

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

    В Python исключения обрабатываются с помощью конструкции try-except. В блоке try мы выполняем код, который может привести к ошибке, а в блоке except мы определяем, как обрабатывать возможное исключение.

    Например, если мы используем функцию max() для пустого списка, Python выдаст исключение типа ValueError. Чтобы избежать такой ошибки, мы можем обернуть вызов функции max() в блок try-except и обработать исключение:

    my_list = []
    try:
        max_value = max(my_list)
        print("Максимальное значение в списке:", max_value)
    except ValueError:
        print("Список пуст.")

    В этом примере мы создаем пустой список my_list, затем вызываем функцию max() для нахождения максимального значения. Если список пуст, Python выдаст исключение ValueError, которое мы обрабатываем в блоке except и выводим соответствующее сообщение.

    При обработке исключений важно учитывать конкретный тип исключения, который может быть выброшен, чтобы обработать его правильно. Если мы не укажем конкретный тип исключения в блоке except, то будут обрабатываться все исключения, что может привести к непредсказуемому поведению программы.

    my_list = []
    try:
        max_value = max(my_list)
        print("Максимальное значение в списке:", max_value)
    except Exception as e:
        print("Произошла ошибка:", e)

    В этом примере мы используем общий тип исключения Exception, чтобы обработать любые возможные исключения. Однако такой подход не рекомендуется, так как мы не можем точно определить, какое исключение произошло, и как его обработать. Лучше всего использовать конкретные типы исключений, чтобы программа была более надежной и стабильной.

    Заключение

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

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

    Понравилась статья? Поделить с друзьями:
  • Watch dogs 0xc000007b как исправить
  • Как исправить вязание резинки
  • Как найти приложение на телефоне майкрософт
  • Как найти жизненный путь тест
  • Как составить народный календарь