参考题解

1796.字符串中第二大的数字

解题思路

  遍历这个字符串,维护两个两个值——第一大的数字和第二大的数字。

  注意不存在第二大数字的时候要返回-1。

参考代码

class Solution {
    public int secondHighest(String s) {
        int maxx1 = -1 , maxx2 = -1;
        for(int i=0;i<s.length();i++){
            char x = s.charAt(i); //获取当前下标的字符
            if(x<'0'||x>'9') continue;   //当前是字母
            int now = x - '0'; //计算出当前字符代表的数字
            if(now > maxx1){ //如果比第一大数字大,那么第一大就成第二大,当前数字为第一大
                maxx2 = maxx1;
                maxx1 = now;
            }
            if(now > maxx2 && now < maxx1){//比第一大要小,但比第二大数字大
                maxx2 = now;
            }
        }
        return maxx2;
    }
}

1716.计算力扣银行的钱

解题思路1

  我们对这n天一天天地模拟,计算出每一天应该加多少钱,然后统计进答案。

参考代码1

class Solution {
    public int totalMoney(int n) {
        int week = 1,num = 0; // week为当前星期一加的钱,num为当天应加的钱
        int res = 0; 
        for(int i=1;i<=n;i++){
            if(i%7 == 1){ //当今天是星期一
                num = week;
                week++; //下周一要比这周一多1块
            }
            res += num; //统计答案
            num++; //明天应该多加1块钱
        }
        return res;
    }
}

解题思路2

  我们观察每一周加的总钱数:28 35 42

  可以知道这是一个等差数列,我们可以使用等差数列的求和公式:

  

  计算出前x周加的总钱数为28x +x(x-1)7/2

  然后零散的几天,第一天加的钱数是n/7+1,最后一天为n/7+n%7,使用等差数列求和公式,一共是(n/7+1+n/7+n%7)(n%7)/2

参考代码2

class Solution {
    public int totalMoney(int n) {
        int a = n / 7, b = n % 7; //a为n有多少周,b为不足一周的剩余的天数
        int ans = 28 * a + a * (a - 1) * 7 / 2 + (a + 1 + a + b) * b / 2;
        return ans;
    }
}

121.买卖股票的最佳时机

  官方题解:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/solution/121-mai-mai-gu-piao-de-zui-jia-shi-ji-by-leetcode-/

一点一点积累,一点一点蜕变!
原文地址:https://www.cnblogs.com/qq2210446939/p/15183949.html