JavaRush /Java блог /Random UA /Кава-брейк #110. Вирішуємо завдання, як знайти третє за в...

Кава-брейк #110. Вирішуємо завдання, як знайти третє за величиною число в масиві. Реверс рядка в Java

Стаття з групи Random UA

Як знайти третє за величиною число в масиві

Джерело: Dev.to Перед нами завдання, яке необхідно вирішити: Вам дано несортований масив цілих чисел. Як знайти у масиві третє за величиною число? Примітка: масив містить як значення, що повторюються, так і негативні значення, а також цей код повинен працювати, якщо довжина масиву збільшується в N разів. Кава-брейк #110.  Вирішуємо завдання, як знайти третє за величиною число в масиві.  Реверс рядка в Java - 1Рішення дається в Java:

Приклад 1: Несортований масив із негативними значеннями

Введення: [87, 99, -14, 05, 46, 54] Код:
public class ThirdLargestNumInArray {

    public static void main(String[] args) {

        /*
         * unsorted Array with duplicate and negative values
         */
        Integer arr[] = { 87, 99, -14, 05, 46, 54 };

        /* Variable initialization */
        int largest = 0, secondLargest = 0, thirdLargest = 0;

        /* Condition to find */
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > largest) {
                /*
                 * if condition is true assign large value to second large value
                 */
                secondLargest = largest;

                /* assign new large value */
                largest = arr[i];

            } else if (arr[i] > secondLargest) {
                /*
                 * if condition is true assign second large value to third large value
                 */
                thirdLargest = secondLargest;

                /* assign new second large value */
                secondLargest = arr[i];

            } else if (arr[i] > thirdLargest) {
                /*
                 * if condition is true the third largest value will be assigned
                 */
                thirdLargest = arr[i];
            }
        }

        /* Print the values */
        System.out.println("Largest = " + largest);
        System.out.println("Second Largest = " + secondLargest);
        System.out.println("Third Largest = " + thirdLargest);

    }
}
Висновок:
Largest = 99 Second Largest = 87 Third Largest = 54
Пояснення:
  1. Як згадувалося вище, масив ініціалізується як позитивними, і негативними значеннями.

  2. Ми ініціалізуємо змінні для зберігання найбільшого, другого за величиною та третього за величиною значення відповідно. Примітка: змінні ініціалізуються як 0 для особливого випадку: якщо третій максимальний елемент відсутній у масиві, він поверне 0.

  3. Повторюємо цикл N (довжина масиву) число разів, щоб знайти три найбільші значення.

  4. Якщо умова полягає в тому, щоб надати найбільше значення другому великому значенню і ініціалізувати нове велике значення в масиві.

    1-а умова elseif полягає в тому, щоб привласнити друге велике значення третьому великому значенню та ініціалізувати нове друге велике значення в масиві.

    Друга умова elseif - надати третє велике значення в масиві.

  5. Зрештою, друкуємо змінні.

Приклад 2: Несортований масив з негативними та повторюваними значеннями

Введення: [77, 101, 95, 14, 05, 46, -47, 94, 00, 95, 52, 86, 36, -54, 94, 89] Код:
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;

public class ThirdLargestNumInSet {

    public static void main(String[] args) {

        /*
         * unsorted Array with duplicate and negative values
         */
        Integer arr[] = { 77, 101, 14, 05, 46, -47, 94, 00, 95, 52, 86, 36, -54, 94, 89 };

        /* Variable initialization */
        int largest = 0, secondLargest = 0, thirdLargest = 0;

        /*
         * using LinkedHashSet - Map to remove duplication in Array
         */
        Set<Integer> newSet = new LinkedHashSet<>();

        for (int i = 0; i < arr.length; i++) {
            newSet.add(arr[i]);
        }

        /* Condition to find */
        for (Integer i : newSet) {
            if (i > largest) {
                /*
                 * if condition is true assign large value to second large value
                 */
                secondLargest = largest;

                /* assign new large value */
                largest = i;

            } else if (i > secondLargest) {
                /*
                 * if condition is true assign second large value to third large value
                 */
                thirdLargest = secondLargest;

                /* assign new second large value */
                secondLargest = i;

            } else if (i > thirdLargest) {
                /*
                 * if condition is true the third largest value will be assigned
                 */
                thirdLargest = i;
            }
        }

        /* Print the values */
        System.out.print("Largest = " + largest);
        System.out.print("\nSecond Largest = " + secondLargest);
        System.out.print("\nThird Largest = " + thirdLargest);
    }
}
Висновок:
Largest = 101 Second Largest = 95 Third Largest = 94
Пояснення: Псевдокод, який використовується в обох кодах, однаковий, єдина різниця в прикладі 2 полягає в тому, що ми використовуємо LinkedHashSet. Він являє собою колекцію Java, в якій ми зберігаємо унікальні об'єкти, що призводить до видалення значень, що повторюються в масиві.

