單調棧解決next_greater_Number問題

PS:單調棧就是棧結構構成,不過元素進棧是按照必定的規則進棧,下面主要經過求數組下一個比其大的數每日溫度這兩個問題來說述單調棧的使用。 數組

// 求數組中每一個數的下一個比其大的數,若是沒有返回-1

class Solution {
public: 
	vector<int> next_greater_element(vector<int> nums) {
		// 使用單調棧解決
		stack<int> sta; 
		vector<int> res(nums.size()); 
		for (int i = nums.size()-1; i >= 0; i--) {
			while (!sta.empty() && nums[i] >= sta.top()) {
				sta.pop(); 
			}
			res[i] = sta.empty() ? -1 : sta.top(); // 存入的是值
			sta.push(nums[i]); 
		}
		return res; 

	}
};


//每日溫度

class Solution2  {
public:
	vector<int> daily_temperate(vector<int> nums) {
		// 跟上面相似
		stack<int> sta; 
		int n = nums.size(); 
		vector<int> res(n); 
		for (int i = n - 1; i >= 0; i--) {
			while (!sta.empty() && nums[i] >= sta.top()) {
				sta.pop();
			}
			res[i] = sta.empty() ? -1 : sta.top() - i;  // 注意這裏是存入隔多少天后會有更高的溫度
			sta.push(nums[i]); 
		}
		return res; 
	}
};
相關文章
相關標籤/搜索