How to Delete Columns to Make Sorted Table?

  • 时间:2020-10-11 15:48:46
  • 分类:网络文摘
  • 阅读:85 次

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 <= A.length <= 100
1 <= A[i].length <= 1000

Greedy Algorithm to Delete Columns

The greedy algorithm can be used to solve this problem. As long as we have a column that is unsorted, we have to delete them in order to make the table sorted.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public:
    int minDeletionSize(vector<string>& A) {
        int ans = 0;
        for (int i = 0; i < A[0].size(); i ++) {
            for (int j = 0; j < A.size() - 1; j ++) {
                if (A[j][i] > A[j + 1][i]) {
                    ans ++;
                    break;
                }
            }
        }
        return ans;
    }
};
class Solution {
public:
    int minDeletionSize(vector<string>& A) {
        int ans = 0;
        for (int i = 0; i < A[0].size(); i ++) {
            for (int j = 0; j < A.size() - 1; j ++) {
                if (A[j][i] > A[j + 1][i]) {
                    ans ++;
                    break;
                }
            }
        }
        return ans;
    }
};

We iterate each position/column, and then check if the current column is sorted, if not, increment the counter.

The space complexity is O(1) and the time complexity is O(NM) where there are N columns and average M width for each column.

–EOF (The Ultimate Computing & Technology Blog) —

推荐阅读:
How to Print Immutable Linked List in Reverse using Recursion or  The Most Useful Tools for Reverse Phone Lookup  How to Solve the WIFI (Wireless Networks) Intermittency Issues?  How to Reverse a Linked List in Javascript?  Bash Function to Check if a Kubernetes Pod Name is Valid  VBScript Function to Convert an Integer to Binary String Represe  Find Maximum Connected Colors (Values) in a 2D Grid using DFS or  Algorithms to Shift a 2D Grid/Matrix In-Place  How Martha Stewart Became One Of The Best Bloggers On The Web  Social Media and Dating Apps: How They’re Changing Love 
评论列表
添加评论