JavaRush /จาวาบล็อก /Random-TH /คอฟฟี่เบรค #110. เราแก้ปัญหาวิธีค้นหาตัวเลขที่มากเป็นอันด...

คอฟฟี่เบรค #110. เราแก้ปัญหาวิธีค้นหาตัวเลขที่มากเป็นอันดับสามในอาร์เรย์ ย้อนกลับสตริงใน Java

เผยแพร่ในกลุ่ม

วิธีค้นหาตัวเลขที่มากเป็นอันดับสามในอาร์เรย์

ที่มา: 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);

    }
}
บทสรุป:
ใหญ่ที่สุด = 99 ใหญ่เป็นอันดับสอง = 87 ใหญ่เป็นอันดับสาม = 54
คำอธิบาย:
  1. ตามที่กล่าวไว้ข้างต้น อาร์เรย์จะเริ่มต้นด้วยค่าบวกและค่าลบ

  2. เราเริ่มต้นตัวแปรเพื่อจัดเก็บค่าที่ใหญ่ที่สุด ใหญ่เป็นอันดับสอง และใหญ่เป็นอันดับสามตามลำดับ หมายเหตุ: ตัวแปรจะถูกเตรียมใช้งานเป็น 0 สำหรับกรณีพิเศษหนึ่งกรณี: หากองค์ประกอบสูงสุดตัวที่สามไม่อยู่ในอาร์เรย์ ก็จะส่งคืน 0

  3. เราทำซ้ำลูป N (ความยาวของอาร์เรย์) หลาย ๆ ครั้งเพื่อค้นหาค่าที่ใหญ่ที่สุดสามค่า

  4. หากเงื่อนไขคือการกำหนดค่าที่มากที่สุดให้กับค่าที่มีขนาดใหญ่เป็นอันดับสองและเริ่มต้นค่าขนาดใหญ่ใหม่ในอาร์เรย์

    เงื่อนไข elseifแรกคือการกำหนดค่าใหญ่อันดับสองให้กับค่าใหญ่อันดับสาม และเริ่มต้นค่าใหญ่อันดับสองใหม่ในอาร์เรย์

    เงื่อนไข เงื่อนไขที่ 2 คือการกำหนดค่าขนาดใหญ่ตัวที่สามในอาร์เรย์

  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);
    }
}
บทสรุป:
ใหญ่ที่สุด = 101 ใหญ่เป็นอันดับสอง = 95 ใหญ่เป็นอันดับสาม = 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);
    }

}
บทสรุป:
อาร์เรย์หลังจากการเรียงลำดับ : 5 14 46 54 87 99 ค่าที่ใหญ่ที่สุดอันดับ 3: 54

ย้อนกลับสตริงใน 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);

    }

}
บทสรุป:
เอมมอร์ดนิลาป
ลำดับ:
  1. สร้างวัตถุของ คลาส Stringและเริ่มต้นมัน

  2. สร้างวัตถุของ คลาสตัว สร้างสตริง

  3. ใช้ ฟังก์ชัน ผนวก ()และ ฟังก์ชันย้อน กลับ() ใน ตัวสร้าง สตริง

  4. พิมพ์ วัตถุ ตัวสร้างสตริง

โปรแกรม 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);

    }

}
บทสรุป:
เอมมอร์ดนิลาป
ลำดับ:
  1. สร้างวัตถุของ คลาส Stringและเริ่มต้นมัน

  2. สร้างอาร์เรย์อักขระและเรียกใช้ ฟังก์ชัน toCharArray()ด้วยวัตถุString

  3. สร้าง วัตถุ Stringสำหรับตัวแปรชั่วคราว

  4. ทำซ้ำfor วน ซ้ำเพื่อย้อนกลับเพื่อให้อักขระแต่ละตัวอยู่ในลำดับที่กลับกัน

  5. เชื่อมต่ออักขระ แต่ละตัวเข้ากับ ตัวแปร Temp

  6. ประเภทอุณหภูมิ _

วิธีที่ 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);

    }

}
บทสรุป:
เอมมอร์ดนิลาป
ลำดับ:
  1. การสร้างอ็อบเจ็กต์ของ คลาส Stringและการเริ่มต้น

  2. สร้าง วัตถุ Stringสำหรับตัวแปรชั่วคราว

  3. ทำซ้ำfor loop ในลำดับย้อนกลับเพื่อให้อักขระแต่ละตัวอยู่ในลำดับย้อนกลับ

  4. เชื่อมต่ออักขระแต่ละตัวเข้ากับ ตัวแปร Tempโดยการเรียกใช้ ฟังก์ชัน charAt( )

  5. เราพิมพ์Temp

หมายเหตุพิเศษ: คุณอาจคุ้นเคยกับฟังก์ชันย้อนกลับ แต่เป้าหมายที่นี่คือการสำรวจความสามารถของStringBuilderและวิธีที่คุณสามารถเพิ่มประสิทธิภาพโค้ดของคุณโดยไม่ต้องใช้ฟังก์ชันย้อนกลับ หวังว่านี่จะช่วยใครบางคนได้ในอนาคต!
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION