Con số lớn thứ hai trong Python Giải pháp HackerRank

Khi chúng ta có nhiều phần tử trong một danh sách, chúng ta có thể nghĩ đến việc tìm số lớn nhất hoặc nhỏ nhất trong danh sách. Danh sách là một tập hợp có thứ tự các phần tử được đặt trong dấu ngoặc vuông '[]' được sử dụng để lưu trữ nhiều phần tử, trong đó các phần tử có thể được truy cập bằng chỉ số của chúng. Bài viết này sẽ thảo luận về một số thuật toán để tìm số lớn thứ hai trong Python

Phạm vi

Trong bài viết này chúng ta sẽ thảo luận

  • Làm thế nào chúng ta có thể tìm thấy số lớn thứ hai trong python?
  • Tìm số lớn thứ hai trong Python bằng cách sắp xếp danh sách rồi in phần tử lớn thứ hai
  • Tìm số lớn thứ hai trong Python bằng cách loại bỏ phần tử lớn nhất
  • Tìm số lớn thứ hai trong Python bằng cách duyệt qua toàn bộ danh sách
  • Tìm số lớn thứ hai trong Python bằng cách sử dụng một đống tối đa
  • Một vài ví dụ điển hình để hiểu rõ hơn

Cách tìm số lớn thứ hai trong Python?

Có nhiều cách tiếp cận để tìm số lớn thứ hai trong Python. Một số cách tiếp cận được đề cập dưới đây

  • Bằng cách sắp xếp danh sách và sau đó in phần tử lớn thứ hai
  • Bằng cách loại bỏ phần tử tối đa
  • Bằng cách duyệt qua toàn bộ danh sách
  • Bằng cách sử dụng một đống tối đa

Bây giờ chúng ta sẽ thảo luận về tất cả các phương pháp từng cái một

Phương pháp 1. Bằng cách sắp xếp danh sách và sau đó in phần tử lớn thứ hai

Phương pháp này là dễ nhất trong tất cả các cách tìm số lớn thứ hai trong danh sách. Sở dĩ như vậy vì chúng ta chỉ cần sắp xếp danh sách rồi in phần tử ở chỉ số cuối cùng thứ hai

cú pháp

Thông số

Chỉ có một tham số i. e. danh sách chính nó

Ví dụ

# Method 1: Sorting the list and then printing the elements of the second last index
# declaring the list
lst = []
for i in range[int[input["Enter the number of elements to enter in the list: "]]]:
    x = int[input["Enter the element: "]]
    lst.append[x]

def method1[lst]:
    lst.sort[]     # sorting the list
    print["The second largest element of the list is: ", lst[-2]]     # printing the element of the second last index

method1[lst] # calling the function

đầu ra

Enter the number of elements to enter in the list: 5
Enter the element: 20
Enter the element: 10
Enter the element: 5
Enter the element: 30
Enter the element: 40
The second largest element of the list is: 30

Giải trình

Đầu tiên, chúng ta sẽ khai báo một danh sách có tên là ‘lst’, sau đó chúng ta sẽ áp dụng vòng lặp for và lấy đầu vào là các phần tử. Tại thời điểm vòng lặp mỗi khi lấy đầu vào, chúng ta sẽ nối đầu vào vào danh sách. Sau đó, chúng tôi sẽ chuyển danh sách cho một chức năng

Trong hàm, chúng ta sẽ sắp xếp mảng, sau đó chúng ta sẽ in phần tử trên chỉ số cuối cùng thứ hai i. e. sử dụng lập chỉ mục tiêu cực

Phương pháp 2. Bằng cách loại bỏ phần tử tối đa

Trong phương pháp này, chúng tôi sẽ lấy phần tử tối đa từ danh sách và xóa nó. Sau đó, chúng tôi sẽ lại lấy phần tử tối đa và in nó

cú pháp

Thông số

Một lần nữa, danh sách là tham số duy nhất được yêu cầu

Ví dụ

# Method 2: Removing the max element
# declaring the list
lst = []
for i in range[int[input["Enter the number of elements to enter in the list: "]]]:
    x = int[input["Enter the element: "]]
    lst.append[x]

def method2[lst]:
    lst.remove[max[lst]]     # removing max element
    print["The second largest element of the list is: ", max[lst]]     # printing the max element

method2[lst] # calling the function

đầu ra

Enter the number of elements to enter in the list: 6
Enter the element: 5
Enter the element: 7
Enter the element: 8
Enter the element: 4
Enter the element: 9
Enter the element: 6
The second largest element of the list is: 8

Giải trình

Bây giờ chúng ta hãy xem lời giải thích của đoạn mã trên

Giống như phương thức 1, chúng ta sẽ khai báo một danh sách, chứa đầy các đầu vào do người dùng lấy và chuyển nó cho một hàm có tên là 'phương thức 2' làm tham số

