前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode笔记:Weekly Contest 272

LeetCode笔记:Weekly Contest 272

作者头像
codename_cys
发布2021-12-20 19:27:45
2220
发布2021-12-20 19:27:45
举报
文章被收录于专栏:我的充电站我的充电站

1. 题目一

给出题目一的试题链接如下:

1. 解题思路

这一题感觉没啥好多说的,就是按照题目说的,从头开始依次遍历,找到第一个回文字符串,返回即可,如果找不到就返回空即可。

2. 代码实现

给出python代码实现如下:

代码语言:javascript
复制
class Solution:
    def firstPalindrome(self, words: List[str]) -> str:
        for s in words:
            if s == s[::-1]:
                return s
        return ""

提交代码评测得到:耗时68ms,占用内存14.3MB。

2. 题目二

给出题目二的试题链接如下:

1. 解题思路

这一题其实也好搞,就是按照space的位置对原字符串先进行切分,最后统一一起加入空格符即可。

2. 代码实现

给出python代码实现如下:

代码语言:javascript
复制
class Solution:
    def addSpaces(self, s: str, spaces: List[int]) -> str:
        i = 0
        words = []
        for j in spaces:
            words.append(s[i:j])
            i = j
        words.append(s[i:])
        return " ".join(words)

提交代码评测得到:耗时636ms,占用内存50.2MB。

3. 题目三

给出题目三的试题链接如下:

1. 解题思路

这一题思路其实也简单,首先就是考察每一个递减的序列的长度,然后对于一个长度为n的递减序列,其中能够取得的满足题意得子串的数目为 n ( n + 1 ) 2 \frac{n(n+1)}{2} 2n(n+1)​,由此,我们就可以快速地得到我们的最终答案了。

2. 代码实现

给出python代码实现如下:

代码语言:javascript
复制
class Solution:
    def getDescentPeriods(self, prices: List[int]) -> int:
        res = 0
        p, cnt = prices[0], 1
        for pn in prices[1:]:
            if pn == p-1:
                cnt += 1
                p = pn
            else:
                res += cnt * (cnt+1) // 2
                p, cnt = pn, 1
        res += cnt * (cnt+1) // 2
        return res

提交代码评测得到:耗时984ms,占用内存27.9MB。

4. 题目四

给出题目四的试题链接如下:

1. 解题思路

这一题其实也是个蛮常见的套路题,考察的无非就是一个序列当中的最长递增子序列长度。

我们首先按照k的间隔将原数组进行切分,然后对每一个子数组求一下最长非减子序列的长度,两者的差值就是对于这一个子序列需要调整的元素的个数。最后对所有的子序列中需要调整的元素个数进行一个求和就是最终需要调整的元素个数。

而其中如何求最长的递增子序列长度,这个就是一个标准的套路题了,这里就不多做说明了。

2. 代码实现

给出python代码实现如下:

代码语言:javascript
复制
class Solution:
    def kIncreasing(self, arr: List[int], k: int) -> int:
        
        def longest_increase_subarray(arr):
            res = 0
            s = []
            for x in arr:
                idx = bisect.bisect_right(s, x)
                if idx == len(s):
                    s.append(x)
                else:
                    s[idx] = x
                res = max(res, idx+1)
            return res
        
        n = len(arr)
        res = 0
        for i in range(min(n, k)):
            sub = arr[i:n:k]
            res += len(sub) - longest_increase_subarray(sub)
        return res

提交代码评测得到:耗时1144ms,占用内存29MB。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目一
    • 1. 解题思路
      • 2. 代码实现
      • 2. 题目二
        • 1. 解题思路
          • 2. 代码实现
          • 3. 题目三
            • 1. 解题思路
              • 2. 代码实现
              • 4. 题目四
                • 1. 解题思路
                  • 2. 代码实现
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档