【华为OD题库-044】跳房子1-java

题目

跳房子,也叫跳飞机,是—种世界性的儿童游戏,游戏参与者需要分多个回合按顺序跳到第1格直到房子的最后—格。跳房子的过程中,可以向前跳,也可以向后跳。
假设房子的总格数是count,小红每回合可能连续跳的步教都放在数组steps中,请问数组中是否有一种步数的组合,可以让小红两个回合跳到最后—格?如果有,请输出索引和最小的步数组合。
注意:
数组中的步数可以重复,但数组中的元素不能重复使用。提供的数据保证存在满足题目要求的组合,且索引和最小的步数组合是唯一的
输入描述
第一行输入为房子总格数count,它是int整数类型。
第二行输入为每回合可能连续跳的步数,它是int整数数组类型。
输出描述
返回索引和最小的满足要求的步数组合(顺序保持steps中原有顺序)
备注
count ≤ 1000
0 ≤ steps.length ≤ 5000
-100000000 steps ≤ 100000000
示例1:
输入:
7
[1,4,5,2,2]
输出
[5, 2]
示例2:
输入
9
[-1,2,4,9,6]
输出
[-1,9]
说明
此样例有多种组合满足两回合跳到最后,譬如: [-1,9],[2,6],其中[-1,9]的索引和为0+3=3,[2,6]的索和为1+4=5,所以索引和最小的步数组合[-1,9]

思路

同leetcode:1. 两数之和

  1. 双指针

和本系列 跳房子2 思路一样,不赘述

  1. 哈希表

除了用对象记录值和索引的关系,还可以用map。
遍历数组,看target - nums[i]是否存在map中:
如果存在,说明当前值+(target - nums[i])等于target,那么记录此时的(target - nums[i])和nums[i],并通过map计算当前组合的索引和。
如果不存在,以当前值为key,当前值的索引为val存到map中
最后返回索引和最小的组合

题解

1. 双指针

package hwod;import java.util.*;public class JumpHouse1 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();sc.nextLine();String secondLines = sc.nextLine();int[] nums = Arrays.stream(secondLines.substring(1, secondLines.length() - 1).split(",")).mapToInt(Integer::parseInt).toArray();int[] res = jumpHouse1(nums, n);StringBuilder sb = new StringBuilder("[");for (int i = 0; i < res.length; i++) {if (i != 0) sb.append(",");sb.append(res[i]);}sb.append("]");System.out.println(sb.toString());}private static int[] jumpHouse1(int[] nums, int target) {int[] res = new int[2];List<House1> list = new ArrayList<>();for (int i = 0; i < nums.length; i++) {list.add(new House1(i, nums[i]));}Collections.sort(list);int i = 0, j = list.size() - 1;int minIdxSum = Integer.MAX_VALUE;while (i < j) {int sum = list.get(i).getVal() + list.get(j).getVal();if (sum < target) {while (i < j && list.get(i).getVal() == list.get(++i).getVal()) ;} else if (sum > target) {while (i < j && list.get(j).getVal() == list.get(--j).getVal()) ;} else {int idxSum = list.get(i).getIdx() + list.get(j).getIdx();if (idxSum < minIdxSum) {minIdxSum = idxSum;List<House1> resHouses = Arrays.asList(list.get(i), list.get(j));resHouses.sort(Comparator.comparingInt(House1::getIdx));res = new int[]{resHouses.get(0).getVal(), resHouses.get(1).getVal()};}while (i < j && list.get(i).getVal() == list.get(++i).getVal()) ;while (i < j && list.get(j).getVal() == list.get(--j).getVal()) ;}}return res;}
}class House1 implements Comparable<House1> {private int idx;private int val;public int getIdx() {return idx;}public void setIdx(int idx) {this.idx = idx;}public int getVal() {return val;}public void setVal(int val) {this.val = val;}public House1(int idx, int val) {this.idx = idx;this.val = val;}@Overridepublic int compareTo(House1 o) {if (this.val != o.val) return this.val - o.val;return this.idx - o.idx;}
}

2. 哈希表

