【问题标题】:Check whether an element has a successor in java Array检查一个元素在java Array中是否有后继
【发布时间】:2020-06-29 14:23:06
【问题描述】:

我正在尝试检查数组的元素是否有后继者。换句话说,将 Ascending 子列表设置为 0,其余的设置为 1inputArray 的第一个元素应该被忽略

如果是,那么两个元素都应该是0,如果不是,那么1。例如:对于输入

int[] arr = {1,8,1,9,10};

输出应该是[1,1,1,0,0]

另一个例子:对于输入int[] arr = {1,2,3,9,100};,输出应该是:[1,0,0,1,1]

这是我的尝试,但它没有按预期工作。我在哪里失败?

public class HelloWorld {
    public static void main(String[] args) {
        int[] arr = { 1, 8, 1, 9, 10 };

        int[] listOutput;
        for (int i = 1; i<arr.length - 1; i++) {
            if (arr[i] - arr[i + 1] == -1) {
                arr[i] = 0;
                arr[i + 1] = 0;
            } else {
                arr[i] = 1;
            }

        }
        System.out.println("Hello World");

        for (int i = 0; i<arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

【问题讨论】:

  • 您的问题没有很好地定义,[1, 2, 3, 5] 的输出应该是什么? 3 应该变成0 因为2 有后继者,还是应该变成1,因为5 不是它的后继者? 5 应该变成什么?
  • 输出应该是[1,0,0,1],所以第一个元素应该被忽略,3是2的后继,那么两者都应该是0,5不是3的后继,然后5应该成为1
  • 第一个元素是否应该保持不变?即使12 的继任者,也只有2 应该设置为0 而不是两者都设置?
  • 是的,第一个元素保持不变
  • 我的答案中的解决方案是否相应地解决了您的问题?

标签: java arrays list algorithm


【解决方案1】:
public static void main(String[] args) {
    int[] arr = { 1, 8, 1, 9, 10 };

    // assume arr.length >= 2
    boolean asc = arr[1] - arr[0] == 1;
    for (int i = 1; i < arr.length - 1; i++) {
        if (arr[i + 1] - arr[i] == 1) {
            arr[i] = 0;
            asc = true;
        } else {
            if (asc) {
                asc = false;
                arr[i] = 0;
            }
            else {
                arr[i] = 1;
            }
        }
    }
    arr[arr.length - 1] = asc ? 0 : 1;

    for (int i = 0; i < arr.length; i++) {
        System.out.println(arr[i]);
    }
}

这会将大小大于 1 的每个升序(加 1)子列表替换为 0,并将剩余的每个元素替换为 1(除了第一个保持不变的元素)。

【讨论】:

  • 换句话说。使列表的 Ascending 子列表为 0,其余为 1
  • @Catalina 好的,现在描述清楚了。只添加一个:保持第一个元素不变?
  • 保持第一个元素不变-->是
  • @Catalina 我又做了一个更新,删除了有趣的backup 方法。
  • @Catalina 只需将每个arr[X] = Y 替换为arr.set(X, Y)。例如。 arr.set(arr.size() - 1, asc ? 0 : 1)
【解决方案2】:

您是从 1 而不是 0 循环数组。

【讨论】:

  • 是的,第一个元素应该被忽略
猜你喜欢
  • 1970-01-01
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 2016-12-31
  • 2016-06-29
  • 2019-02-12
  • 1970-01-01
  • 2020-12-03
相关资源
最近更新 更多