华为OD E卷(100分)29-跳房子

前言

        工作了十几年,从普通的研发工程师一路成长为研发经理、研发总监。临近40岁,本想辞职后换一个相对稳定的工作环境一直干到老, 没想到离职后三个多月了还没找到工作,愁肠百结。为了让自己有点事情做,也算提高一下自己的编程能力,无聊之余打算用一些大厂的编程题练练手。希望通过这些分享能够帮到一些人,也希望能和看到此文的大神们沟通交流,提升自己,更希望在此期间能够找到一份理想的工作。

题目描述

        跳房子是一种广受欢迎的儿童游戏。游戏参与者需要分多个回合,按顺序从第 1 格跳到房子的最后一格。在跳房子的过程中,可以向前跳,也可以向后跳。假设房子的总格数是 count,小红每回合可能连续跳的步数都放在数组 steps 中。请判断数组中是否存在一种步数的组合,可以让小红在两个回合内跳到最后一格?

        如果存在这样的组合,请输出索引和最小的步数组合。

        注意:

  1. 数组中的步数可以重复,但数组中的元素不能重复使用。
  2. 提供的数据保证存在满足题目要求的组合,且索引和最小的步数组合是唯一的。

输入

        第一行输入为房子总格数 count,它是 int 整数类型。 第二行输入为每回合可能连续跳的步数,它是 int 整数数组类型。

数据范围 
count≤1000
0≤steps.length≤5000
−100000000≤steps[i]≤100000000

输出

        返回索引和最小的满足要求的步数组合(顺序保持 steps 中原有顺序)。

示例 

示例1

输入
7
1,4,5,2,2
输出
5 2

说明

可以先跳 5 步,再跳 2 步,正好到达第 7 格(最后一格)

示例2

输入
8
-1,2,4,9,6
输出

-1 9

说明

此样例有多种组合满足两回合跳到最后,例如:[-1,9],[2,6]。其中[-1,9]的索引和为0+3=3,[2,6]的索引和为1+4=5,所以索引和最小的步数组合是[-1,9]。

示例3

输入
4
1,2,9,9,9,1,9,9,3,2
输出

1 3

说明

可以先跳 1 步,再跳 3 步,正好到达第 4 格(最后一格)。

题解

Java实现

package huawei.e100;

import java.util.Scanner;

/**
* @author arnold
* @date 2024年12月19日
* 跳房子
*/
public class T29 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			int n = sc.nextInt();
			sc.nextLine();
			String[] tmps = sc.nextLine().split(",");
			int[] data = new int[tmps.length];
			for (int i = 0; i < data.length; i++) {
				data[i] = Integer.parseInt(tmps[i]);
			}
			int[] res = run(data, n);
			System.out.println(res[0] + " " + res[1]);
		}
	}
		
	static int[] run(int[] data, int num) {
		int minIndexSum = Integer.MAX_VALUE;
		int[] res = new int[2];
		for (int i = 0; i < data.length-1; i++) {
			if(i > minIndexSum) break;
			for (int j = i+1; j < data.length; j++) {
				if(j > minIndexSum) break;
				
				if(data[i] + data[j] == num) {
					if(minIndexSum > i+j) {
						minIndexSum = i+j;
						res[0] =  data[i];
						res[1] =  data[j];
					}
					
				}
				
			}
		}
		return res;
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

arnold66

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值