leetcode講解--944. Delete Columns to Make Sorted

weixin_33806914發表於2018-12-17

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 choose any set of deletion indices, and for each string, we delete all the characters in those indices.

For example, if we have an array A = ["abcdef","uvwxyz"] and deletion indices {0, 2, 3}, then the final array after deletions is ["bef", "vyz"], and the remaining columns of A are ["b","v"], ["e","y"], and ["f","z"]. (Formally, the c-th column is [A[0][c], A[1][c], ..., A[A.length-1][c]].)

Suppose we chose a set of deletion indices D such that after deletions, each remaining column in A is in non-decreasing sorted order.

Return the minimum possible value of D.length.

Example 1:

Input: ["cba","daf","ghi"]
Output: 1
Explanation: 
After choosing D = {1}, each column ["c","d","g"] and ["a","f","i"] are in non-decreasing sorted order.
If we chose D = {}, then a column ["b","a","h"] would not be in non-decreasing sorted order.

Example 2:

Input: ["a","b"]
Output: 0
Explanation: D = {}

Example 3:

Input: ["zyx","wvu","tsr"]
Output: 3
Explanation: D = {0, 1, 2}

Note:

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

這一題又是考察二維陣列的操作,比較簡單。涉及到一個很簡單的演算法就是:判斷序列是否有序,最簡單直接的判定是遍歷一遍序列,只要後面一個數比前面一個數大,就是升序的,反之如果後面一個數都比前面一個數小,就是降序。需要考慮的邊角條件(corner case)就是如果序列只有一個數,那麼我們直接判定序列是有序的。

java程式碼

class Solution {
    public int minDeletionSize(String[] A) {
        int result = 0;
        char[][] a = new char[A.length][A[0].length()];
        for(int i=0;i<A.length;i++){
            a[i] = A[i].toCharArray();
        }
        for(int i=0;i<a[0].length;i++){
            if(!isNoDecreasing(a, i)){
                result++;
            }
        }
        return result;
    }
    
    private boolean isNoDecreasing(char[][] c, int ColumnNums){
        if(c[0].length<2){
            return true;
        }
        for(int i=1;i<c.length;i++){
            if(c[i-1][ColumnNums]>c[i][ColumnNums]){
               return false;
            }
        }
        return true;
    }
}

相關文章