#1502 : 最大子矩陣
最大子矩陣
時間限制:10000ms
單點時限:1000ms
記憶體限制:256MB
描述
給定一個NxM的矩陣A和一個整數K,小Hi希望你能求出其中最大(元素數目最多)的子矩陣,並且該子矩陣中所有元素的和不超過K。
輸入
第一行包含三個整數N、M和K。
以下N行每行包含M個整數,表示A。
對於40%的資料,1 <= N, M <= 10
對於100%的資料,1 <= N, M <= 250 1 <= K <= 2147483647 1 <= Aij <= 10000
輸出
滿足條件最大的子矩陣所包含的元素數目。如果沒有子矩陣滿足條件,輸出-1。
樣例輸入
3 3 9 1 2 3 2 3 4 3 4 5樣例輸出
4思路:
- 將以rows為起點的矩陣存入一維sum陣列中
- 之後使用尺取法遍歷sum陣列來找出滿足題目條件的元素數目
- 時間複雜度O(n^3)滿足題目條件
AcCode:
import java.util.Arrays; import java.util.Scanner; public class Main{ public static int getMax(int[][] nums,int k) { int maxNum = -1; int[] sum = new int[nums[0].length]; for (int rows = 0; rows < nums.length; rows++) { Arrays.fill(sum, 0); for (int i = rows; i < nums.length; i++) { for (int j = 0; j < nums[i].length; j++) { sum[j]+=nums[i][j]; } //尺取法 int begin = 0; int end = begin+1; int p = 0; int thisSum = sum[begin]; if(thisSum<k) { if((begin+1)*(i+1)>maxNum) { maxNum = (begin+1)*(i+1); } } while(begin<sum.length && end<sum.length) { if(end!=p) { thisSum+=sum[end]; } if(thisSum<k) { if((end-begin+1)*(i-rows+1)>maxNum) { maxNum = (end-begin+1)*(i-rows+1); //System.out.println(i+" "+begin+" "+end); } end++; }else { p = end; thisSum-=sum[begin]; if(begin==end) { p=-1; end = begin+1; continue; } begin++; } } } } return maxNum; } public static void main(String[] args) { Scanner in = new Scanner(System.in); int N = in.nextInt(); int M = in.nextInt(); int k = in.nextInt(); int[][] nums = new int[N][M]; for (int i = 0; i < nums.length; i++) { for (int j = 0; j < nums[i].length; j++) { nums[i][j] = in.nextInt(); } } System.out.println(getMax(nums, k)); } }
相關文章
- 第四章:多維陣列和矩陣 ------------- 4.4 找出邊界為1的最大子方陣陣列矩陣
- 巨大的矩陣(矩陣加速)矩陣
- 鄰接矩陣、度矩陣矩陣
- 奇異矩陣,非奇異矩陣,偽逆矩陣矩陣
- 資料結構:陣列,稀疏矩陣,矩陣的壓縮。應用:矩陣的轉置,矩陣相乘資料結構陣列矩陣
- 矩陣矩陣
- 求任意矩陣的伴隨矩陣矩陣
- 【DP】乘積最大子陣列陣列
- 53. 最大子陣列和陣列
- 廣州C++信奧老師解一本通題 1260:1282:最大子矩陣C++矩陣
- 矩陣和陣列矩陣陣列
- 理解矩陣矩陣
- 海浪矩陣矩陣
- 矩陣相乘矩陣
- 稀疏矩陣矩陣
- 螺旋矩陣矩陣
- 矩陣乘法矩陣
- 8.6 矩陣?矩陣
- 找矩陣矩陣
- 矩陣分解矩陣
- LeetCode53. 最大子陣列和LeetCode陣列
- [Python手撕]最大子陣列和Python陣列
- 快手矩陣管理平臺,矩陣管理有方法矩陣
- 求二維陣列中最大子陣列的和陣列
- 機器學習中的矩陣向量求導(五) 矩陣對矩陣的求導機器學習矩陣求導
- 矩陣:如何使用矩陣操作進行 PageRank 計算?矩陣
- 演算法學習:矩陣快速冪/矩陣加速演算法矩陣
- 最大子陣列問題(Maximum subarray problem)陣列
- 【力扣】最大子陣列和(貪心)力扣陣列
- 53_Maximum Subarray-最大子陣列陣列
- 【Leetcode】152.乘積最大子陣列LeetCode陣列
- LeetCode-152-乘積最大子陣列LeetCode陣列
- 高斯消除矩陣矩陣
- 矩陣求導矩陣求導
- 置換矩陣矩陣
- 視訊矩陣矩陣
- 矩陣樹定理矩陣
- leetcode:螺旋矩陣LeetCode矩陣