Cải tiến Thuật Pháp Đơn Dạng Với Bài Tập Nhiệt Độ Hàng Ngày

Trong hành trình tu luyện của Nhĩ Thọa tại thế giới thuật toán, anh ta đã đến một mảng thần bí gọi là Mảng Thúc Diệt, nơi có những biến động nhiệt độ biểu thị cho bí mật của ngăn xếp đơn điệu. Tại cổng vào mảng, có một bức đá lớn khắc chữ: "Để phong tỏa mảng này, hãy dùng sức mạnh Thúc Diệt, áp dụng ngăn xếp đơn điệu, nhiệt độ hàng ngày sẽ lộ ra chân dung thật sự."

Nhĩ Thọa nhìn kỹ, thấy dòng chữ nhỏ bên dưới: "Khi mảng nhiệt độ là [73, 74, 75, 71, 69, 72, 76], hãy xuất chỉ số của nhiệt độ cao hơn tiếp theo của mỗi nhiệt độ." Nhĩ Thọa nhận ra đây là một bài tập khó về ứng dụng ngăn xếp đơn điệu, cần sử dụng ngăn xếp để giải quyết hiệu quả.

Giải Pháp Bạo Lực: Thử Nghiệm Đầu Tiên Trên Mảng Thúc Diệt

Nhĩ Thọa suy nghĩ: "Để tìm nhiệt độ cao hơn tiếp theo của mỗi nhiệt độ, tôi có thể thử đối với mỗi nhiệt độ, duyệt về phía sau cho đến khi tìm thấy nhiệt độ cao hơn." Ông vận dụng sức mạnh của Mảng Thúc Diệt thông qua vòng lặp lồng nhau, so sánh từng giá trị nhiệt độ, cố gắng đạt được kết quả.

#include <iostream>
#include <vector>

using namespace std;

vector<int> dailyTemperatures(vector<int>& temperatures) {
    vector<int> result(temperatures.size(), 0);
    for (int i = 0; i < temperatures.size(); ++i) {
        for (int j = i + 1; j < temperatures.size(); ++j) {
            if (temperatures[j] > temperatures[i]) {
                result[i] = j - i;
                break;
            }
        }
    }
    return result;
}

int main() {
    vector<int> temperatures = {73, 74, 75, 71, 69, 72, 76};
    vector<int> result = dailyTemperatures(temperatures);
    cout << "Chỉ số của nhiệt độ cao hơn tiếp theo của mỗi nhiệt độ là:";
    for (int res : result) {
        cout << res << " ";
    }
    cout << endl;
    return 0;
}

Nhĩ Thọa thành công trong việc đạt được kết quả, nhưng ánh sáng của Mảng Thúc Diệt dần sờn yếu đi. Ông nhận ra rằng phương pháp này có độ phức tạp thời gian lên đến O(n^2), gây tiêu tốn năng lượng lớn khi dữ liệu nhiệt độ lớn, hiệu suất thấp.

Cú Pháp C++

Trong C++, việc thực hiện ngăn xếp đơn điệu liên quan đến các thao tác trên vector và ngăn xếp. Dưới đây là một số đặc điểm quan trọng:

  • Thao tác trên vector:
    • Sử dụng kiểu dữ liệu vector để lưu trữ dữ liệu nhiệt độ và kết quả.
    • Sử dụng phương thức push_back và pop_back để chỉnh sửa vector.
  • Thao tác trên ngăn xếp:
    • Sử dụng bộ điều hợp container stack để thực hiện chức năng ngăn xếp.
    • Sử dụng phương thức push, pop và top để thao tác với ngăn xếp.

Tối Ưu Hóa Cao Cấp: Khôn Minh Của Ngăn Xếp Đơn Điệu

Trong tâm linh của Nhĩ Thọa đột nhiên nổi lên những nét văn tự vàng - "Phong tỏa Mảng Thúc Diệt bằng ngăn xếp đơn điệu, nhiệt độ hàng ngày lộ ra chân dung thật sự". Ông hiểu rằng thông qua đặc tính của ngăn xếp đơn điệu, có thể duy trì một chuỗi nhiệt độ giảm dần, từ đó tìm nhanh chóng nhiệt độ cao hơn tiếp theo của mỗi nhiệt độ.

