Как найти третье по величине число в массиве
Источник: 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 состоит в том, чтобы присвоить второе большое значение третьему большому значению и инициализировать новое второе большое значение в массиве.
2-е условие 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.