leetcode 955

955: 删列造序Ⅱ

题意:在执行删除操作之后,最终得到的数组的元素是按 字典序 (strs[0] <= strs[1] <= strs[2] ... <= strs[n - 1])排列的。

从上往下一列一列遍历:

  • 一旦遇到ai > bi,直接不符
  • 一旦遇到ai < bi,直接符合(后面不用看了)
  • 如果遇到ai = bi,目前符合,继续往后看

第一列是升序,不删;对于第二列,此时第二列分成了两组 c,d 和 a,b,只需判断组内字母是不是升序,而不是完整地比较第二列的四个字母。

复制代码
class Solution {
public:
    int minDeletionSize(vector<string>& strs) {
        int n=strs.size(),m=strs[0].size();
        vector<bool> del(n-1,false);

        int ans=0;
        for(int j=0;j<m;j++){
            bool keep=true;
            for(int i=1;i<n;i++){
                if(!del[i-1] && strs[i-1][j]>strs[i][j]){
                    keep=false; //删除
                    break;
                }
            }
            if(keep){
                for(int i=1;i<n;i++){
                    if(strs[i-1][j]<strs[i][j]) del[i-1]=true;
                }
            }
            else ans++;
        }
        return ans;
    }
};
相关推荐
垆边人似月.6 分钟前
任务混部(200 分档)
算法
言乐611 分钟前
Python区分广度优先深度优先宽度优先的区别
python·算法·深度优先·广度优先·宽度优先
Rnan-prince24 分钟前
LeetCode 股票买卖系列:一个动态规划状态机模板通吃四题
leetcode·动态规划
如意猴29 分钟前
【C++】007 C/C++ 内存管理机制、malloc与new的区别及模板初阶
java·c++·算法
朝朝辞暮i32 分钟前
C++ 第 32 课:main()、rclcpp::init()、spin()、shutdown()
开发语言·c++·算法
圣保罗的大教堂1 小时前
leetcode 3756. 连接非零数字并乘以其数字和 II 中等
leetcode
Logic1012 小时前
C语言/数据结构排序题解:三个数的最大乘积——排序后比较两种候选情况
c语言·数据结构·数组·排序·时间复杂度·算法题·负数处理
朝朝辞暮i2 小时前
C++ 第 31C 课:Subscriber 到底是什么
开发语言·c++·算法
殷色玫瑰3 小时前
C++ string类详解:常用接口、字符串操作与模拟实现
java·linux·c语言·开发语言·数据结构·c++
Evand J3 小时前
【MATLAB例程】三维RRT+APF路径规划与AOA-TDOA融合定位算法。附代码的下载链接
算法·matlab·路径规划·rrt·tdoa·apf·aoa