题目描述

你正在数轴上跟小精灵对战。你拥有一个十分强力的技能称为移动射击,但是这
个技能有一个缺点是在你发动之后只能改变一次方向。
你可以认为你的位置在数字 0 的位置上,在数轴的正方向上有 n 只精灵,负方向
上有 m 只精灵。移动射击可以造成 w 点伤害。每个精灵都有自己的血量,当血量降
为 0 时死亡。
在最开始时你可以选择向正方向或负方向释放移动射击,并且可以在任意时刻改
变技能的方向。请问你最多可以击杀多少只小精灵 ?(n,m,w 以及精灵的血量均在
[1, 100000] 范围内 )
输入内容为五个,前三个为三个数字 :正方向上的精灵个数 n、负方向上的精灵
个数 m, 移动射击可以造成的伤害 w;第四个是一个长度为 n 的数组 a,表示正方向
上的 n 个精灵的血量;第五个是一个长度为 m 的数组 b,表示负方向上的 m 个精灵
的血量。
输出一个数字,表示最多能够击杀的精灵数量。

示例 1

输入:
3
4
10
[1, 2, 3]
[4, 3, 2 ,1]
输出:
4

解题思路

大致思路: 首先理解题意,题目说的“发动之后只能改变一次方向”是干扰你
的,因为即使你在中间过程中左右摆,但宏观上还是最多改变了一次方向。
如果说:我先杀左边一个,然后转头杀右边一个,再转头杀左边三个,又回头杀
右边 1 个,看起来是不是改变了三次方向,其实呢,相当于我先杀左边四个,再回头
杀右边两个,效果是一样的。因为你想这个问题的时候,可以忽略这个限制。
具体过程: 先遍历数组 a,a[i] 表示数组 a 前 i 个数的和,当 a[i]>=w 的时候,记
住此时的位置 index_a=i,退出循环,退出后加上这句 if(i==n||a[i]>w) index_a–;
因为 index_a 指向的是刚好不超过 w 的位置,而且不能越界。
对 b 数组也是如此,然后开始从 index_a 往后一步一步走 ;
走一步,看看 b 数组的情况,k 为 b 数组的下标,初始 k=0;

while(k<m &&a[i]+b[k]<=w) k++;

然后和当前最长的长度比较

ans=Math.max(ans,i+k+1);

当 index_a 一直走到底,可返回 ans.

参考代码

public class Solution075 {/*** 移动射击* @param n 正方向上的精灵个数 n* @param m 负方向上的精灵个数 m* @param w 移动射击可以造成的伤害 w* @param a 一个长度为 n 的数组 a,表示正方向 上的 n 个精灵的血量* @param b 一个长度为 m 的数组 b,表示负方向上的 m 个精灵的血量* @return*/public static int solution(int n, int m, int w, int[] a, int[] b) {int index_a = 0;int index_b = 0;int sum_a = 0;int sum_b = 0;for(int i = 0;i<a.length;i++){sum_a = sum_a + a[i];index_a = i;if( sum_a > w){index_a = i - 1;sum_a = sum_a - a[i];break;}}int ans1 = 0;for(int ina = index_a;ina >= 0;sum_a = sum_a - a[ina],ina--){int k = 0;int sum = sum_a;while(k<m && sum+b[k]<=w){sum = sum +b[k];k++;}ans1 = Math.max(ans1,ina+k+1);}for(int i = 0;i<b.length;i++){sum_b = sum_b + b[i];index_b = i;if(sum_b > w){index_b = i - 1;sum_b = sum_b - b[i];break;}}int ans2 = 0;for(int inb = index_b;inb >= 0;sum_b = sum_b - b[inb],inb--){int k = 0;int sum = sum_b;while(k<n && sum+a[k]<=w){sum = sum +a[k];k++;}ans2 = Math.max(ans2,inb+k+1);}int ans = 0;ans =  Math.max(ans1,ans2);return ans;}public static void main(String[] args){int[] a = {4,3,2,1};int[] b = {1,2,3};System.out.println(solution(4,3,10,a,b));}
}