Trong phương pháp 2, chúng ta sẽ sử dụng hàm max để lấy phần tử max từ danh sách, sau đó chúng ta sẽ lưu nó vào một biến và xóa nó khỏi danh sách bằng cách sử dụng 'list. loại bỏ chức năng

Bây giờ phần tử tối đa đã bị xóa, chúng ta sẽ in phần tử tối đa là phần tử cuối cùng thứ hai trong danh sách

Phương pháp 3. Bằng cách duyệt toàn bộ danh sách

Trong phương pháp này, chúng tôi sẽ duyệt qua toàn bộ danh sách và sẽ duy trì hai biến để tìm phần tử lớn thứ hai trong danh sách

cú pháp

Thông số

Các tham số tương tự như được sử dụng trong các phương pháp trên

Ví dụ


# Method 3: By traversing the entire list
arr = []

for i in range[int[input["Enter the number of elements to add in list: "]]]:
    arr.append[int[input["Enter the element: "]]] # adding elements in the list

def Method3[arr]:  
    SL_Val = arr[0]  # Storing the first element of the list
    L_Val = arr[0]  # Again storing the first element of the list
    for i in range[len[arr]]:  
        if arr[i] > L_Val:  # Using for loop to get the largest element from the list
            L_Val = arr[i]  # Updting the variable  with greater element  
  
    for i in range[len[arr]]:  
        if arr[i] > SL_Val and arr[i] != L_Val:
            SL_Val = arr[i] # Now again using for loop to get the second largest element by comparing the SL_Val with L_Val
  
    return SL_Val
    
x = Method3[arr]
print["The second largest element in the list is", x]

đầu ra

Enter the number of elements to add in list: 4
Enter the element: 87
Enter the element: 74
Enter the element: 98
Enter the element: 77
The second largest element in the list is 87

Giải trình

Chúng ta hãy xem lời giải thích cho phương pháp thứ 3

Khai báo một danh sách và điền vào nó các phần tử bằng vòng lặp for. Khai báo một biến có tên 'L_Val' để lưu trữ phần tử lớn nhất và khởi tạo nó với một phần tử trên chỉ mục đầu tiên. Khai báo một biến khác có tên SL_Val để lưu trữ phần tử lớn thứ hai và lặp lại quy trình

Duyệt qua từng phần tử và so sánh nó và tìm phần tử lớn nhất và cập nhật nó thành biến 'L_Val'. Lặp lại điều này và lần này so sánh biến 'SL_Val' với 'L_Val' và tìm biến lớn thứ hai

Cuối cùng in biến 'SL_Val'

Phương pháp 4. Bằng cách sử dụng một đống tối đa

Trong phương pháp này, chúng tôi sẽ tạo một đống tối đa từ các phần tử của danh sách và sẽ bật gốc chính xác một lần. Sau đó, chúng tôi sẽ in gốc mới là phần tử lớn thứ hai trong danh sách

cú pháp

Thông số

Danh sách chỉ là tham số bắt buộc trong hàm

Ví dụ

# Method 4: By using max heap

import heapq
 
 
# Implementation of max-heap
class MaxHeap:
 
    def __init__[self, data=None]:
        if data is None:
            self.data = []
        else:
            self.data = [-i for i in data]
            heapq.heapify[self.data]
 
    def top[self]:
        return -self.data[0]
 
    def push[self, item]:
        heapq.heappush[self.data, -item]
 
    def pop[self]:
        return -heapq.heappop[self.data]
 
    def replace[self, item]:
        return heapq.heapreplace[self.data, -item]
 
 
# Function to find the 2'nd largest element in a list using max-heap
def find_2nd_largest[lst]:
 
    # base case
    if not lst or len[lst] < 2:
        exit[-1]
 
    # build a max-heap from all elements in the list
    pq = MaxHeap[lst]
 
    # pop from max-heap exactly `1` time
    pq.pop[]
 
    # return the root of max-heap
    return pq.top[]
 
 
if __name__ == '__main__':
 
    lst = []
    for i in range[int[input["Enter the number of elements to enter in the list: "]]]:
        x = int[input["Enter the element: "]]
        lst.append[x]

    x = find_2nd_largest[lst]
    print['Second largest element in the list is', x]

đầu ra

Second largest element in the list is 23

Giải trình

Trong đoạn mã trên, trước tiên chúng ta cần nhập 'heapq', sau đó chúng ta sẽ triển khai maxheap và xây dựng nó từ các phần tử của danh sách

Sau đó, chúng tôi sẽ bật gốc '1' lần và lưu trữ giá trị cao nhất của maxheap trong một biến và trả về nó

Cuối cùng, chúng ta sẽ gọi hàm 'Phương thức 4' và lưu trữ giá trị trả về của nó trong một biến và in nó

Chủ Đề