Leetcode刷题17-944.删列造序(C++)

题目来源:链接: [https://leetcode-cn.com/problems/delete-columns-to-make-sorted/].

1.问题描述

给定由 N 个小写字母字符串组成的数组 A,其中每个字符串长度相等。

选取一个删除索引序列,对于 A 中的每个字符串,删除对应每个索引处的字符。 所余下的字符串行从上往下读形成列。

比如,有 A = [“abcdef”, “uvwxyz”],删除索引序列 {0, 2, 3},删除后 A 为[“bef”, “vyz”], A 的列分别为[“b”,“v”], [“e”,“y”], [“f”,“z”]。(形式上,第 n 列为 [A[0][n], A[1][n], …, A[A.length-1][n]])。

假设,我们选择了一组删除索引 D,那么在执行删除操作之后,A 中所剩余的每一列都必须是 非降序 排列的,然后请你返回 D.length 的最小可能值。

注意:

  1. 1 <= A.length <= 100
  2. 1<= A[i].length <= 1000

示例1:

输入:["cba", "daf", "ghi"]
输出:1
解释:
当选择 D = {1},删除后 A 的列为:["c","d","g"] 和 ["a","f","i"],均为非降序排列。
若选择 D = {},那么 A 的列 ["b","a","h"] 就不是非降序排列了。

示例2:

输入:["a", "b"]
输出:0
解释:D = {}

示例3:

输入:["zyx", "wvu", "tsr"]
输出:3
解释:D = {0, 1, 2}

2.我的解决方案

唉,我的逻辑思路一致都是对的,但是不知道为啥一个劲的 报错,我怀疑是i应该从1开始造成的,唉,浪费了我至少一个小时的时间!!!
代码如下:

class Solution {
public:
    int minDeletionSize(vector<string>& A) {
        int result = 0;
        for (int j = 0; j < A[0].size(); ++j)
        {
            for (int i = 1; i < A.size(); ++i)   // 我一开始写的 i = 0
            {
                if (A[i][j] < A[i-1][j]) 
                {
                    result++; 
                    break;
                }
            }
        }
        return result;
    }
};
执行用时 : 68 ms, 在Delete Columns to Make Sorted的C++提交中击败了24.11% 的用户
内存消耗 : 13.2 MB, 在Delete Columns to Make Sorted的C++提交中击败了0.00% 的用户

3.大神们的解决方案

还没看,等我明天再细细研究。。。

static const auto init = []() {
    /*
     *关掉c++中iostream和c中cstdio流的同步(cout和printf,cin和scanf)
     *关掉后不能同时使用c和c++的输入输出;
     */
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);//完成cin和cout的解耦,减少大量的缓冲区刷新操作
    return nullptr;
}();
class Solution {
public:
    int minDeletionSize(vector<string>& A) {
        int N = A.size();
        if(N==0||A[0].empty())return 0;
        int col = A[0].size();
        int ans = 0;
        for(int i=0;i<col;++i){
            int j=1;
            while(j<N&&A[j-1][i]<=A[j][i])++j;
            if(j!=N)++ans;
        }
        return ans;
    }
};

4.我的收获

要细心啊 啊啊啊

2019/3/9 胡云层 于南京 17

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值