有序矩阵中第K小的元素

    技术2022-07-16  79

    题目:力扣

    解题思路:

    先变成一维数组,再利用快速排序,找到第K小的。没有利用原二维数组有序的特性。时间复杂度为,空间复杂度

    其实这道题当时一看就考虑能不能用二分查找,因为它从左上到右下是有序的,但想了一会还是没想到解决方案,后面看了题解,是利用一条分割线,具体可以看题解

    class Solution { public int kthSmallest(int[][] matrix, int k) { int row = matrix.length; int col = matrix[0].length; int[] arr = new int[row*col]; int cnt = 0; for(int i = 0; i < row; i++){ for(int j = 0; j < col; j++){ arr[cnt++]=matrix[i][j]; } } return quickSort(arr, 0, arr.length-1, k-1); } public int quickSort(int[] arr, int start, int end, int k){ if(start == end){ return arr[start]; } int p = partition(arr, start, end); if(p == k){ return arr[p]; } else if(p <k){ return quickSort(arr, p+1, end, k); } else{ return quickSort(arr, start, p-1, k); } } public int partition(int[] arr, int start, int end){ int base = arr[start]; int l = start, r= end; while(l < r){ while(l < r && arr[r] >= base){ r--; } arr[l] = arr[r]; while(l < r && arr[l] < base){ l++; } arr[r] = arr[l]; } arr[l] = base; return l; } }

     

    Processed: 0.015, SQL: 9