Nhĩ Thọa quyết định sử dụng ngăn xếp đơn điệu, duyệt mảng nhiệt độ từ cuối về đầu, đưa nhiệt độ và chỉ số vào ngăn xếp, duy trì thứ tự giảm dần của nhiệt độ trong ngăn xếp. Qua cách này, ông thành công trong việc giảm độ phức tạp thời gian xuống O(n), giảm đáng kể tiêu tốn năng lượng.

#include <iostream>
#include <vector>
#include <stack>

using namespace std;

vector<int> dailyTemperatures(vector<int>& temperatures) {
    vector<int> result(temperatures.size(), 0);
    stack<pair<int, int>> stk; // Lưu trữ nhiệt độ và chỉ số

    for (int i = temperatures.size() - 1; i >= 0; --i) {
        while (!stk.empty() && stk.top().first <= temperatures[i]) {
            stk.pop();
        }
        if (!stk.empty()) {
            result[i] = stk.top().second - i;
        }
        stk.push({temperatures[i], i});
    }
    return result;
}

int main() {
    vector<int> temperatures = {73, 74, 75, 71, 69, 72, 76};
    vector<int> result = dailyTemperatures(temperatures);
    cout << "Chỉ số của nhiệt độ cao hơn tiếp theo của mỗi nhiệt độ là:";
    for (int res : result) {
        cout << res << " ";
    }
    cout << endl;
    return 0;
}

Phân Tích Độ Phức Tạp: Đánh Giá Tiêu Tốn Năng Lượng

  • Độ phức tạp thời gian: O(n), trong đó n là chiều dài của mảng nhiệt độ. Mỗi phần tử chỉ được đẩy và lấy ra khỏi ngăn xếp tối đa một lần.
  • Độ phức tạp không gian: O(n), cần ngăn xếp để lưu trữ nhiệt độ và chỉ số.

Nhĩ Thọa sử dụng đoạn mã tối ưu hóa, tiêu tốn năng lượng của Mảng Thúc Diệt được cải thiện, giải quyết hiệu quả bài toán nhiệt độ hàng ngày.

Luyện Tập Biến Thể: Phản Ứng Với Hình Thức Biến Thể Của Mảng

  1. Xử lý dữ liệu nhiệt độ lớn hơn: Ví dụ như chiều dài mảng nhiệt độ là 10000, kiểm tra hiệu suất của thuật toán.
  2. Hỗ trợ nhiều nhóm dữ liệu nhiệt độ: Xử lý đồng loạt nhiều mảng nhiệt độ, so sánh kết quả.
  3. Tối ưu hóa việc sử dụng bộ nhớ: Giảm bộ nhớ được sử dụng bởi ngăn xếp.
  4. Triển khai các ứng dụng ngăn xếp đơn điệu khác: Ví dụ như diện tích hình chữ nhật lớn nhất v.v.

Tài Yết Khẩu Chế: Khôn Minh Của Tu Luyện

> Phong tỏa Mảng Thúc Diệt bằng ngăn xếp đơn điệu, nhiệt độ hàng ngày lộ ra chân dung thật sự.
> Bảo trì giảm dần, tìm kiếm hiệu quả, nhiệt độ hiện ra.

Giải thích Khẩu Chế:

  • Phong tỏa Mảng Thúc Diệt bằng ngăn xếp đơn điệu: Thể hiện khôn ngoan của bài toán ứng dụng ngăn xếp đơn điệu, vận dụng sức mạnh Mảng Thúc Diệt để phong tỏa ngăn xếp đơn điệu.
  • Nhiệt độ hàng ngày lộ ra chân dung thật sự: Giải quyết bài toán nhiệt độ hàng ngày thông qua tối ưu hóa.
  • Bảo trì giảm dần: Duy trì thứ tự giảm dần của nhiệt độ trong ngăn xếp.
  • Tìm kiếm hiệu quả: Tìm nhanh chóng nhiệt độ cao hơn tiếp theo của mỗi nhiệt độ.
  • Nhiệt độ hiện ra: Cuối cùng, đạt được chỉ số của nhiệt độ cao hơn tiếp theo của mỗi nhiệt độ.

Thẻ: C++ Stack monotonic-stack daily-temperature

Đăng vào ngày 23 tháng 5 lúc 18:42