package hwod;import org.omg.PortableInterceptor.INACTIVE;import java.util.*;public class JumpHouse1 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();sc.nextLine();String secondLines = sc.nextLine();int[] nums = Arrays.stream(secondLines.substring(1, secondLines.length() - 1).split(",")).mapToInt(Integer::parseInt).toArray();int[] res = jumpHouse1(nums, n);StringBuilder sb = new StringBuilder("[");for (int i = 0; i < res.length; i++) {if (i != 0) sb.append(",");sb.append(res[i]);}sb.append("]");System.out.println(sb.toString());}private static int[] jumpHouse1(int[] nums, int target) {Map<Integer, Integer> map = new HashMap<>();int[] res = new int[2];int minIdxSum = Integer.MAX_VALUE;for (int i = 0; i < nums.length; i++) {if (map.containsKey(target - nums[i])) {int idxSum = i + map.get(target - nums[i]);if (idxSum < minIdxSum) {minIdxSum = idxSum;res=new int[]{target - nums[i], nums[i]};}}map.put(nums[i], i);}return res;}
}

补充用例

再提供一组示例验证:
输入:
9
[4,1,3,6,5]
输出:
[4,5]

推荐

如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。

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

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

相关文章

Paxos 算法

Paxos 算法 介绍 Paxos 算法是第一个被证明完备的分布式系统共识算法。共识算法的作用是让分布式系统中的多个节点之间对某个提案&#xff08;Proposal&#xff09;达成一致的看法。提案的含义在分布式系统中十分宽泛&#xff0c;像哪一个节点是 Leader 节点、多个事件发生的…

每天五分钟计算机视觉:AlexNet网络的结构特点

本文重点 在前面的一篇文章中&#xff0c;我们对AlexNet网络模型的参数进行了详细的介绍&#xff0c;本文对其网络模型的特点进行总结。 特点 1、AlexNet的网络结构比LeNet5更深&#xff0c;模型包括5个卷积层和3个全连接层。参数总量大概为249MB。 2、Alex使用了ReLu激活函…

基于Java SSM 学生宿舍管理系统

学生宿舍是同学最为熟悉的领域&#xff0c;假定学校有多栋宿舍楼&#xff0c;每栋楼有多层&#xff0c;每层有多个寝室&#xff0c;每个寝室可住多名学生&#xff0c;学生宿舍管理系统对学校的学生宿舍进行规范管理&#xff0c;其管理的对象及操作如下&#xff1a; 宿舍信息&am…

Frida hook框架环境搭建

Android逆向之hook框架Frida:Frida的环境搭建及入门实战_android frida-CSDN博客 https://app.yinxiang.com/fx/9dcb50f0-a6b3-4c93-bef4-c3d1197a2422 一&#xff0c;版本配置 frida 12.3.6 安卓 5-6 python3.7 frida 12.8.0 安…

vite 使用 vite-plugin-mock 和 mockjs 配置 mock 模式

vite 使用 vite-plugin-mock 和 mockjs 配置 mock 模式 当后端还没有完全弄好&#xff0c;而前端需要同时启动的时候&#xff0c;一般会使用 mock 模拟后端响应&#xff0c;这样在后端接口准备完成之后&#xff0c;前端能以较小的工作量和接入接口&#xff0c;完成生产开发。 …

javascript的Proxy

1. 什么是Proxy Proxy是ES6中新增的一个特性&#xff0c;它可以拦截对象的操作&#xff0c;提供了一个中间层来控制对目标对象的访问。简单来说&#xff0c;它可以对对象进行代理&#xff0c;从而实现对对象的监控、修改、过滤等操作。 2. 为什么出现Proxy 在JavaScript中&a…

在re:Invent上IBM宣布与亚马逊云科技携手,Amazon RDS for DB2正式亮相

11月29日&#xff0c;IBM在亚马逊云科技re:Invent 2023上宣布&#xff0c;与亚马逊云科技合作推出Amazon Relational Database Service&#xff08;Amazon RDS&#xff09;for Db2。这项全新的完全托管云服务旨在简化客户在混合云环境中管理人工智能&#xff08;AI&#xff09;…

electron-vue运用及案例代码

前言 Electron是一个使用JavaScript, HTML和CSS构建跨平台桌面应用程序的开源库。它允许开发者使用纯web技术创建原生应用程序,这使得web开发者能够利用他们已经掌握的web技术来构建桌面应用。 以下是一个简单的Electron应用程序的代码示例: // 引入Electron的主模块 co…

