2020/07/05 未参赛,AC 3/4

第三题 全一子矩阵

思路参考最大矩形。
设计一个dp[i][j]表示以i,j为右下角的矩阵的最大值,我们需要枚举宽度和高度,但是我们可以通过预先设计一个矩阵,存储每个位置上方最大的连续矩阵1个数。

class Solution:def numSubmat(self, mat: List[List[int]]) -> int:## 考虑时间复杂度降低为O(nnm)## 定义dp[i][j]表示i,j这个点上方的连续1的个数n = len(mat)m = len(mat[0])dp = [[0]*m for _ in range(n)]for i in range(m):dp[0][i] = mat[0][i]for i in range(1,n):for j in range(m):if mat[i][j]:dp[i][j] = dp[i-1][j]+1# 接下来计算矩形个数ans = 0# 前两层循环寻找右下角的点for i in range(n):for j in range(m):t = float('inf')for k in range(j,-1,-1):t = min(t, dp[i][k])ans += tif t == 0:breakreturn ans

第四题:交换k次的最小整数

首先这道题目的一个核心在于贪心的使用,想要得到最小的数字,就需要尽量让较小的数字移到最高位。如果不足够让后面最小的数字移到最高位,也需要让尽可能小的数字移到最高位。

因此我们可以想象一个复杂度为 O ( n 2 ) O(n^2) O(n2)的算法,每次依次寻找一个k位以内的最小数字,然后移到最前端。这样可以递归的求解。

class Solution(object):def minInteger(self, num, k):if k <= 0 or not num: return num# 这个是tricky的代码...不加会超时if len(num)**2//2 < k: return ''.join(sorted(list(num)))# 每次寻找前`k+1`个数字中的最小数字的最小下标,复杂度O(n^2)index = num.index(min(num[:k+1]))res = num[index] + self.minInteger(num[:index] + num[index+1:], k - index)return res

一个比较好的算法是采用树状数组的方法求解,我们维护一个树状数组,数组中维护了每一个坐标移到最前面需要的步数。一般前面有数组的位置发生了改变,我们也可以很简单的维护数组中的区间和。

class Solution:def minInteger(self, num: str, k: int) -> str:# 树状数组做法def lowbit(x):return x & (-x)def add(index, val):while index < len(tree):tree[index] += valindex += lowbit(index)def query(index):res = 0while index > 0:res += tree[index]index -= lowbit(index)return resn = len(num)if k >= n**2//2:return ''.join(sorted(num))tree = [0]*(n+1)ans = ""visited = set()dic = {}for i, c in enumerate(num):if c not in dic:dic[c] = collections.deque()dic[c].append(i)i = 0while k > 0 and i < n:for digit in '0123456789':if digit not in dic or not dic[digit]:continueindex = dic[digit][0]# query(index)维护了,index这个位置前面缺少的元素对移动带来的影响。need_step =index - query(index)if need_step <= k:k -= need_stepans += digitadd(index+1, 1)dic[digit].popleft()visited.add(index)breaki += 1for i in range(n):if i not in visited:ans += num[i]return ans

