前言
工作了十几年,从普通的研发工程师一路成长为研发经理、研发总监。临近40岁,本想辞职后换一个相对稳定的工作环境一直干到老, 没想到离职后三个多月了还没找到工作,愁肠百结。为了让自己有点事情做,也算提高一下自己的编程能力,无聊之余打算用一些大厂的编程题练练手。希望通过这些分享能够帮到一些人,也希望能和看到此文的大神们沟通交流,提升自己,更希望在此期间能够找到一份理想的工作。
题目描述
跳房子是一种广受欢迎的儿童游戏。游戏参与者需要分多个回合,按顺序从第 1 格跳到房子的最后一格。在跳房子的过程中,可以向前跳,也可以向后跳。假设房子的总格数是 count,小红每回合可能连续跳的步数都放在数组 steps 中。请判断数组中是否存在一种步数的组合,可以让小红在两个回合内跳到最后一格?
如果存在这样的组合,请输出索引和最小的步数组合。
注意:
- 数组中的步数可以重复,但数组中的元素不能重复使用。
- 提供的数据保证存在满足题目要求的组合,且索引和最小的步数组合是唯一的。
输入
第一行输入为房子总格数 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;
}
}
623

被折叠的 条评论
为什么被折叠?



