Як знайти третє за величиною число в масиві
Джерело: Dev.to Перед нами завдання, яке необхідно вирішити: Вам дано несортований масив цілих чисел. Як знайти у масиві третє за величиною число? Примітка: масив містить як значення, що повторюються, так і негативні значення, а також цей код повинен працювати, якщо довжина масиву збільшується в N разів. Рішення дається в 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);
}
}
Висновок:
-
Як згадувалося вище, масив ініціалізується як позитивними, і негативними значеннями.
-
Ми ініціалізуємо змінні для зберігання найбільшого, другого за величиною та третього за величиною значення відповідно. Примітка: змінні ініціалізуються як 0 для особливого випадку: якщо третій максимальний елемент відсутній у масиві, він поверне 0.
-
Повторюємо цикл N (довжина масиву) число разів, щоб знайти три найбільші значення.
-
Якщо умова полягає в тому, щоб надати найбільше значення другому великому значенню і ініціалізувати нове велике значення в масиві.
1-а умова elseif полягає в тому, щоб привласнити друге велике значення третьому великому значенню та ініціалізувати нове друге велике значення в масиві.
Друга умова elseif - надати третє велике значення в масиві.
-
Зрештою, друкуємо змінні.
Приклад 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);
}
}
Висновок:
Ще один варіант вирішення:
Ми можемо використовувати алгоритм бульбашкового сортування (сортування від найменшого до найбільшого порядку), щоб відсортувати масив та знайти найбільше значення масиву. Введення: [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);
}
}
Висновок:
Реверс рядка в Java
Джерело: Dev.toJava-програма для реверсування рядка з використанням 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);
}
}
Висновок:
-
Створіть об'єкт класу String та ініціалізуйте його.
-
Створіть об'єкт класу string builder .
-
Використовуйте вбудовані функції string builder append() та reverse() .
-
Надрукуйте об'єкт 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);
}
}
Висновок:
-
Створіть об'єкт класу String та ініціалізуйте його.
-
Створіть масив символів та викличте функцію toCharArray() з об'єктом String .
-
Створення об'єкта класу String для тимчасової змінної.
-
Повторіть цикл for у зворотному порядку, щоб отримати кожен символ у зворотному порядку.
-
Об'єднайте кожен символ у змінній Temp .
-
Надрукуйте 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);
}
}
Висновок:
-
Створення об'єкта класу String та його ініціалізація.
-
Створення об'єкта класу String для тимчасової змінної.
-
Повторення циклу for у зворотному порядку, щоб отримати кожен символ у зворотному порядку.
-
Об'єднання кожного символу змінну Temp за допомогою виклику функції charAt() .
-
Друкуємо Temp .
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