剑指Offer——网易笔试之解救小易
2016-09-13 11:23
246 查看
知识要点
首先介绍一下曼哈顿,曼哈顿是一个极为繁华的街区,高楼林立,街道纵横,从A地点到达B地点没有直线路径,必须绕道,而且至少要经C地点,走AC和 CB才能到达,由于街道很规则,ACB就像一个直角3角形,AB是斜边,AC和CB是直角边,根据毕达格拉斯(勾股)定理,或者向量理论,都可以知道用AC和CB可以表达AB的长度。在早期的计算机图形学中,屏幕是由像素构成,是整数,点的坐标也一般是整数,原因是浮点运算很昂贵,很慢而且有误差,如果直接使用AB的距离,则必须要进行浮点运算,如果使用AC和CB,则只要计算加减法即可,这就大大提高了运算速度,而且不管累计运算多少次,都不会有误差。因此,计算机图形学就借用曼哈顿来命名这一表示方法。
曼哈顿距离:两点在南北方向上的距离加上在东西方向上的距离,即d(i,j)=|xi-xj|+|yi-yj|。对于一个具有正南正北、正东正西方向规则布局的城镇街道,从一点到达另一点的距离正是在南北方向上旅行的距离加上在东西方向上旅行的距离。
通过分析下面的题目,可知其可以应用曼哈顿距离计算至(1,1)点最近的点,依据曼哈顿距离即可计算出结果值。
代码如下:
/** * 解救小易 有一片1000*1000的草地,小易初始站在(1,1)(最左上角的位置)。小易在每一秒会横向或者纵向移动到相邻的草地上吃草(小易不会走出边界)。 大反派超超想去捕捉可爱的小易,他手里有n个陷阱。第i个陷阱被安置在横坐标为xi ,纵坐标为yi 的位置上,小易一旦走入一个陷阱,将会被超超捕捉。 你为了去解救小易,需要知道小易最少多少秒可能会走入一个陷阱,从而提前解救小易。 输入描述: 第一行为一个整数n(n ≤ 1000),表示超超一共拥有n个陷阱。 第二行有n个整数xi,表示第i个陷阱的横坐标 第三行有n个整数yi,表示第i个陷阱的纵坐标 保证坐标都在草地范围内。 输出描述: 输出一个整数,表示小易最少可能多少秒就落入超超的陷阱 输入例子: 3 4 6 8 1 2 1 输出例子: 3 思路: 计算最短距离 */ #include <iostream> #include <vector> using namespace std; int main(void){ int trapNum; while (cin >> trapNum){ if (trapNum <= 0 || trapNum > 1000) continue; // vector<int> dx; // vector<int> dy; vector<int> dx(trapNum);//指定容器大小,否则会溢出 vector<int> dy(trapNum); for (int i = 0; i < trapNum; i++) cin >> dx[i]; for (int i = 0; i < trapNum; i++) cin >> dy[i]; int result = 99999; //枚举一遍维护最小值 for (int i = 0; i < trapNum; i++){ int length = (dx[i] - 1) + (dy[i] - 1); if (length < result) result = length; } cout << result << endl; } return 0; }
相关文章推荐
- javascript数组遍历的方法实例分析
- CSS:去除点击链接和按钮时出现的虚线框
- Jsp 重定向以及session 在登录中的应用
- 1分钟看完 jQuery UI
- bootstrap导航插件wizard--源码demo
- leetcode之24. Swap Nodes in Pairs(C++实现&链表实现和整体测试)
- Jsp中自定义标签
- CSS实现单行、多行文本溢出显示省略号(…)
- 最快让你上手ReactiveCocoa之基础篇(转)
- json编解码
- 当下最流行的点击效果插件 waves.js
- json编解码
- ExtJs6.0.0随笔
- js && jquery速查手册
- jquery判断checkbox是否选中及改变checkbox状态
- 三种纯CSS实现三角形的方法
- HTML5你必须知道的28个新特性
- Caffe学习之一:Caffe的配置和编译
- HTML块级元素和行级元素
- [React Native]去掉WebStorm中黄色警告