代码随想录算法训练营第58天 | 739. 每日温度 496.下一个更大元素 I

一、Leetcode 739. 每日温度

第一次做单调栈,注意事项:

  1. 通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了。
  2. 单调栈里存放的是元素的下标i,而进行比较时用的是T[i], T[st.top()]
  3. 遍历逻辑
if (T[i] < T[st.top()]) {                       // 情况一
    st.push(i);
} else if (T[i] == T[st.top()]) {               // 情况二
    st.push(i);
} else {
    while (!st.empty() && T[i] > T[st.top()]) { // 情况三
        result[st.top()] = i - st.top();
        st.pop();
    }
    st.push(i);
}
  1. 本题的result值是,和下一个大值的距离,因此result[st.top()] = i - st.top();

二、Leetcode 496.下一个更大元素 I

unordered_map的函数有

  1. insert(pair(3, “张三”)),
  2. size()
  3. count(key), 如果Map中存在具有给定键的值,则此函数返回1,否则返回0。
    举一个unordered_map的例子
		unordered_map<int, int> umap(nums1.size());
        for (int i = 0; i < nums1.size(); i++){
            umap[nums1[i]] = i;
        }

本题和上题一样也是用单调增(从栈顶到栈底)的栈,一旦新加入的值比栈顶大,那就开始弹出直到符合单调增的条件入栈。
至于result值,本题是nums2[i]的值,因此result[umap[nums2[st.top()]]] = nums2[i]

你可能感兴趣的:(刷题,算法,leetcode,职场和发展)