《Cracking the Coding Interview》——第11章:排序和搜索——题目7

2014-03-21 22:05

题目:给你N个盒子堆成一座塔,要求下面盒子的长和宽都要严格大于上面的。问最多能堆多少个盒子?

解法1:O(n^2)的动态规划解决。其实是最长递增子序列问题,所以也可以用O(n * log(n))的优化算法。

代码:

// 11.7 n boxes are to stack up to a tower. Every box must be strictly smaller in width and height than the one right below it.
// How many boxes at most can you stack up?
#include <algorithm>
#include <cstdio>
#include <vector>
using namespace std;struct Box {int x;int y;Box(int _x = 0, int _y = 0): x(_x), y(_y) {};bool operator < (const Box &other) {if (x != other.x) {return x < other.x;} else {return y < other.y;}};
};int main()
{vector<Box> v;vector<int> dp;int n;int i, j;int res;while (scanf("%d", &n) == 1 && n > 0) {v.resize(n);for (i = 0; i < n; ++i) {scanf("%d%d", &v[i].x, &v[i].y);}sort(v.begin(), v.end());dp.resize(n);res = 0;for (i = 0; i < n; ++i) {dp[i] = 1;for (j = 0; j < i; ++j) {if (v[j].x < v[i].x && v[j].y < v[i].y) {dp[i] = dp[j] + 1 > dp[i] ? dp[j] + 1 : dp[i];}}res = dp[i] > res ? dp[i] : res;}printf("%d\n", res);v.clear();dp.clear();}return 0;
}

解法2:用二分查找优化后的代码,其中使用了STL算法库提供的lower_bound(),二分也不总是要手写的。

代码:

 1 // 11.7 n boxes are to stack up to a tower. Every box must be strictly smaller in width and height than the one right below it.
 2 // How many boxes at most can you stack up?
 3 #include <algorithm>
 4 #include <cstdio>
 5 #include <vector>
 6 using namespace std;
 7 
 8 struct Box {
 9     int x;
10     int y;
11     Box(int _x = 0, int _y = 0): x(_x), y(_y) {};
12     
13     bool operator < (const Box &other) {
14         if (x != other.x) {
15             return x < other.x;
16         } else {
17             return y < other.y;
18         }
19     };
20 };
21 
22 int main()
23 {
24     vector<Box> v;
25     vector<int> dp;
26     vector<int>::iterator it;
27     int n;
28     int i;
29     
30     while (scanf("%d", &n) == 1 && n > 0) {
31         v.resize(n);
32         for (i = 0; i < n; ++i) {
33             scanf("%d%d", &v[i].x, &v[i].y);
34         }
35         sort(v.begin(), v.end());
36         dp.push_back(v[0].y);
37         for (i = 1; i < n; ++i) {
38             if (v[i].y > dp[dp.size() - 1]) {
39                 dp.push_back(v[i].y);
40             } else {
41                 it = lower_bound(dp.begin(), dp.end(), v[i].y);
42                 *it = v[i].y;
43             }
44         }
45         printf("%d\n", (int)dp.size());
46         
47         v.clear();
48         dp.clear();
49     }
50     
51     return 0;
52 }

 

转载于:https://www.cnblogs.com/zhuli19901106/p/3616836.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493368.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

世界上手速最快的仿人机器人诞生在韩国!魔术师也要失业了!

来源&#xff1a;机器人创新生态虽然夏天都过去了这么久&#xff0c;但谁能想到小编竟然还能深受蚊子的骚扰~~这只蚊子真的是很强啊&#xff0c;为了消灭这些蚊子&#xff0c;小编特意进口了一款专用的“拍蚊子机器人”经过小编亲自测试&#xff0c;这款机器人拍蚊子效果非常不…

分解质因数

----------------------------------------------------------- 题目&#xff1a;编程将一个正整数分解质因数。例如&#xff1a;输入90,打印出902*3*3*5。 -------------------------------------------------------------------- while (n%i 0){} 目的是为了使质因数 i 全部…

从人工智能到物联网……这些公司如何改变农业与食品工业

来源&#xff1a;资本实验室目前&#xff0c;全球农业与食品工业产值约7.8万亿美元&#xff0c;占全球15%以上的GDP&#xff0c;并且雇佣了超过40%的人口。然而&#xff0c;农业与食品产业正面临着一些新的问题亟待解决&#xff0c;其中包括&#xff1a;消费者偏好和需求存在多…

pandas分析各国家交易情况

数据集来源&#xff1a; https://archive.ics.uci.edu/ml/datasets/Online%20Retail #coding:utf-8import pandas as pd import os import seaborn as sns import matplotlib.pyplot as pltRAW_DATA_FILE ./data/online_retail.xlsx CLN_DATA_FILE ./output/cln_online_ret…

Gartner 2019基础设施和运维十大趋势:Serverless、边缘计算、SaaS 变复杂等

来源&#xff1a;机器之心Gartner公司强调了基础设施和运维(I&O)领导者在2019年必须开始准备迎接的几大技术和趋势&#xff0c;以便支持数字化基础设施。Gartner的分析师们在Gartner IT基础设施、运维和云战略大会上介绍了研究结果。Gartner的高级研究主任罗斯•温瑟(Ross …

天池入门赛--蒸汽预测

首先查看数据 #coding:utf-8 """ Created on Wen Jan 9 2019author: fzh """ import warnings warnings.filterwarnings("ignore") import matplotlib.pyplot as plt plt.rcParams.update({figure.max_open_warning: 0}) import sea…

