LeetCode-5.3.下一個更大元素 II

給定一個循環數組(最後一個元素的下一個元素是數組的第一個元素),輸出每個元素的下一個更大元素。數字 x 的下一個更大的元素是按數組遍歷順序,這個數字之後的第一個比它更大的數,這意味着你應該循環地搜索它的下一個更大的數。如果不存在,則輸出 -1。

示例 1:

輸入: [1,2,1]
輸出: [2,-1,2]
解釋: 第一個 1 的下一個更大的數是 2;
數字 2 找不到下一個更大的數;
第二個 1 的下一個最大的數需要循環搜索,結果也是 2。
注意: 輸入數組的長度不會超過 10000。

暴力

#include <iostream>
#include <vector>

using namespace std;
vector<int> nextGreaterElements(vector<int>& nums) {
    vector<int> res;
    int flag, idx;
    int len = nums.size();
    for (int i = 0; i < len; i++) {
//        cout << "i : " << i << endl;
        idx = i;
        if (idx < len - 1) {
            flag = idx + 1;
        } else {
            flag = 0;
        }

        while (true) {
//            cout << "idx : " << idx << "\t flag : " << flag << endl;
            if (nums[flag] > nums[idx]) {
                res.push_back(nums[flag]);
                break;
            } else if (flag == idx) { // 和下面的判斷條件不要反了
                res.push_back(-1);
                break;
            } else if (flag == len - 1) {
                flag = 0;
            } else {
                flag++;
            }
        }
    }
    return res;
}

int main() {
    vector<int> nums = {1,2,3,4,5};
    vector<int> res;
    res = nextGreaterElements(nums);
    for (int r : res) {
        cout << r << endl;
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章