曾记得十多年前刚毕业的时候,偶尔也会遇到加班,即使加班晚上也不会很晚。不知道从什么时候开始,互联网行业突然流行起了996,有些公司甚至把它当做企业文化来宣传。
--------------下面是今天的算法题--------------
来看下今天的算法题,这题是LeetCode的第739题:每日温度。
问题描述
输入: nums = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]
输入: nums = [30,40,50,60]
输出: [1,1,1,0]
1 <= temperatures.length <= 10^5
30 <= temperatures[i] <= 100
问题分析
public int[] dailyTemperatures(int[] nums) {
int length = nums.length;// 数组长度
int[] ans = new int[length];// 返回结果
Stack<Integer> stk = new Stack<>();// 栈
for (int i = 0; i < length; i++) {
// 如果当前元素大于栈顶元素,说明栈顶元素遇到了右边比它大的值。
while (!stk.isEmpty() && nums[i] > nums[stk.peek()])
ans[stk.peek()] = i - stk.pop();
stk.push(i);// 把当前元素的下标入栈。
}
return ans;
}
public:
vector<int> dailyTemperatures(vector<int> &nums) {
int length = nums.size();// 数组长度
vector<int> ans(length);// 返回结果
stack<int> stk;// 栈
for (int i = 0; i < length; i++) {
// 如果当前元素大于栈顶元素,说明栈顶元素遇到了右边比它大的值。
while (!stk.empty() && nums[i] > nums[stk.top()]) {
ans[stk.top()] = i - stk.top();
stk.pop();
}
stk.push(i);// 把当前元素的下标入栈。
}
return ans;
}
def dailyTemperatures(self, nums: List[int]) -> List[int]:
length = len(nums) # 数组长度
ans = [0] * length # 返回结果
stk = [] # 栈
for i in range(0, length):
# 如果当前元素大于栈顶元素,说明栈顶元素遇到了右边比它大的值。
while stk and nums[i] > nums[stk[-1]]:
ans[stk[-1]] = i - stk[-1]
stk.pop()
stk.append(i) # 把当前元素的下标入栈。
return ans