脑科学与AI要想融合发展,目前来说仍很困难

来源&#xff1a;人机与认知实验室摘要&#xff1a;AI要想进一步发展&#xff0c;需要从脑科学得到启发。业界普遍认为&#xff0c;AI未来的演进方向就是计算智能、感知智能和认知智能&#xff0c;在此期间&#xff0c;真正需要突破的就是让计算机理解、思考和进行自我学习&…

javascript中setInterval,setTimeout的区别跟用法

setInterval() 方法可按照指定的周期&#xff08;以毫秒计&#xff09;来调用函数或计算表达式。setInterval() 方法会不停地调用函数&#xff0c;直到 clearInterval() 被调用或窗口被关闭。setTimeout只运行一次&#xff0c;也就是说设定的时间到后就触发运行指定代码&#x…

张首晟生前重磅演讲:要用第一性原理的思维方式来理解今天的世界

来源&#xff1a;经济学家圈摘要&#xff1a;本文为华裔科学家张首晟今年3月25日在IT领袖峰会上的演讲以下是张首晟教授演讲全文&#xff1a;谢谢大家的关注&#xff0c;在下午来听我的分享&#xff0c;今天大会是IT领袖峰会&#xff0c;所以我想讲的三个题目是「量子计算」、「…

Windows live writer插入代码图片Test

/*** 验证字符串text是不是ip地址&#xff0c;是返回true&#xff0c;否则返回false* param text* return*/ public static boolean isIPAddress(String text){StringBuilder regex new StringBuilder("^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\."); regex.a…

knn用于水果数据集分类

数据集地址&#xff1a;https://download.csdn.net/download/fanzonghao/10940440 knn算法流程&#xff1a; 若k取无穷大&#xff0c;那么测试数据就取决于每一类的占比&#xff0c;归属于占比最大的那一类。 首先观察数据集&#xff0c;利用mass&#xff0c;height&#xff…

人脸识别技术大起底,你了解多少?

来源&#xff1a;与非网这两年&#xff0c;随着科技的迅速发展&#xff0c;人脸识别已经逐渐成为了新时期生物识别技术应用的重要领域&#xff0c;忘记密码了?没事儿&#xff0c;咱还可以“刷脸”!今天&#xff0c;小编将带大家了解一下最新的人脸识别技术&#xff0c;看看这项…

深度学习时出现的一些安装问题+ubuntu apt的一些问题+github release文件加速

一&#xff0e;python用于深度学习时出现的一些安装问题 问题&#xff1a;raise ImportError, str(msg) , please install the python-tk package 解决&#xff1a;apt-get update apt-get install python-tk 问题&#xff1a;pip install pycocotools出现错误 pip instal…

Struts+Tomcat搭建

StrutsTomcat搭建tomcat使用(服务器端开发): 如果要安装Tomcat需要进行的配置&#xff1a;tomcat安装在c: \Tomcat CATALINA_HOME变量值设为: H:\Program Files (x86)\tomcat\apache-tomcat-7.0.27 CATALINA_BASE变量值设为: H:\Program Files (x86)\tomcat\apache-tomcat-…

AlphaZero登上《科学》封面:一个算法“通杀”三大棋,完整论文首次发布

来源&#xff1a;量子位作者&#xff1a;乾明 一璞 栗子 晓查不仅会下围棋&#xff0c;还自学成才横扫国际象棋和日本将棋的DeepMind AlphaZero&#xff0c;登上了最新一期《科学》杂志封面。同时&#xff0c;这也是经过完整同行审议的AlphaZero论文&#xff0c;首次公开发表。…

自编码器及相关变种算法简介

本文对自编码器&#xff08;Auto-Encoder&#xff09;算法及其相关变种算法进行简要介绍&#xff0c;其中包括 Regularized Auto-Encoder、Sparse Auto-Encoder、Denoising Auto-Encoder 和 Contractive Auto-Encoder&#xff0c;重点讨论各算法的基本思想及优化时所需目标函数…

pytorch数据预处理

一&#xff0c;数据加载 数据路径&#xff1a; #coding:utf-8 import torch as t from torch.utils import data import os from PIL import Image import numpy as npclass DogCat(data.Dataset):def __init__(self, path):imgs os.listdir(path)# 所有图片的绝对路径# 这里…

太阳系“首个星际访客”未被探测到人工信号

来源&#xff1a;新华网去年发现的雪茄形天体被认为是太阳系“首个星际访客”&#xff0c;其真实身份一直受到全球天文学家高度关注。美国搜索外星文明研究所&#xff08;SETI&#xff09;最新研究称&#xff0c;这个天体没有被探测出“人工”的无线电信号&#xff0c;但这不能…

将XML解析成DOM文档

在支持html5的浏览其中&#xff0c;可以使用标准解析器DOMParser对象进行解析html或者xml等字符串 var data <div></div>; var tmp new DOMParser(); xml tmp.parseFromString(data, text/html);//解析xml时为text/xml 这时xml就是需要的dom文档了&#xff0c;也…

协方差理解,PCA以及奇异值分解(SVD)

一.PCA PCA通过正交变换将一组由线性相关变量表示的数据转换为少数几个由线性无关变量表示的数据&#xff0c;这几个线性无关的变量就是主成分。PCA通过将高维数据维度减少到少数几个维度&#xff0c;本质上属于一种数据降维方法&#xff0c;也可以用来探索数据的内在结构。 …