วิธีค้นหาตัวเลขที่มากเป็นอันดับสามในอาร์เรย์
ที่มา: Dev.to เรามีปัญหาที่ต้องแก้ไข: คุณได้รับอาร์เรย์จำนวนเต็มที่ไม่ได้เรียงลำดับ จะค้นหาตัวเลขที่มากเป็นอันดับสามในอาร์เรย์ได้อย่างไร? หมายเหตุ: อาร์เรย์มีทั้งค่าที่ซ้ำกันและค่าลบ และโค้ดนี้ควรใช้งานได้หากความยาวของอาร์เรย์เพิ่มขึ้น N ครั้ง
ตัวอย่างที่ 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 (ความยาวของอาร์เรย์) หลาย ๆ ครั้งเพื่อค้นหาค่าที่ใหญ่ที่สุดสามค่า
-
หากเงื่อนไขคือการกำหนดค่าที่มากที่สุดให้กับค่าที่มีขนาดใหญ่เป็นอันดับสองและเริ่มต้นค่าขนาดใหญ่ใหม่ในอาร์เรย์
เงื่อนไข elseifแรกคือการกำหนดค่าใหญ่อันดับสองให้กับค่าใหญ่อันดับสาม และเริ่มต้นค่าใหญ่อันดับสองใหม่ในอาร์เรย์
เงื่อนไข เงื่อนไขที่ 2 คือการกำหนดค่าขนาดใหญ่ตัวที่สามในอาร์เรย์
-
ในที่สุดเราก็พิมพ์ตัวแปร
ตัวอย่างที่ 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.toโปรแกรม Java เพื่อย้อนกลับสตริงโดยใช้ StringBuilder
คำอธิบาย: สตริงคืออ็อบเจ็กต์ใน 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และเริ่มต้นมัน
-
สร้างวัตถุของ คลาสตัว สร้างสตริง
-
ใช้ ฟังก์ชัน ผนวก ()และ ฟังก์ชันย้อน กลับ() ใน ตัวสร้าง สตริง
-
พิมพ์ วัตถุ ตัวสร้างสตริง
โปรแกรม Java เพื่อย้อนกลับสตริงโดยไม่ต้องใช้ฟังก์ชันในตัว String Reverse()
วิธีที่ 1
คำอธิบาย: ฟังก์ชัน toCharArray()ใช้ในการแปลงสตริงนี้เป็นอาร์เรย์อักขระ หลังจากนี้ เราจะใช้for loop เพื่ออ่านอักขระแต่ละตัวในลำดับย้อนกลับและรับเอาต์พุตสำหรับอักขระแต่ละตัว รหัส: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
-
ประเภทอุณหภูมิ _
วิธีที่ 2
คำอธิบาย: การใช้for loop เราพิมพ์สตริงในลำดับย้อนกลับ ในทางกลับกัน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 loop ในลำดับย้อนกลับเพื่อให้อักขระแต่ละตัวอยู่ในลำดับย้อนกลับ
-
เชื่อมต่ออักขระแต่ละตัวเข้ากับ ตัวแปร Tempโดยการเรียกใช้ ฟังก์ชัน charAt( )
-
เราพิมพ์Temp
GO TO FULL VERSION