题目要求:

阿里笔试前的编程测验题,具体的题目要求很长,我已经给忘记了,大概意思就是,给你一个由0和1组成的矩阵,例如下面这个矩阵:

maps = [[1, 1, 0, 1, 1, 0, 0],[1, 0, 1, 1, 0, 0, 1],[1, 1, 1, 1, 1, 1, 1],[0, 1, 0, 1, 0, 1, 1],[1, 0, 1, 1, 1, 1, 0],[1, 1, 0, 1, 1, 0, 1]]

让你选择一个位置,这个位置必须是1,而且从这个位置出发(上,下,左,右)可以打到飞机数最多,1代表飞机,0代表陨石(不可到达),输出的结果要求是一个坐标信息,如果存在相同的结果,应该都输出出来。

题目分析:

很显然,使用暴力解法时间复杂度为O(n3), 在这里采用动态规划思想,时间复杂度为O(n2),从上下左右四个方向出发,分别代表一个单维的数组进行dp操作。

Python3 实现:

# @Time   :2018/5/8
# @Author :LiuYinxingmaps = [[1, 1, 0, 1, 1, 0, 0],[1, 0, 1, 1, 0, 0, 1],[1, 1, 1, 1, 1, 1, 1],[0, 1, 0, 1, 0, 1, 1],[1, 0, 1, 1, 1, 1, 0],[1, 1, 0, 1, 1, 0, 1]]
n, m = 6, 7  # 行列dp1 = [[0]*m for _ in range(n)]  # 上
dp2 = [[0]*m for _ in range(n)]  # 右
dp3 = [[0]*m for _ in range(n)]  # 下
dp4 = [[0]*m for _ in range(n)]  # 左for i in range(m): dp1[0][i], dp3[n-1][i] = maps[0][i], maps[n-1][i]  # 初始化
for i in range(n): dp2[i][m-1], dp4[i][0] = maps[i][m-1], maps[i][0]for i in range(n):  # 从左--->右计算for j in range(1, m):dp4[i][j] = 0 if maps[i][j] == 0 else dp4[i][j-1] + maps[i][j]for i in range(n):  # 从右--->左计算for j in range(m-2, -1, -1):dp2[i][j] = 0 if maps[i][j] == 0 else dp2[i][j+1] + maps[i][j]for j in range(m):  # 从上--->下计算for i in range(1, n):dp1[i][j] = 0 if maps[i][j] == 0 else dp1[i-1][j] + maps[i][j]for j in range(m):  # 从下--->上计算for i in range(n-2, -1, -1):dp3[i][j] = 0 if maps[i][j] == 0 else dp3[i+1][j] + maps[i][j]idm = 0
pathid = []
for i in range(n):  # 获取结果for j in range(m):dp1[i][j] = dp1[i][j] + dp2[i][j] + dp3[i][j] + dp4[i][j] - (3*maps[i][j])if dp1[i][j] > idm:  # 更新最大值idm, pathid= dp1[i][j], [[i,j]]elif dp1[i][j] == idm:  # 保留最大值pathid.append([i,j])print(pathid)

程序简化一下:

# @Time   :2018/5/8
# @Author :LiuYinxingmaps = [[1, 1, 0, 1, 1, 0, 0],[1, 0, 1, 1, 0, 0, 1],[1, 1, 1, 1, 1, 1, 1],[0, 1, 0, 1, 0, 1, 1],[1, 0, 1, 1, 1, 1, 0],[1, 1, 0, 1, 1, 0, 1]]
n, m = 6, 7  # 行列dp1 = [[0]*m for _ in range(n)]  # 上
dp2 = [[0]*m for _ in range(n)]  # 右
dp3 = [[0]*m for _ in range(n)]  # 下
dp4 = [[0]*m for _ in range(n)]  # 左for i in range(m): dp1[0][i], dp3[n-1][i] = maps[0][i], maps[n-1][i]  # 初始化
for i in range(n): dp2[i][m-1], dp4[i][0] = maps[i][m-1], maps[i][0]for i in range(n):  # 一行一行的计算for j in range(1, m):  # 从左--->右计算dp4[i][j] = [0, dp4[i][j-1] + maps[i][j]][maps[i][j]]for j in range(m-2, -1, -1):  # 从右--->左计算dp2[i][j] = [0, dp2[i][j+1] + maps[i][j]][maps[i][j]]for j in range(m):  # 一列一列的计算for i in range(1, n):  # 从上--->下计算dp1[i][j] = [0, dp1[i-1][j] + maps[i][j]][maps[i][j]]for i in range(n-2, -1, -1):  # 从下--->上计算dp3[i][j] = [0, dp3[i+1][j] + maps[i][j]][maps[i][j]]idm = 0
pathid = []
for i in range(n):  # 获取结果for j in range(m):dp1[i][j] = dp1[i][j] + dp2[i][j] + dp3[i][j] + dp4[i][j] - (3*maps[i][j])if dp1[i][j] > idm:  # 更新最大值idm, pathid= dp1[i][j], [[i,j]]elif dp1[i][j] == idm:  # 保留最大值pathid.append([i,j])print(pathid)

