JavaRush /Blog Java /Random-VI /Nghỉ giải lao #110. Chúng tôi giải quyết vấn đề làm thế n...

Nghỉ giải lao #110. Chúng tôi giải quyết vấn đề làm thế nào để tìm số lớn thứ ba trong một mảng. Đảo ngược một chuỗi trong Java

Xuất bản trong nhóm

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. Nghỉ giải lao #110.  Chúng tôi giải quyết vấn đề làm thế nào để tìm số lớn thứ ba trong một mảng.  Đảo ngược chuỗi trong Java - 1Giả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:
Lớn nhất = 99 Lớn thứ hai = 87 Lớn thứ ba = 54
Giải trình:
  1. Như đã đề cập ở trên, mảng được khởi tạo với cả giá trị dương và âm.

  2. 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.

  3. 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.

  4. 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.

  5. 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:
Lớn nhất = 101 Lớn thứ hai = 95 Lớn thứ ba = 94
Giải thích: Mã giả được sử dụng trong cả hai mã đều giống nhau, điểm khác biệt duy nhất trong ví dụ 2 là chúng tôi đang sử dụng LinkedHashSet. Nó là một bộ sưu tập Java trong đó chúng tôi lưu trữ các đối tượng duy nhất dẫn đến việc loại bỏ các giá trị trùng lặp trong mảng.

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:
mảng sau khi sắp xếp: 5 14 46 54 87 99 Giá trị lớn thứ 3: 54

Đảo ngược một chuỗi trong Java

Nguồn: Dev.to

Chươ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:
emordnilaP
Trình tự:
  1. Tạo một đối tượng của lớp String và khởi tạo nó.

  2. Tạo một đối tượng của lớp xây dựng chuỗi .

  3. Sử dụng các hàm tạo chuỗi có sẵn (append()Reverse()) .

  4. 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:
emordnilaP
Trình tự:
  1. Tạo một đối tượng của lớp String và khởi tạo nó.

  2. Tạo một mảng ký tự và gọi hàm toCharArray() bằng đối tượng String .

  3. Tạo một đối tượng String cho một biến tạm thời.

  4. 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.

  5. Ghép từng ký tự thành một biến Temp .

  6. 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:
emordnilaP
Trình tự:
  1. Tạo một đối tượng của lớp String và khởi tạo nó.

  2. Tạo một đối tượng String cho một biến tạm thời.

  3. 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.

  4. Ghép từng ký tự thành một biến Temp bằng cách gọi hàm charAt() .

  5. Chúng tôi in Temp .

Lưu ý đặc biệt: Bạn có thể quen với hàm đảo ngược, nhưng mục tiêu ở đây là khám phá các khả năng của StringBuilder và cách bạn có thể tối ưu hóa mã của mình mà không cần hàm đảo ngược. Mong rằng điều này sẽ giúp ai đó trong tương lai!
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION