首页 > 其他分享 >面试经典 150 题 (十七)

面试经典 150 题 (十七)

时间:2024-02-12 14:33:05浏览次数:23  
标签:150 十七 int height 面试 flag trap entry getKey

思路:1、先将下标和高度放入HashMap中,防止排序之后破坏高度和下标的映射关系
2、将HashMap转成Map.Entry的列表并且重写Collections.sort中的sort方法实现将数组按照键值对的值从大到小排序。
3、设置flag数组用于标识那些高度区间没有被访问过
4、从排序好的数组中取出高度,再向两侧遍历。

class Solution {
    public int trap(int[] height) {
        int trap = 0;
        HashMap<Integer, Integer> mapping = new HashMap<Integer, Integer>();
        int length = height.length;
        boolean[] flag = new boolean[length];
        for (int i = 0; i < length; i++){
            flag[i] = false;
            //将高度和下标存进map中
            mapping.put(i, height[i]);
        }
        List<Map.Entry<Integer, Integer>> entryList = new ArrayList<Map.Entry<Integer, Integer>>(mapping.entrySet());
        Collections.sort(entryList, new Comparator<Map.Entry<Integer, Integer>>(){
            @Override
            public int compare(Map.Entry<Integer, Integer> entry1, Map.Entry<Integer, Integer> entry2){
                return entry2.getValue().compareTo(entry1.getValue());
            }
        });
        int i = 0;
        for (Map.Entry<Integer, Integer> entry : entryList){
            flag[entry.getKey()] = true;
            //向左搜寻
            i = entry.getKey() - 1;
            while(i >= 0 && flag[i] == false){
                i--;
            }
            if (i >= 0 && flag[i] == true){
                for (int j = i + 1; j < entry.getKey(); j++){
                    trap = trap +  height[entry.getKey()] - height[j];
                    flag[j] = true;
                }
            }
            //向右搜寻
            i = entry.getKey() + 1;
            while(i <= length - 1 && flag[i] == false){
                i++;
            }
            if (i <= length - 1 && flag[i] == true){
                for (int j = i - 1; j > entry.getKey(); j--){
                    trap += height[entry.getKey()] - height[j];
                    flag[j] = true;
                }
            }
        }
        return trap;
    }
}

标签:150,十七,int,height,面试,flag,trap,entry,getKey
From: https://www.cnblogs.com/poteitoutou/p/18012491

相关文章

  • 十七、Cookie和Session
    1、Cookie:保存在客户端浏览器文件上的键值对当浏览器访问某个网站时,浏览器在COOKIE中拿出属于该网站的键值对来访问这个网站。因此这些键值对是按域名来保存在本地文件。一、cookie和session的介绍1、cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要......
  • [职场] 面试专业测试考什么
    面试专业素质测试是什么职业素质是每个人生存发展的必要条件,对于大学生来说良好的职业素质是解决自身就业问题的根本保证。就业是民生之本,扩大就业是摆在各级党委和政府而前特别重要的现实性问题。以下是小编为您整理的面试专业素质测试是什么的相关内容。素质测试主要是......
  • 面试经典 150 题 (十六)
    classSolution{publicintcandy(int[]ratings){//从左侧和右侧分别扫描一遍,计算当前孩子是否是比两侧的孩子优秀intlength=ratings.length;int[]candyNum=newint[length];for(inti=0;i<length;i++){c......
  • 面试经典 150 题 (十五)
    画折线图,亏空最严重的一步要最后一步做,等着前面的增益补(总体收益大于等于0的情况),因为本题有解就唯一,当总gas大于总cost一定有解classSolution{publicintcanCompleteCircuit(int[]gas,int[]cost){intlen=gas.length;intspare=0;......
  • 【视频】互联网Java工程师面试突击训练(三季)
    视频下载地址 https://pan.quark.cn/s/c17e3da33a76目录一、Java集合包HashMap的底层数据结构是什么?JDK1.8中对hash算法和寻址算法是如何优化的?03.HashMap是如何解决hash碰撞问题的?04.说说HashMap是如何进行扩容的?05.ArrayList,LinkedList,TreeMap,LinkedHashMap,HashSet等底层......
  • 面试经典 150 题 (十四)
    就用除法classSolution{publicint[]productExceptSelf(int[]nums){int[]answer=newint[nums.length];intsum=1;intzeroNum=0;for(inti=0;i<nums.length;i++){if(nums[i]==0)zeroNum++;......
  • 面试经典 150 题 (十三)
    先来个大的classRandomizedSet{privateHashSet<Integer>hashSet;publicRandomizedSet(){hashSet=newHashSet<Integer>();}publicbooleaninsert(intval){if(hashSet.contains(val)){returnfa......
  • 【面试突击】网络通信面试实战
    网络通信面试实战Socket工作原理Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,其实就是一个门面模式,将底层复杂的通信操作给封装起来对外提供接口。简单来说就是Socket把TPC/IP协议给封装了起来,我们的程序进行网络通信都是通过Socket来完成的!也就是说当......
  • 面试经典 150 题 (十二)
    排序,i代表至少发表的论文数量时间复杂度:O(nlogn)空间复杂度:O(logn)classSolution{publicinthIndex(int[]citations){//01356intlength=citations.length;Arrays.sort(citations);inth=0;for(inti=1......
  • 解锁阿里巴巴面试题:创建线程的几种方式?
    大家好,我是小米!今天我们来聊一个热门话题——阿里巴巴面试题:创建线程的几种方式。在技术的海洋中,线程是我们编程航程中的一艘不可或缺的船,驶向程序的未知领域。那么,究竟有哪些方式可以创建线程呢?让我们一起揭开这个技术的神秘面纱!实现Runnable接口首先,我们来说说最常见、最推荐的方......