| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 牛客真题编程——day13 -> 正文阅读 |
|
[数据结构与算法]牛客真题编程——day13 |
编程环境:c++ 1、搭积木 描述 小明有一袋子长方形的积木,如果一个积木A的长和宽都不大于另外一个积木B的长和宽,则积木A可以搭在积木B的上面。好奇的小明特别想知道这一袋子积木最多可以搭多少层,你能帮他想想办法吗? 定义每一个长方形的长 L 和宽 W ,袋子里面长方形的个数为 n 。 假如袋子里共有5个积木分别为 (2, 2), (2, 4), (3, 3), (2, 5), (4, 5), 则不难判断这些积木最多可以搭成4层, 因为(2, 2) < (2, 4) < (2, 5) < (4, 5)。 算法思想: 题目要求积木上层的长宽都要小于下层,求最长的层数。首先我们按照长度优先对所有的长方形积木升序排列,然后再遍历获取到排序后所有的宽,得到一个新的数组。因为题目要求的时间比较极限,所以这里选择时间复杂度最优的二分法进行排序,得到一个宽升序的优先级子序列,打印输出子序列大小即为最长的层数。 代码部分实现: 二分,len为子序列长度 2、怪数 描述: 小M突然对怪数产生了兴趣。假设一个数n,如果[n/1]+[n/2]+...+[n/k](k为趋近于正无穷的正整数)为一个偶数,那么这个数是一个怪数,现在给定一个区间[a,b],求[a,b]之间有多少怪数。 [x]表示不大于x的最大整数。 算法思想: ??? 用数学思路解决问题:根据100以内穷举的怪数数据不难发现,,每行中当i为偶数时,位于区间[i2,(i+1)2)]内数全为满足要求的怪数。所以根据题目给出的范围ab,首先遍历到最小的i满足i^2>=a,对ab中间的数进行判断,当i-1为偶数时,将范围内的怪数加上;否则,i++向后延申,直到i^2超出b范围。再进行最后一次判断后,将最终结果打印输出即可。 ? 代码部分实现: 3、连续子数组最大和 描述 输入一个整形数组(可能有正数和负数),求数组中连续子数组(最少有一个元素)的最大和。要求时间复杂度为O(n)。 算法思想:舍弃之前和<0的部分和,求得遍历完成后的最大子数组和。 部分代码实现: ? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 18:32:11- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |