Cách tìm số lớn thứ ba trong một mảng
Nguồn: Dev.to Chúng tôi có một vấn đề cần giải quyết: Bạn được cung cấp một mảng số nguyên chưa được sắp xếp. Làm thế nào để tìm số lớn thứ ba trong một mảng? Lưu ý: Mảng chứa cả giá trị trùng lặp và giá trị âm, đồng thời mã này sẽ hoạt động nếu độ dài của mảng tăng N lần. Giải pháp được đưa ra trong Java:Ví dụ 1: Mảng chưa được sắp xếp có giá trị âm
Đầu vào: [87, 99, -14, 05, 46, 54] Mã: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);
}
}
Phần kết luận:
-
Như đã đề cập ở trên, mảng được khởi tạo với cả giá trị dương và âm.
-
Chúng ta khởi tạo các biến để lưu trữ giá trị lớn nhất, lớn thứ hai và lớn thứ ba tương ứng. Lưu ý: Các biến được khởi tạo bằng 0 trong một trường hợp đặc biệt: nếu phần tử lớn thứ ba không có trong mảng thì nó sẽ trả về 0.
-
Chúng ta lặp lại vòng lặp N (độ dài của mảng) một số lần để tìm ra ba giá trị lớn nhất.
-
Nếu điều kiện là gán giá trị lớn nhất cho giá trị lớn thứ hai và khởi tạo giá trị lớn mới trong mảng.
Điều kiện elseif thứ nhất là gán giá trị lớn thứ hai cho giá trị lớn thứ ba và khởi tạo giá trị lớn thứ hai mới trong mảng.
Điều kiện elseif thứ 2 là gán giá trị lớn thứ ba trong mảng.
-
Cuối cùng, chúng tôi in các biến.
Ví dụ 2: Mảng chưa được sắp xếp có giá trị âm và trùng lặp
Đầu vào: [77, 101, 95, 14, 05, 46, -47, 94, 00, 95, 52, 86, 36, -54, 94, 89] Mã: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);
}
}
Phần kết luận:
Giải pháp khác:
Chúng ta có thể sử dụng thuật toán Bubble Sort (sắp xếp từ thấp đến cao) để sắp xếp mảng và tìm giá trị lớn nhất của mảng. Đầu vào: [87, 99, 14, 05, 46, 54] Mã: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);
}
}
Phần kết luận:
Đảo ngược một chuỗi trong Java
Nguồn: Dev.toChương trình Java để đảo ngược một chuỗi bằng StringBuilder
Giải thích: Chuỗi là các đối tượng trong Java được hỗ trợ nội bộ bởi một mảng ký tự. Chuỗi là bất biến vì mảng là bất biến (đóng để sửa đổi). Mỗi khi bạn thực hiện thay đổi đối với một hàng, một hàng mới sẽ được tạo. Trong trường hợp của chúng tôi, chúng tôi đang sử dụng StringBuilder có thể thay đổi. Lưu ý: Chúng ta cũng có thể sử dụng lớp StringBuffer . Mã số: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);
}
}
Phần kết luận:
-
Tạo một đối tượng của lớp String và khởi tạo nó.
-
Tạo một đối tượng của lớp xây dựng chuỗi .
-
Sử dụng các hàm tạo chuỗi có sẵn (append() và Reverse()) .
-
In đối tượng xây dựng chuỗi .
Chương trình Java để đảo ngược một chuỗi mà không sử dụng hàm có sẵn String Reverse()
Phương pháp 1
Giải thích: Hàm toCharArray() được sử dụng để chuyển đổi chuỗi này thành mảng ký tự. Sau đó, chúng ta sẽ sử dụng vòng lặp for để duyệt từng ký tự theo thứ tự ngược lại và lấy kết quả đầu ra cho từng ký tự. Mã số: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);
}
}
Phần kết luận:
-
Tạo một đối tượng của lớp String và khởi tạo nó.
-
Tạo một mảng ký tự và gọi hàm toCharArray() bằng đối tượng String .
-
Tạo một đối tượng String cho một biến tạm thời.
-
Lặp lại vòng lặp for ngược lại để lấy từng ký tự theo thứ tự ngược lại.
-
Ghép từng ký tự thành một biến Temp .
-
Nhập Nhiệt độ .
Phương pháp 2
Giải thích: Bằng cách sử dụng vòng lặp for , chúng ta đã in một chuỗi theo thứ tự ngược lại. Mặt khác, phương thức charAt(index) trả về ký tự tại bất kỳ chỉ mục nào. Ký tự này sẽ được nối sau mỗi lần lặp để thay đổi biến chuỗi. Mã số: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);
}
}
Phần kết luận:
-
Tạo một đối tượng của lớp String và khởi tạo nó.
-
Tạo một đối tượng String cho một biến tạm thời.
-
Lặp lại vòng lặp for theo thứ tự ngược lại để lấy từng ký tự theo thứ tự ngược lại.
-
Ghép từng ký tự thành một biến Temp bằng cách gọi hàm charAt() .
-
Chúng tôi in Temp .
GO TO FULL VERSION