移动射击--算法笔试模拟题精解相关推荐

  1. 算法笔试模拟题精解之“Tom 爱吃巧克力”

    算法笔试模拟题精解之"Tom 爱吃巧克力" 本人C++菜鸟一枚,题目可以做出结果,但是相信各位大佬们会有更好的解法,如果有错误,欢迎在评论区指出,一起学习 **题目:**Tom 非 ...

  2. 免费下载 | 超全算法题精解,一本能“在线”编程的面试宝典

    点击这里立即下载:<程序员面试宝典> 内容介绍 备战大厂怎么能少了尖兵利刃? <程序员面试宝典>正式发布,助你一臂之力!70+算法面试模拟题深度解析,涵盖 树.排序.二分查找. ...

  3. 信管专业c语言考什么,计算机信息管理专业卫生事业单位招聘考试笔试模拟题(十)...

    关于计算机信息管理专业卫生事业单位招聘考试笔试模拟题,相信很多人都想知道,医学教育网经过搜集整理,特别整理以下内容,希望对您有帮助! 1.题干:广域网一般采用网状拓扑构型,该构型的系统可靠性高,但是结 ...

  4. 银行招聘网计算机类笔试,中国人民银行计算机类笔试模拟题

    银行招聘网(Yinhangzhaopin.com)温馨提示:凡告知"加qq联系.无需任何条件.工作地点不限",收取服装费.押金.报名费等各种费用的信息均有欺诈嫌疑,请保持警惕.银行 ...

  5. 计算机cpu的速度越来越快 这导致,计算机一级笔试模拟题(1-6)

    计算机一级笔试模拟题(1-6) <计算机知识及应用初步>笔试模拟题(一) (考试时间60分钟) 班级 学号 姓名 说明: ① 本试卷全部为选择题,每题可供选择的答案中,只有一个正确答案. ...

  6. 中科大-计算机类考研真题(初试笔试真题详解+复试笔试机试真题详解+面试问题汇总分析)

    中科大-计算机类考研真题(初试笔试真题详解+复试笔试机试真题详解+面试问题汇总分析) 初试笔试真题2003年~2019年:答案+详解 复试面试问题总结:问题汇总+详解分析 复试面试经验总结:个人小结 ...

  7. 计算机信息管理招聘笔试题,计算机信息管理专业卫生事业单位招聘考试笔试模拟题(六)...

    关于计算机信息管理专业卫生事业单位招聘考试笔试模拟题,相信很多人都想知道,医学教育网经过搜集整理,特别整理以下内容,希望对您有帮助! 1.题干:以下叙述正确的是 A 函数可以嵌套定义但不能嵌套调用 B ...

  8. 计算机信息管理招聘笔试题,计算机信息管理专业卫生事业单位招聘考试笔试模拟题(八)...

    关于计算机信息管理专业卫生事业单位招聘考试笔试模拟题,相信很多人都想知道,医学教育网经过搜集整理,特别整理以下内容,希望对您有帮助! 1.题干:交换式局域网从根本上改变了"共享介质" ...

  9. 计算机信息管理招聘笔试题,计算机信息管理专业卫生事业单位招聘考试笔试模拟题(七)...

    关于计算机信息管理专业卫生事业单位招聘考试笔试模拟题,相信很多人都想知道,医学教育网经过搜集整理,特别整理以下内容,希望对您有帮助! 1.题干:下列哪项不是UDP协议的特性?() A 提供可靠服务 B ...

最新文章

  1. SpringMVC之文件上传和文件下载
  2. 【转】系统管理类DOS命令汇总
  3. GRE核心词汇助记与精练-List12转
  4. 预训练依旧强大:少样本条件下的任务导向型对话生成
  5. 计算机软考网络工程师历年真题,计算机软考《网络工程师》考试历年真题精选(1)...
  6. php 实现自动加载更多,$.ajax+php实战教程之下拉时自动加载更多文章原理分析二...
  7. Linux 命令之 passwd -- 修改用户账号密码
  8. 还在用Tensorboard?机器学习实验管理平台大盘点
  9. 2021年度抖音小红书美妆行业营销报告
  10. 不敢相信!美国预测10年后的世界!
  11. 多重背包单调队列优化思路_多重背包问题
  12. 在定时器中service注入不进去的解决方案
  13. 安装360后,visual studio 经常报各种莫名其妙的错误的解决方案
  14. 技术狂何波:战斗在程序化交易第一线
  15. 用友u8 如何配置文件服务器,用友u8服务器软件配置
  16. 2.已知维数求超立方体邻接矩阵
  17. Transformer相关的各种预训练模型优点缺点对比总结与资料收集(Transformer/Bert/Albert/RoBerta/ERNIE/XLnet/ELECTRA)
  18. Halo 博客网站的SQL
  19. 上半年要写的博客文章29
  20. Jenkins系列:5、wsl下的Jenkins编译Windows下的Qt程序并自动打包成exe

热门文章

  1. matlab里设置colorbar类型,matlab colorbar 样式问题
  2. LinuxProbe 0x16 安装Bind服务程序、正向/反向解析、从署服务器、加密传输dns、缓存服务器、分离解析
  3. python readlines函数_关于python的readlines
  4. z世代中的z是什么意思_如果您认为z世代可以免于假新闻,那您就错了
  5. 实用 | 最全的做会计分录的方法和步骤
  6. 小林和单字母.CN域名的那些事(番外篇)
  7. 很热闹的帖子:透露公关内幕 网络媒体编辑教您如何索取公关公司好处费
  8. 如何建立公司的管理流程
  9. R数据科学-第十四章使用ggplot2进行图形化沟通
  10. base64转html文件,图片转换成Base64编码集成到html文件