https://leetcode.com/problems/maximal-square/
        var maximalSquare = function(matrix) {
     
            if(!matrix || !matrix.length) return 0;
            
            var mLength = matrix.length;
            
            var nLength = matrix[0].length;
            
            var i, j, r = 0;
            
            for(i = 0; i < mLength; i++){
                for(j = 0; j < nLength; j++){
                    if(matrix[i][j] == '0'){
                        continue;
                    }else if(i === 0 || j === 0){
                        r = Math.max(r, matrix[i][j]);
                        continue;
                    }
                    matrix[i][j] = Math.min(matrix[i-1][j-1], matrix[i-1][j], matrix[i][j-1]) + 1;
                    r = Math.max(r, matrix[i][j]);
                }
            }
            return r * r;
        };
        

https://leetcode.com/problems/search-a-2d-matrix-ii/
        var searchMatrix = function(matrix, target) {
            var m = 0;
            var n = matrix[0].length-1;
            
            while(m<=matrix.length-1 && n>=0){
                if(matrix[m][n] == target){
                    return true;
                }else if(matrix[m][n] > target){
                    n--;
                }else{
                    m++;
                }
            }
            return false;
        };
        ---------------------------------------------------------------------------------------
        var searchMatrix = function(matrix, target) {
            var m, n;
            var mLength = matrix.length, nLength = matrix[0].length;
            
            if(mLength === 0 && nLength === 0 ) return false;
            
            for(n = nLength - 1;n >= 0; n--){
                for(m = mLength - 1;m >= 0; m--){
                    if(target === matrix[m][n]) return true;
                }
            }
            return false;
        };
        

https://leetcode.com/problems/rank-scores/
        SELECT S.Score, S.rank
        FROM
            ( SELECT @nowRank := 0, @nowScore := -1) r,
            ( SELECT
                    S.Score,
                    @nowRank := IF(@nowScore = S.Score, @nowRank, @nowRank + 1) AS rank,
                    @nowScore := S.Score
                FROM
                    (
                        SELECT 
                            S.Score
                        FROM
                            Scores S
                        ORDER BY S.Score DESC
                    ) S
            ) S
        

https://leetcode.com/problems/second-highest-salary/
        SELECT MAX(E.Salary)
        FROM
            Employee E
            INNER JOIN ( SELECT MAX(Salary) Salary FROM Employee ) M ON M.Salary > E.Salary
        ---------------------------------------------------------------------------------------
        SELECT MAX(t.Salary)
        FROM
        (
          SELECT DISTINCT E.Salary
          FROM Employee E
          ORDER BY E.Salary DESC 
          LIMIT 1,1
        ) t
        

https://leetcode.com/problems/edit-distance/
        var minDistance = function(word1, word2) {
            var word1Length = word1.length;
            var word2Length = word2.length;
            
            if(word1Length < 1 || word2Length < 1) return Math.max(word1Length, word2Length);
            
            var distance = [], i, j, iWord, d;
            
            for(i = 0; i <= word1Length; i++){
                if(!distance[i]) distance[i] = [];
                distance[i][0] = i;
            }
            
            for(j = 0; j <= word2Length; j++) distance[0][j] = j;
            
            for(i = 0; i < word1Length; i++){
                iWord = word1[i];
                for(j = 0; j < word2Length; j++){
                    d = distance[i][j];
                    if(iWord == word2[j]){
                        distance[i+1][j+1] = d;
                    }else{
                        distance[i+1][j+1] = Math.min( Math.min(distance[i+1][j]+1, distance[i][j+1]+1), d+1);
                    }
                }
            }
            return distance[word1Length][word2Length];
        };
        

https://leetcode.com/problems/department-top-three-salaries/
        SELECT E.Department, E.Employee, E.Salary
        FROM
            ( SELECT @num := 0, @type := '', @money=0) r,
            ( SELECT
                    E.Department,
                    E.Employee,
                    E.Salary,
                    @num := IF(@type = E.DepartmentId, IF(@money=E.Salary, @num, @num+ 1), 1) AS row_number,
                    @type := E.DepartmentId,
                    @money := E.Salary
                FROM
                    (
                        SELECT 
                            E.Name AS Employee, 
                            E.Salary, 
                            E.DepartmentId, 
                            D.Name AS Department
                        FROM
                            Employee E
                            INNER JOIN Department D ON D.Id=E.DepartmentId
                        ORDER BY E.DepartmentId, E.salary DESC
                    ) E
            ) E
        WHERE E.row_number <= 3