当前位置: 首页 > 知识库问答 >
问题:

爪哇codility青蛙河-一

鲁斯伯
2023-03-14

我一直在尝试解决一个在Codility网页上的Java练习。

下面是提到的练习和我的解决方案的链接。

https://codility.com/demo/results/demoH5GMV3-PV8

有人能告诉我为了提高分数,我的代码中可以纠正什么吗?

以下是任务描述,以防万一:

一只小青蛙想去河的另一边。青蛙目前位于位置0,想要到达位置X。树叶从树上掉落到河面上。

您将获得一个非空的零索引数组A,该数组由N个表示落叶的整数组成。A[K] 表示一片叶子在 K 时间下落的位置,以分钟为单位。

目标是找到青蛙能跳到河对岸的最早时间。只有当树叶出现在从1到x的河对岸的每个位置时,青蛙才能过河。

例如,给定整数X=5和数组A:

  A[0] = 1
  A[1] = 3
  A[2] = 1
  A[3] = 4
  A[4] = 2
  A[5] = 3
  A[6] = 5
  A[7] = 4

在第6分钟,一片叶子落入第5位。这是最早的树叶出现在河对岸的每个位置。

写一个函数:

class Solution { public int solution(int X, int[] A); } 

给定一个由N个整数和整数X组成的非空零索引数组A,返回青蛙可以跳到河对岸的最早时间。

如果青蛙永远无法跳到河的另一边,函数应该返回−1。

例如,给定X = 5和数组A,使得:

  A[0] = 1
  A[1] = 3
  A[2] = 1
  A[3] = 4
  A[4] = 2
  A[5] = 3
  A[6] = 5
  A[7] = 4

该函数应返回 6,如上所述。假设:

N and X are integers within the range [1..100,000];
each element of array A is an integer within the range [1..X].

复杂性:

expected worst-case time complexity is O(N);
expected worst-case space complexity is O(X), beyond input storage (not counting the storage required for input arguments).

输入数组的元素可以修改。

这是我的解决方案:

import java.util.ArrayList;
import java.util.List;

class Solution {

    public int solution(int X, int[] A) {
        int list[] = A;
        int sum = 0;
        int searchedValue = X;

        List<Integer> arrayList = new ArrayList<Integer>();

        for (int iii = 0; iii < list.length; iii++) {

            if (list[iii] <= searchedValue && !arrayList.contains(list[iii])) {
                sum += list[iii];
                arrayList.add(list[iii]);
            }
            if (list[iii] == searchedValue) {
                if (sum == searchedValue * (searchedValue + 1) / 2) {
                    return iii;
                }
            }
        }
        return -1;
    }
}

共有3个答案

牧璞
2023-03-14

100/100

public static int solution (int X, int[] A){

    int[]counter = new int[X+1];
    int ans = -1;
    int x = 0;

    for (int i=0; i<A.length; i++){
        if (counter[A[i]] == 0){
            counter[A[i]] = A[i];
            x += 1;
            if (x == X){
                return i;
            }
        } 
    }

    return ans;
}
甄文彬
2023-03-14

这是我的解决方案。它给了我100/100:

public int solution(int X, int[] A)
{
     int[] B = A.Distinct().ToArray();
     return (B.Length != X) ? -1 : Array.IndexOf<int>(A, B[B.Length - 1]);
}
朱兴运
2023-03-14

您正在循环中使用< code>arrayList.contains,这将不必要地遍历整个列表。

这是我的解决方案(我前段时间写的,但我相信它的分数是100/100):

    public int frog(int X, int[] A) {
        int steps = X;
        boolean[] bitmap = new boolean[steps+1];
        for(int i = 0; i < A.length; i++){
            if(!bitmap[A[i]]){
                bitmap[A[i]] = true;
                steps--;
                if(steps == 0) return i;
            }

        }
        return -1;
    }
 类似资料:
  • 我处理下面提供的一个可编码性问题, 斐波那契序列使用以下递归公式定义: 一只小青蛙想去河的对岸。青蛙最初位于河的一边(位置−1),想要到达另一边(位置N)。青蛙可以跳过任何距离F(K),其中F(K)是第K个斐波那契数。幸运的是,河上有许多树叶,青蛙可以在树叶之间跳跃,但只能在N号位置的岸边方向跳跃。 河上的叶子用一个由N个整数组成的数组表示。数组A的连续元素表示从0到N的连续位置− 1在河上。阵列

  • 问题内容: 我有这个Java代码段。我是Java的菜鸟。 错误: 码: 问题答案: 是的,这是问题所在: 在课程的最高级别,您只能拥有: 实例初始化程序块() 静态初始值设定块() 变量声明 构造函数声明 方法声明 嵌套类型声明 终结器声明 这些都不是。如果你 的意思 来声明一个变量,你应该这样做: 如果这 不是 您想要的,则应解释您的意图。 编辑:修复此问题后,此编译器错误似乎很明显: Conf

  • 我已经红色了多篇文章和讨论,但我仍然有一些不确定性:我不确定是否应该使用或任何其他类型来存储预订-在“在线预订”的意义上(因此来自不同国家/时区的参与者需要在时间线上的同一时刻会面)。我倾向于使用,因为DB和Backend设置为UTC,并且由于传入的“创建预订”json消息包含ISO 8601(带偏移量)start DateTime 让我们采用以下设置:1.数据库(UTC、Oracle、MSSQL

  • 我的问题是关于cucumber特性文件的并行执行。在Selenium Java中,可以通过一个runner类并行运行多个cucumber特性文件吗? 我尝试过不同的方法,但都没有成功。

  • 本文向大家介绍手写代码:青蛙跳台阶相关面试题,主要包含被问及手写代码:青蛙跳台阶时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 递归: 非递归:  

  • 当我运行程序而不是找到骑士之旅时,我收到了一个StackOverflow错误。任何想法是什么导致了这一点,以及我如何改变我的代码,实际上找到骑士之旅,并摆脱这个错误。项目是为我的CS280课程,并在周五到期,请帮助。谢谢!!