MDK5改造之格式化以及文件函数注释插件和主题应用

MDK5插件以及主题应用 前言一、主题修改1、主题文件下载2、主题应用 二、插件安装以及使用1.下载插件2、插件使用步骤 前言 为了写代码的心应手&#xff0c;先对MDK5进行改造 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 &#x1f389;参考了其他大师…

结合贝叶斯定理浅谈商业银行员工异常行为排查

1.贝叶斯定理的数学表达 贝叶斯方法依据贝叶斯定理。关于贝叶斯定理解释如下&#xff1a;首先我们设定在事件B条件下&#xff0c;发生事件A的条件概率&#xff0c;即 &#xff0c;从数学公式上&#xff0c;此条件概率等于事件A与事件B同时发生的概率除以事件B发生的概率。 上述…

代码随想录训练营第五十二天1143.最长公共子序列1035.不相交的线53. 最大子序和

1143.最长公共子序列 题目链接 1143. 最长公共子序列 - 力扣&#xff08;LeetCode&#xff09; 讲解链接 代码随想录 (programmercarl.com) 给定两个数组&#xff0c;求最长公共子序列&#xff0c;此时dp数组需要用二维的&#xff0c;dp[i][j]表示下表i-1.j-1所能拥有的最长公共…

状态模式-C++实现

状态模式是一种行为型设计模式&#xff0c;它允许对象内部状态发生改变时改变其行为&#xff0c;它将行为封装在不同的状态对象中&#xff0c;在运行时通过切换不同的状态可以表现出不同的行为。 状态模式一般有三种角色&#xff1a; 1、状态接口&#xff1a;定义了状态对象所…

Fiddler抓包工具之Fiddler+willow插件应用

安装Fiddler的安装包地址&#xff1a;fillderwillow 解压后安装fiddler4和willow1.4.*版本。 安装成功后&#xff0c;启动fiddler后会出现willow插件按钮&#xff1a; 说明安装成功。 重定向 willow重定向 进入willow界面后&#xff0c;通过右键->Add Project ->Add Ru…

鸿蒙开发学习笔记

快速入门 配置网络权限 1.打开项目的 module.json5 文件 2.在module 里面写下面代码 3.这样就可以使用网络图片了 4.模拟器上就可以正常显示网络图片了 5.官方文档有相吸说明 6. 华为官方编辑工具使用技巧&#xff08;内置文档&#xff09;&#xff0c;鼠标移动到标签上&…

对于Kotlin DSL的简单解析与使用

DSL(领域特定语言)是Kotlin所带来的强大语法特性之一&#xff0c;也是Java中所不存在的功能&#xff0c;JetBrain也基于DSL开发出了众多的开源库&#xff0c;Kotlin的开发者可以使用DSL来重构许多已有的代码&#xff0c;甚至有可能做到彻底抛弃HTML&#xff0c;XML&#xff0c;…

Mysql——》int(1)和 int(10)区别

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

【Python百宝箱】数据格式化大作战:探索Python强大的转换和验证库

前言 在现代数据处理和转换的领域中&#xff0c;Python成为了一种强大而灵活的工具。数据格式的转换和验证对于数据科学家、工程师和分析师而言是至关重要的任务。本文将介绍一系列Python库&#xff0c;它们能够处理各种数据格式&#xff0c;从JSON、XML到Excel和Pickle等&…

electron持久化cookie的方法,从session中获取

文章目录 1. 持久化方法2. 代码说明3. 补充 1. 持久化方法 session.defaultSession.cookies.get({}).then((cookies) > {// 恢复cookie现场cookies.forEach((cookiesItem) > {let { secure false, domain "", path "" } cookiesItem;BrowserWin…

零基础打靶—CTF4靶场

一、打靶的主要五大步骤 1.确定目标&#xff1a;在所有的靶场中&#xff0c;确定目标就是使用nmap进行ip扫描&#xff0c;确定ip即为目标&#xff0c;其他实战中确定目标的方式包括nmap进行扫描&#xff0c;但不局限于这个nmap。 2.常见的信息收集&#xff1a;比如平常挖洞使用…

Python标准库:math库【侯小啾python领航班系列(十六)】

Python标准库:math库【侯小啾python领航班系列(十六)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ…