• [ 周赛总结 ] 第 186 场力扣周赛


    题目:

    总结:

    1. 递归写的不熟练,第一题写的太丑了
    2. 思维僵化了,没有从反方向考虑,比如第二题

    A: 分割字符串的最大得分

    • 算法:这道题蛮简单的,递归穷举所有可能的情况即可
    • 需要改进的地方:递归写的不够优雅,需要改进
    • # 我的代码:
      class
      Solution: def __init__(self): self.ret = -99 def maxScore(self, s: str) -> int: def resolve(i): if i>=len(s): return 0 left = s[:i] right=s[i:] self.ret = max(self.ret , left.count('0')+right.count('1')) resolve(i+1) return 1 resolve(1) return self.ret
    •  改进:
      class Solution:
          def maxScore(self, s: str) -> int:
              def resolve(i,ans):
                  if i>=len(s):
                      return ans
                  ans = max(ans,s[:i].count('0')+s[i:].count('1'))
                  return resolve(i+1,ans)
              
              ret = resolve(1,-99)
              return ret

    B:可获得的最大点数

    • 算法:用滑动窗口的思路,保持窗口外有K个数,让滑动窗口从最右边滑到最左边,迭代一个最大点数
    • 需要改进的地方:
    1. 开始一直在思考只拿左边、只拿右边、左右同时拿三种情况,递归没写出来。
    2. 递归思路没有反向思考K的值,K递减到1即为出口
    3. 试试其他思路,比如反向考虑:求滑动窗口内的最小值(相对的窗口外的和就是要求的最大点数);求数组连续最小和;等等
    • class Solution:
          def maxScore(self, nums: List[int], k: int) -> int:
              left=k
              right=0
              ans=-1
              left_total = sum(nums[0:left])
              right_total =0
              while left>=0:
                  total = left_total+right_total
                  ans = max(ans,total)  
                  right+=1
                  left-=1
                  left_total-=nums[left]
                  right_total+=nums[len(nums)-right]
          
              return ans

     

    C:对角线遍历 II

    • 算法:哪个鬼才想到的。。。
    1. 找规律,只要在对角线上,那么它的横纵坐标和是相等的,比如示例1

      (0,0),(0,1),(0,2)
      (1,0),(1,1),(1,2)
      (2,0),(2,1),(2,2)
    2. 遍历nums,把横纵坐标和相同的元素放在一起作为值,横纵坐标的和作为键。
    3. 排序字典,输出答案。
  • 相关阅读:
    IBM Minus One(water)
    约瑟夫问题的循环链表实现
    双向链表(差不多)
    单向链表的建立,插入,删除(复习一下)
    找新朋友(欧拉函数)
    验证角谷猜想(hd1279)
    Wolf and Rabbit(gcd)
    Big Number(大数)
    字串数(高精度组合数)
    寻找素数对(hd1262)
  • 原文地址:https://www.cnblogs.com/remly/p/12790885.html
Copyright © 2020-2023  润新知