题目:给定由 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:

输入:[“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}
提示:

1 <= A.length <= 100
1 <= A[i].length <= 1000
思路:就是对列进行遍历,当遇到该列中存在前面的字符比后面的字符大的时候,这列就该删掉了 哈哈,标记一下就行。

但是想一下,如果只需要该列有序,不说是降序还是升序呢?还是一样的思路,对每一列进行遍历,如果升序记录一下add,降序也记录一下sub,有降到升或者由升到降都是不符合要求,单独记一下count,最后只有返回count+Math.min(sub, add),就能得到删除最少的列数。

class Solution {public int minDeletionSize(String[] A) {int count = 0;int len = A[0].length();//记录单个个词语的长度int rows = A.length;//记录有多少个词语String[] columns = new String[len];Arrays.fill(columns, "");//如果只有不到一个词语或者单个词语长度为0 那就不用比了if(rows <= 1 || len == 0){return 0;}for(int i = 0; i < len; i++ ){for(int j = 1; j < rows; j++){if(A[j-1].charAt(i) > A[j].charAt(i)){count++;break;}}}return count;}
}

如果题目只是要求有序,而没说是升序还是降序:

class Solution {public int minDeletionSize(String[] A) {int len = A[0].length();//记录单个个词语的长度int rows = A.length;//记录有多少个词语String[] columns = new String[len];Arrays.fill(columns, "");//如果只有不到一个词语或者单个词语长度为0 那就不用比了if(rows <= 1 || len == 0){return 0;}for(int i = 0; i < rows; i++ ){for(int j = 0; j < len; j++){columns[j] += A[i].charAt(j);}}int add = 0;int sub = 0;int count = 0;for(int i = 0; i < len; i++){if(judge(columns[i]) == 0){add++;}else if(judge(columns[i]) == 1){sub++;}else{count++;}}return Math.min(add, sub) + count;}//判断某列是否有序,以及是哪种顺序public int judge(String str){int len = str.length();int add = 0;int sub = 0;for(int i = 0; i < len; i++){if(i+1 < len && str.charAt(i) <= str.charAt(i+1)){add = 1;}else if(i+1 < len && str.charAt(i) > str.charAt(i+1)){sub = 1;}if(add * sub == 1){return -1;}}if(add == 1){return 0;}return 1;}
}

leetcode944. Delete Columns to Make Sorted相关推荐

  1. [Swift]LeetCode944. 删除列以使之有序 | Delete Columns to Make Sorted

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  2. 【leetcode】944. Delete Columns to Make Sorted

    题目如下: We are given an array A of N lowercase letter strings, all of the same length. Now, we may cho ...

  3. leetcode955. Delete Columns to Make Sorted II

    题目链接 参考自:https://leetcode.com/problems/delete-columns-to-make-sorted-ii/discuss/203182/JavaC%2B%2BPy ...

  4. sql delete删除列_现有表操作中SQL DELETE列概述

    sql delete删除列 In this article, we will explore the process of SQL Delete column from an existing tab ...

  5. linux系统运行powerbi,使用 Power BI 服务 - Power BI | Microsoft Docs

    快速入门 - 使用 Power BI 服Quickstart - Getting around in Power BI service 10/12/2020 本文内容 备注 Power BI 正在转换 ...

  6. WaWa的奇妙冒险(第一周集训自闭现场)

    第一周周记 (一)例题记录 A-Download Manager (水题) HDU - 3233 Input Output Sample Input Sample Output 理解 AC代码 B-J ...

  7. 程序员普遍用gmail_使Gmail更好的最佳Chrome扩展程序

    程序员普遍用gmail Gmail is already pretty great, but with the addition of a few carefully selected Google ...

  8. tflearn教程_TFlearn 快速入门

    在本教程中,您将学习使用TFLearn和TensorFlow来估计泰坦尼克号乘客使用其个人信息(如性别,年龄等)的幸存机会. 为了解决这个经典机器学习任务,我们要构建一个深层神经网络分类器. 前提条件 ...

  9. tflearn教程_TensorFlow/TFLearn学习案例:泰坦尼克

    在本教程中,您将学习使用TFLearn和tensorflow评估泰坦尼克号乘客幸存的机会,数据根据是利用他们的个人信息(如性别.年龄等).为了解决这一经典的机器学习任务,我们要建立一个深神经网络分类器 ...

最新文章

  1. Velocity模板引擎的简单使用
  2. maven 引入外部jar包的几种方式
  3. 透析 | 卷积神经网络CNN究竟是怎样一步一步工作的?
  4. 缓存与数据库的一致性
  5. python把print写入文件_Python中用print方法向文件中写入内容
  6. 不得不看!降低Transformer复杂度的方法
  7. 谷歌 Chrome 同步功能可滥用于 C2 通信及数据提取
  8. jpeg图片转换成word
  9. 2022 github新建账号技巧
  10. verilog模块自动例化perl脚本
  11. 全国海关分区图(含副厅)
  12. 从solidWorks导出机器人URDF文件
  13. 心态-《积极的力量》书中的精髓:如何保持积极乐观的心态,从而提升我们的幸福感?
  14. 如何沿法线方向挤出面
  15. curl使用用户名密码
  16. Opus:IETF低延迟音频编解码器:API和操作手册
  17. CentOS Netcat 用法
  18. 利用github pages做免费静态网站个人免费域名空间
  19. BZOJ 1430 小猴打架
  20. 数据预处理之数据清理,数据集成,数据规约,数据变化和离散化

热门文章

  1. automake的使用1
  2. JavaScript筑基篇(二)-JavaScript数据类型
  3. hdu 4775 Infinite Go(暴力)
  4. 记录一举一动:PowerShell几行代码实现定期屏幕截屏
  5. 子进程和父进程的结论_Python的多进程不是随便用滴!
  6. Python+BI可视化分析2000W数据之后,告诉你这届毕业生有多难
  7. Flex移动性能检查列表
  8. C语言需要什么程序翻译,c语言怎么翻译? 程序怎么运行?
  9. java缓存内存泄漏_java – getMethod是缓存并导致内存泄漏
  10. linux 软件部署工具下载,linux配置 yum管理应用软件 、 快速部署Web/FTP