LeetCode网页瀑布流(Java)第308周赛第一题

网页布局中有一种瀑布流布局方式,表现为参差不齐的多栏布局。随着页面滚动条向下,还会不断加载数据块并附加至当前尾部。页面在加载时遵循以下规则:

  • 当有数据块需要加载时,优先加载在高度最短的那一列;
  • 若存在多个高度相同且最短的情况,则加载在其中最靠左的那一列

已知当前网页共分割为 num 列,该网页有若干数据块可以加载,block[i] 表示第 i 个数据块的高度。当页面按顺序加载完所有的数据块后,请返回高度最大的那一列的高度。

 

 不难得出在block数组中始终只保留num个数,而从num之后的数每次加在前num个数中最小的一个。(如果是都一样大小,则加在最左边,但是这条消息在代码中只要从左向右遍历即可)

保留num个数,并且找到最小的数之后要从该数的基础上加上新的数,并且还在该索引中。所以既需要索引也需要值,所以在此题中我采用了HashMap

class Solution {
    public int getLengthOfWaterfallFlow(int num, int[] block) {
        int max= Integer.MIN_VALUE;
        if(block.length<num){
             for(int i=0;i<block.length;i++){
                 max=max>block[i]?max:block[i];
            }
        }else {HashMap<Integer,Integer> hashmap=new HashMap<>();
            for(int i=0;i<num;i++){
                hashmap.put(i,block[i]);
            }
            for(int i=num;i< block.length;i++){
                int min=hash_min(hashmap);
                int key=find_key(hashmap,min);
                min+=block[i];
                hashmap.put(key,min);
            }

            for(Integer value:hashmap.values()){
                max=max>value?max:value;
            }
        }
        return max;
    }
    public int hash_min(HashMap<Integer,Integer> hashMap){
        int min=Integer.MAX_VALUE;
        for(Integer value:hashMap.values()){
            min=min<value?min:value;
        }
        return min;
    }
    public int find_key(HashMap<Integer,Integer> hashMap,int value){
        int ans=-1;
        for(Map.Entry<Integer,Integer> entry:hashMap.entrySet()){
            if(value== entry.getValue()){
                ans= entry.getKey();
                break;
            }
        }
        return ans;
    }
}

第一次提交中我并没有采取到if-else,当时并没有考虑如果num比block数组长度大如何处理,当考虑进去即比较block数组中取最大值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值