<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ?LeetCode刷題實(shí)戰(zhàn)363:矩形區(qū)域不超過 K 的最大數(shù)值和

          共 5693字,需瀏覽 12分鐘

           ·

          2021-08-29 02:17

          算法的重要性,我就不多說了吧,想去大廠,就必須要經(jīng)過基礎(chǔ)知識(shí)和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個(gè)公眾號(hào)后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

          今天和大家聊的問題叫做 矩形區(qū)域不超過 K 的最大數(shù)值和,我們先來看題面:
          https://leetcode-cn.com/problems/max-sum-of-rectangle-no-larger-than-k/

          Given an m x n matrix matrix and an integer k, return the max sum of a rectangle in the matrix such that its sum is no larger than k.


          It is guaranteed that there will be a rectangle with a sum no larger than k.


          給你一個(gè) m x n 的矩陣 matrix 和一個(gè)整數(shù) k ,找出并返回矩陣內(nèi)部矩形區(qū)域的不超過 k 的最大數(shù)值和。
          題目數(shù)據(jù)保證總會(huì)存在一個(gè)數(shù)值和不超過 k 的矩形區(qū)域。

          示例


          解題

          https://www.cnblogs.com/kexinxin/p/10235300.html
          主要思路:

          根據(jù)題意,尋找二維數(shù)組中所有可以組成的矩形中面積不超過k的最大值,所以必須要求出可能組成的矩形的面積并與k比較求出最終結(jié)果。這里為了最終不超時(shí),可以在一下方面進(jìn)行優(yōu)化:

          1.設(shè)置一個(gè)數(shù)組比較當(dāng)前列(或者行)下已經(jīng)掃描過的數(shù)的和。

          2.設(shè)置一個(gè)TreeMap,保存當(dāng)前矩陣長度下,已經(jīng)掃描過得矩形的面積。同時(shí),TreeMap中有快速查找元素的方法,可以快速查找所找的元素。


          imppublic class Solution {
              public static int maxSumSubmatrix(int[][] matrix, int target) {
                  int row = matrix.length;
                  if(row==0)
                      return 0;
                  int col = matrix[0].length;
                  if(col==0)
                      return 0;
                  int result = Integer.MIN_VALUE;
                  boolean key= col>row?false:true;
                  int m = Math.min(row,col);
                  int n = Math.max(row,col);
                  //一行一行的找
                  for(int i=0;i<m;i++){
                      //找從第i行開始一直到第0行這i+1行的可能組成的矩形長度
                      int[] array = new int[n];//這個(gè)矩陣為了保存每一列上第j行到第i行的和
                      for(int j=i;j>=0;j--){
                          TreeSet<Integer> set = new TreeSet<Integer>();//用來保存當(dāng)前高度下,長度為從0開始到k位置的矩形的結(jié)果。理解set的含義是解決此題的關(guān)鍵。
                          set.add(0);
                          int sum=0;
                          for(int k=0;k<n;k++){
                              if(key){
                                  array[k]+=matrix[k][j];
                              }
                              else{
                                  array[k]+=matrix[j][k];
                              }
                              sum+=array[k];
                              /* 因?yàn)橐獫M足 (sum-set中的元素)<=target,
                               * 而且sum-set中的元素的值要盡可能的大,
                               * 所以也就是再求小于等于sum-target中滿足條件的元素的最小的一個(gè)
                               * 正好TreeSet中提供了這個(gè)方法ceil(),可以很方便的找出這個(gè)元素
                               */

                              Integer integer = set.ceiling(sum-target);
                              if(integer!=null){
                                  result=Math.max(result, sum-integer);
                              }
                              set.add(sum);
                          }
                      }
                  }
                  return result;
              }
          }


          好了,今天的文章就到這里,如果覺得有所收獲,請順手點(diǎn)個(gè)在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動(dòng)力 。

          上期推文:

          LeetCode1-360題匯總,希望對你有點(diǎn)幫助!
          LeetCode刷題實(shí)戰(zhàn)361:轟炸敵人
          LeetCode刷題實(shí)戰(zhàn)362:敲擊計(jì)數(shù)器

          瀏覽 28
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久久精品欧美 | 伊人69| 色五月婷婷乱伦 | 亚洲欧美日韩另类 | 天堂网地址 |