首页 > 编程语言 >程序员面试金典---17

程序员面试金典---17

时间:2023-04-27 22:11:21浏览次数:31  
标签:box 盒子 17 金典 mid --- max return dp

堆箱子

思路:

  • 首先进行排序,规则为:

    • 如果宽度不相同,按照宽度从小到大排序。
    • 如果宽度相同,深度不相同,按照深度从大到小排序。
    • 宽度和深度都相同,高度从大到小排序。
  • 采用动态规划进行求解:

    计算以当前盒子为顶部盒子时的最大堆叠高度。

    从前往后遍历每一个盒子,对于每一个盒子i,遍历i之后的所有盒子j,如果盒子能够放在盒子i上方,则更新盒子j的堆叠高度为dp[j]=max(dp[j],dp[i] + box[j][2])。最终返回max

    代码:

    /**
     * @param {number[][]} box
     * @return {number}
     */
    var pileBox = function(box) {
        // 排序
        box.sort((a, b) => a[0] === b[0] ? a[1] === b[1] ? b[2] - a[2] : b[1] - a[1] : a[0] - b[0])
        const len = box.length
        // 初始化
        dp = Array.from({length:len},(_, i) => box[i][2])
    
        let max = 1
        // 循环,每个盒子依次在底
        for(let i = 0;i < len; i++){
            max = Math.max(max, dp[i])
            for(let j = i + 1;j < len; j++){
            	// 更新状态
                if(box[j][1] > box[i][1] && box[j][2] > box[i][2]){
                    dp[j] = Math.max(dp[j], dp[i] + box[j][2])
                    max = Math.max(max, dp[i])
                }
            }
        }
        return max
    };
    

稀疏数组搜索

思路:

二分加特殊的空字符

/**
 * @param {string[]} words
 * @param {string} s
 * @return {number}
 */
var findString = function(words, s) {
    let left = 0
    let right = words.length - 1
    while(left <= right){
        let midTemp = mid = (left + right) >>1

        // 处理空 如果是空,一直往后
        while(mid <= right && !words[mid]){
            mid++
        } 
        // 如果mid大于right,说明超出边界
        if(mid > right){
            right = midTemp - 1 // 压缩有边界至midTemp
            continue
        }

        if(words[mid] > s){
            right = mid - 1
        }
        else if(words[mid] < s){
            left = mid + 1
        }else{
            return mid
        }

    }
    return -1
};

标签:box,盒子,17,金典,mid,---,max,return,dp
From: https://www.cnblogs.com/dgqp/p/17360383.html

相关文章

  • Java-Day-16( 常用类 )
    Java-Day-16常用类包装类(Wrapper)针对八种基本数据类型定义相应的引用类型——包装类,有了类的特点,就可以调用类中的方法基本数据类型包装类booleanBooleancharCharacterbyteByteshortShortintIntegerlongLongfloatFloatdouble......
  • #yyds干货盘点# LeetCode程序员面试金典:外观数列
    题目:给定一个正整数n,输出外观数列的第n项。「外观数列」是一个整数序列,从数字1开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1)="1"countAndSay(n)是对countAndSay(n-1)的描述,然后转换成另一个数字字符串。前五项......
  • vue2源码-十六、异步组件
    异步组件Vue中异步组件的写法有很多,主要用作大的组件异步加载的markdown组件editor组件。就是先渲染一个注释标签,等组件加载完毕,最后再重新渲染forceUpdate(图片懒加载)使用异步组件会配合webpack原理:异步组件默认不会调用Vue.extend()方法所有Ctor上没有cid属性,没有cid属......
  • SYN5202-0277同期装置 ABB
    ① ⑧ 0 ③0 ① ⑦  77 ⑤ 9 同期装置SYN5202-0271  SYN5202-0277  SYN5202A  SYN5201A-ZV2773BHB006714R0277  SYN5201A-Z V2173BHB006714R0217 SYN5200a-Z,V217SYNCHROTACT53BHB006713R0217 器和具有自动转换功能的电源监控。伍德......
  • js -- 跨域问题
    js--跨域问题  前言出于浏览器同源策略的影响,浏览器会阻止一个域的js脚本和另一个域的内容进行交互,因此产生了跨域问题,该问题也经常在面试和开发中遇到,本文来总结一下相关知识点。正文1、什么是同源策略因为浏览器出于安全考虑,存在同源策略,就是说如果......
  • 学习-18
    1.jenkins自动拉取git仓库的代码(1)安装gitee插件到jenkins(2)修改任务项gitee默认不允许内网触发。----必须要配置内网穿透修改gitee远程仓库测试:修改idea中的代码并提交到gitee上,会自动触发jenkins---拉取--编译---打包2.完成自动化部署思考:我们的项目和jen......
  • 文件上传下载-SpringMvc
    进行文件上传时,表单需要做的准备:1.请求方式为POST:<formaction=”uploadServlet”method=”post”/>2.使用file的表单域:<inputtype=”file”name=”file”/>3.使用multipart/form-data的请求编码方式:<formaction=”uploadServlet”type=”file”name=”file”metho......
  • 2022-04-27:用go语言重写ffmpeg的remuxing.c示例。
    2022-04-27:用go语言重写ffmpeg的remuxing.c示例。答案2022-04-27:ffmpeg的remuxing.c是一个用于将多媒体文件从一种容器格式转换为另一种容器格式的命令行工具。它可以将音频、视频和字幕等元素从源文件中提取出来,并按照用户指定的方式重新封装到目标文件中。在本篇文章中,我将对ffmp......
  • CS50363内置MOS可升压16V,高效率升压DC-DC转换器
    CS50363E是一款采用CMOS工艺升压型开关稳压器,其主要包括一个参考电压源,一个振荡电路,一个误差放大器,一个相位补偿电路,通过PWM/PFM切换控制电路。CS50363E内置MOS的设计,只需极简的外围电路,可以最大限度的保证电源模块的可靠性以及避免电源模块设计的复杂化。CS50363E最高可提供16V恒......
  • css--实现一个文字少时居中,文字换行时居左的样式
    css--实现一个文字少时居中,文字换行时居左的样式 前言最近群里的小伙伴去面试,遇到这样一个问题,面试官问:"用css对一行文字进行布局,当文字不够换行的时候,这行文字要居中显示,当文字出现换行的时候,这行文字要靠左显示。",遇到这样的需求一下束手无策,后来查下资料,哦,原来这......