记录leetcode每日一题

记录leetcode每日一题记录

    • 回文数
    • 每日温度

回文数

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:

输入: 121
输出: true

示例 2:

输入: -121
输出: false
解释: 从左向右读,-121 。 从右向左读,121- 。因此它不是一个回文数。

示例 3:

输入: 10
输出: false
解释: 从右向左读,01 。因此它不是一个回文数。

进阶:
你能不将整数转为字符串来解决这个问题吗?

public bool isPalindrome(int x)
{
	if (x == 0) return true;
    if (x < 0 || x % 10 == 0) return false;
        
    int n = 0;
    while (n < x)
    {
        n = x % 10  + n * 10;
        x /= 10;
    }
    return x == n / 10 || x == n;
}
//执行用时 20ms
//内存消耗 5.8MB

每日温度

根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。
例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]
提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。

 public int[] DailyTemperatures(int[] T)
 {
     int length = T.Length;
     int[] ans = new int[length];
     int[] next = new int[101];
     for (int i = 0; i < 101; i ++)
     {
         next[i] = int.MaxValue;
     }
     for (int i = length - 1; i >= 0; i--)
     {
         int warmerIndex = int.MaxValue;
         for (int t = T[i] + 1; t <= 100; t++)
         {
             if (next[t] < warmerIndex)
             {
                 warmerIndex = next[t];
             }
         }
         if (warmerIndex < int.MaxValue)
         {
             ans[i] = warmerIndex - i;
         }
         next[T[i]] = i;
     }
     return ans;
 }
public int[] DailyTemperatures(int[] T) {
        int n = T.Length;
        int[] res = new int[n];
        Stack<int> st = new Stack<int>();
        for (int i = 0; i < n; ++i)
        {
            while (st.Count > 0 && T[i] > T[st.Peek()])
            {
                var t = st.Peek();
                st.Pop();
                res[t] = i - t;
            }
            st.Push(i);
        }
        return res;
    }

你可能感兴趣的:(算法)