发现问题,可以留言指教哦。小白一个

阿里巴巴-笔试前的测验题:星球大战相关推荐

  1. 九月十月百度 迅雷 华为 阿里巴巴笔试面试六十题 第411 470题

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 九月十月 ...

  2. 【2022-08-27】美团秋招笔试前四道编程题

    恭喜发现宝藏!搜索公众号[TechGuide]回复公司名,解锁更多新鲜好文和互联网大厂的笔经面经,目前已更新至美团.微软- 作者@TechGuide[全网同名] 点赞再看,养成习惯,您动动手指对原创作 ...

  3. 阿里巴巴笔试的一道综合题

    题目描述: 当你在浏览器输入一个网址,比如http://www.taobao.com,按回车之后发生了什么?请从技术的角度描述,如浏览器.网络(UDP,TCP,HTTP等),以及服务器等各种参数与对象 ...

  4. 2013校园招聘-阿里巴巴-笔试真题

    阿里巴巴笔试回忆: 系统设计题: 大图导航系统: (1)现有大图1W张,像素:1024*4096.系统可以增加或者删除图片. (2)手机屏幕分辨率240*320.内存16M,手机本地存储256M.只能 ...

  5. 最新九月百度人搜,阿里巴巴,腾讯华为小米搜狗笔试面试三十题

    最新九月百度人搜,阿里巴巴,腾讯华为小米搜狗笔试面试三十题 引言 自发表上一篇文章至今(事实上,上篇文章更新了近3个月之久),blog已经停了3个多月,而在那之前,自开博以来的21个月每月都不曾断过. ...

  6. 转:九月十月百度人搜,阿里巴巴,腾讯华为笔试面试八十题(第331-410题)

    分类: 05.MS 100' original 2012-09-13 12:38 108951人阅读 评论(346) 收藏 举报 目录(?)[+] 九月十月百度人搜,阿里巴巴,腾讯华为小米搜狗笔试面试 ...

  7. 九月十月百度人搜,阿里巴巴,腾讯华为小米搜狗笔试面试八十题(10.29)

    文章出处:http://blog.csdn.net/v_july_v/article/details/7974418 九月十月百度人搜,阿里巴巴,腾讯华为小米搜狗笔试面试八十题 (参与算法&面 ...

  8. 九月十月百度人搜,阿里巴巴,腾讯华为小米搜狗笔试面试六十题 10 12

    http://blog.csdn.net/v_july_v/article/details/7974418 九月十月百度人搜,阿里巴巴,腾讯华为小米搜狗笔/面试五十题 「以下所有任何题目所给的点评里的 ...

  9. 九月十月百度人搜 阿里巴巴 腾讯华为笔试面试八十题 第331 410题

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 九月十月 ...

最新文章

  1. span 可编辑 控制数量_CSS如何限制显示的文本字数
  2. 电子科大博士生杨超火了!2年实现Science+Nature一作双杀
  3. 安装Orcale 10g SP3时报oui.exe异常错误
  4. content_scripts css,chrome 扩展开发 中 content_scripts 配置的 文件没有执行?
  5. [原]NYOJ-开灯问题-77
  6. python矩阵运算dot_numpy中的dot矩阵乘法
  7. html安百分比布局,移动端百分比布局
  8. php中fastcgi和php-fpm是什么东西
  9. 凸透镜成像实验软件_凸透镜成像6道例题(含详答)
  10. 卸载linux订阅包
  11. 基于STM32设计的NB-IOT电量采集系统(超级详细)--1.Onenet平台配置及M5311配置
  12. 如何用photoshop做24色环_PS教程!手把手教你快速绘制超漂亮的色环!
  13. 深度学习-浅层神经网络
  14. 商业智能时代,大数据分析行业前景
  15. Python将url转换作为合法文件名
  16. 做容器就要做“专”!云宏 Rancher联合解决方案WinGarden2.0容器云平台正式发布!
  17. 微信朋友圈里,微信群里的早报新闻简报都是哪里来的呢?
  18. 「蓝光」「720/1080p」「HR-HDTV」等视频制式都是什么意思?清晰度对比如何?
  19. App测试的方法和思路有哪些?一篇文章告诉你答案
  20. 优思学院|传统的质量管理和现代的六西格玛管理有何分别?

热门文章

  1. 实现远程休眠唤醒4G低功耗车牌识别摄像头方案
  2. iReport5.6.0 可视图报表的下载和安装(二)
  3. python大师_100 天从 Python 新手到大师
  4. 最小生成树的Kruskal算法-详解
  5. ls的a l i r R s t 功能的实现
  6. 中国各大银行简称——搞笑版
  7. BOM(第六周博客)
  8. [灵性] 人工智能与灵性修炼
  9. 深入浅出 详解Android Surface系统(1)
  10. Fluentd 配置