【周赛总结】第196场周赛——全一子矩阵,交换k次的最小整数相关推荐

  1. [acwing周赛复盘] 第 91 场周赛20230218

    [acwing周赛复盘] 第 91 场周赛20230218 一.本周周赛总结 二. 4861. 构造数列 1. 题目描述 2. 思路分析 3. 代码实现 三.4862. 浇花 1. 题目描述 2. 思 ...

  2. [LeetCode周赛复盘] 第 314 场周赛20221009

    [LeetCode周赛复盘] 第 314 场周赛20221009 一.本周周赛总结 二. [Easy] 6201. 找出前缀异或的原始数组 1. 题目描述 2. 思路分析 3. 代码实现 三.[Eas ...

  3. 【力扣周赛】第342场周赛

    [力扣周赛]第342场周赛 6387:计算列车到站时间 题目描述 解题思路 6391:倍数求和 题目描述 解题思路 6390:滑动子数组的美丽值 题目描述 解题思路 6392:使数组所有元素变成1的最 ...

  4. 【力扣周赛】第343场周赛

    [力扣周赛]第343场周赛 2660:保龄球游戏的获胜者 题目描述 解题思路 2661:找出叠涂元素 题目描述 解题思路 2660:保龄球游戏的获胜者 题目描述 描述:给你两个下标从 0 开始的整数数 ...

  5. 【力扣周赛】第345场周赛

    [力扣周赛]第345场周赛 6430: 找出转圈游戏输家 题目描述 解题思路 6431: 相邻值的按位异或 题目描述 解题思路 6433: 矩阵中移动的最大次数 题目描述 解题思路 6432: 统计完 ...

  6. 【力扣周赛】第340场周赛

    [力扣周赛]第340场周赛 6361:对角线上的质数 题目描述 解题思路 6360:等值距离和 题目描述 解题思路 6361:对角线上的质数 题目描述 描述:给你一个下标从 0 开始的二维整数数组 n ...

  7. 【力扣周赛】第346场周赛

    [力扣周赛]第346场周赛 6439. 删除子串后的字符串最小长度 题目描述 解题思路 6454. 字典序最小回文串 题目描述 解题思路 6441. 求一个整数的惩罚数 题目描述 解题思路 6439. ...

  8. 【力扣周赛】第347场周赛

    [力扣周赛]第347场周赛 6457. 移除字符串中的尾随零 题目描述 解题思路 2711. 对角线上不同值的数量差 题目描述 解题思路 6455. 使所有字符相等的最小成本 题目描述 解题思路 64 ...

  9. 【力扣周赛】第349场周赛

    [力扣周赛]第349场周赛 6470. 既不是最小值也不是最大值 题目描述 解题思路 6465. 执行子串操作后的字典序最小字符串 题目描述 解题思路 6449. 收集巧克力 题目描述 解题思路 64 ...

最新文章

  1. 码农也能有春天:一个人独立运营网站12年,赚到了5亿多美元!
  2. 巧用FTP命令进行文件传输
  3. live2dmesh渲染优先级_live2dsdk的opengl示例详解
  4. mybatis查询时间段sql语句
  5. 善用工具_如何善用色彩心理学
  6. jquery中怎么删除ul中的整个li包括节点
  7. hashmap remove 没释放内存_java从零开始手写 redis(13)HashMap 源码原理详解
  8. Oracle建立表空间,用户等环节
  9. python中实例和对象的区别_通过Python中对象实例的属性比较对象实例是否相等
  10. 深入理解IIS工作原理
  11. 低通滤波-matlab低通滤波程序
  12. smobiler自适应不同手机分辨率
  13. 杀死一只知更鸟 影评
  14. 邮箱 签名 / 电子名片 设置
  15. NFT交易平台2.0来了,源代码,智能合约整套
  16. oppo A37全网通刷机包原厂售后线刷包自带工具
  17. HTML学习笔记_常用标签的使用及注意事项
  18. Spring Cloud Hoxton 版本微服务项目搭建 admin 监控客户端
  19. Zotero文献同步
  20. 激光雷达SLAM激光的前端配准算法

热门文章

  1. 2022-2028全球pH控制剂行业调研及趋势分析报告
  2. 做自己的安卓拍照应用,其实很简单
  3. 2023初级会计详细学习计划打卡表!自律逆袭,一次上岸!
  4. 使用手机访问电脑上开发的html页面
  5. pandas读取Excel判断指定列是否有空值
  6. WZOI-218疯狂吃鸡腿1
  7. 威斯康星麦迪逊计算机科学专业,威斯康星大学麦迪逊分校计算机科学专业申请条件汇总...
  8. MMDetection亲测安装教程
  9. 利用mathematica画多个函数图像
  10. pycharm遇坑指南(win32gui)