力扣周赛 5956题 找出数组中的第一个回文字符串 5958题 股票平滑下跌阶段的数目 打卡

5956. 找出数组中的第一个回文字符串

给你一个字符串数组 words ,找出并返回数组中的 第一个回文字符串 。如果不存在满足要求的字符串,返回一个 空字符串 "" 。

回文字符串 的定义为:如果一个字符串正着读和反着读一样,那么该字符串就是一个 回文字符串 。

解题思路:就是一个很简单的判断回文串的题,可以借助api reverse方法,也可以自己用双指针写一个判断回文串的方法。代码和提交截图如下图:

class Solution {
    public String firstPalindrome(String[] words) {
       for(int i = 0 ; i < words.length ; i++){
            if(isTrue(words[i])){
                return words[i];
            }
        }
        return "";
    }
   public boolean isTrue(String words){
        int start = 0 ;
        int end = words.length() - 1;
        while(start < end){
            if(words.charAt(start) == words.charAt(end)){
                start++;
                end--;
            }else{
                return false;
            }
        }
        return true;
    }
}

 5958. 股票平滑下跌阶段的数目

给你一个整数数组 prices ,表示一支股票的历史每日股价,其中 prices[i] 是这支股票第 i 天的价格。

一个 平滑下降的阶段 定义为:对于 连续一天或者多天 ,每日股价都比 前一日股价恰好少 1 ,这个阶段第一天的股价没有限制。

请你返回 平滑下降阶段 的数目。

解题思路: 我用一个栈来存储数组的值,如果栈为空入栈、栈不为空并且下一个元素符合要求,则入栈,直到下一个数不符合要求的时候,栈内的所有数弹出栈,并且计数,用等差数列的前n项和 n  *(1+count)/ 2;然后sum += count 即可,最后遍历完成,栈内还有数据,全部弹出来,然后计数 求和。  代码如下图所示(没有优化过,代码,简单的if else)

class Solution {
    public long getDescentPeriods(int[] prices) {
        if(prices == null){
                return 0;
            }
        Stack<Integer> stack = new Stack<>();
        long sum = 0;
        for (int i = 0; i < prices.length; i++) {
            long count = 0;
            if(stack.empty()){
                stack.push(prices[i]);
            }else {
                if(prices[i] == stack.peek() - 1){
                    stack.push(prices[i]);
                }else{
                    while(!stack.empty()){
                        stack.pop();
                        count++;
                    }
                    sum += count * (1+count) / 2;
                    stack.push(prices[i]);
                }
            }
        }
        long count = 0;
        while(!stack.empty()){
            stack.pop();
            count++;
        }
        sum += count * (1+count) / 2;
        return sum;
    }
}

 总结:这周周赛有点突破,好歹做了两道题,但是第二道题因为返回值写成了int,导致数值溢出,有一个测试用例就是过不去,但是力扣竞赛时候又不给错误的测试用例,所以耽误了很久。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值