Ще один варіант вирішення:

Ми можемо використовувати алгоритм бульбашкового сортування (сортування від найменшого до найбільшого порядку), щоб відсортувати масив та знайти найбільше значення масиву. Введення: [87, 99, 14, 05, 46, 54] Код:
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;

public class Main {

    public static void bubblesort(Integer[] arr) {

        int n = arr.length;
        int temp;

        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }

            }
        }

    }

    public static void main(String[] args) {

        Integer[] arr = { 87, 99, 14, 05, 46, 54 };

        bubblesort(arr);

        System.out.print("array after sorting : ");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }

        int n = arr.length;

        int max = arr[n - 3];
        System.out.println("\n3rd largest value: " + max);
    }

}
Висновок:
array after sorting : 5 14 46 54 87 99 3rd largest value: 54

Реверс рядка в Java

Джерело: Dev.to

Java-програма для реверсування рядка з використанням StringBuilder

Пояснення: Рядки (Strings) — це об'єкти Java, які внутрішньо підтримуються масивом символів. Рядки незмінні, тому що масиви незмінні (закриті для модифікації). Щоразу, коли ви вносите зміни до рядка, створюється новий рядок. У нашому випадку ми використовуємо StringBuilder , який змінюється. Примітка: ми також можемо використовувати клас StringBuffer . Код:
public class ReverseStringBuilder {

    public static void main(String[] args) {

        /* String is immutable */
        String name = "Palindrome";

        /* Create StringBuilder(mutable) object */
        StringBuilder s1 = new StringBuilder();

        /* Using append() and reverse() in StringBuilder */
        s1.append(name);
        s1 = s1.reverse();

        /* Print the reverse */
        System.out.println(s1);

    }

}
Висновок:
emordnilaP
Послідовність дій:
  1. Створіть об'єкт класу String та ініціалізуйте його.

  2. Створіть об'єкт класу string builder .

  3. Використовуйте вбудовані функції string builder append() та reverse() .

  4. Надрукуйте об'єкт string builder .

Java-програма для реверсування рядка без використання вбудованої функції String reverse()

Метод 1

Пояснення: Функція toCharArray() використовується для перетворення цього рядка на масив символів. Після цього ми будемо використовувати цикл for для проходження кожного символу у зворотному порядку та отримання висновку для кожного символу. Код:
public class Reverse {

    public static void main(String[] args) {

        /* String is immutable */
        String name = "Palindrome";

        /* Using toCharArray() function */
        char[] ch = name.toCharArray();

        /* Temp string */
        String rev = "";

        /* Iterating for loop in reverse to store */
        for (int i = ch.length - 1; i >= 0; i--) {
            /* Concatenating Strings */
            rev += ch[i];
        }

        /* Print the reverse */
        System.out.println(rev);

    }

}
Висновок:
emordnilaP
Послідовність дій:
  1. Створіть об'єкт класу String та ініціалізуйте його.

  2. Створіть масив символів та викличте функцію toCharArray() з об'єктом String .

  3. Створення об'єкта класу String для тимчасової змінної.

  4. Повторіть цикл for у зворотному порядку, щоб отримати кожен символ у зворотному порядку.

  5. Об'єднайте кожен символ у змінній Temp .

  6. Надрукуйте Temp .

Метод 2

Пояснення: Використовуючи цикл for , ми надрукували рядок у зворотному порядку. З іншого боку, метод charAt(index) повертає символ із будь-яким заданим індексом. Символ буде об'єднуватися після кожної ітерації, щоб змінити строкову змінну. Код:
public class ReverseCharAt {

    public static void main(String[] args) {

        /* String is immutable */
        String name = "Palindrome";

        /* Temp string */
        String rev = "";

        /* Iterating for loop in reverse to store */
        for (int i = name.length() - 1; i >= 0; i--) {
            /* Concatenating Strings */
            rev = rev + name.charAt(i);
        }

        /* Print the reverse */
        System.out.println(rev);

    }

}
Висновок:
emordnilaP
Послідовність дій:
  1. Створення об'єкта класу String та його ініціалізація.

  2. Створення об'єкта класу String для тимчасової змінної.

  3. Повторення циклу for у зворотному порядку, щоб отримати кожен символ у зворотному порядку.

  4. Об'єднання кожного символу змінну Temp за допомогою виклику функції charAt() .

  5. Друкуємо Temp .

Спеціальна примітка: напевно, функція реверсу вам знайома, але мета полягає в тому, щоб вивчити можливості StringBuilder і те, як можна оптимізувати код без функції реверсу. Сподіваюся, це допоможе комусь у майбутньому!
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