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

在ArrayList java中求连续子数组

史飞尘
2023-03-14

我是爪哇新手,正在练习。我正在写一个程序来查找给定整数数组中的所有连续子数组。为了简单起见,我从键盘插入输入(每个数字在新的行中),表示数组末尾的是一个负整数。

public static void main(String []args){
        // allocate new array       
        ArrayList<Integer> inputArray = new ArrayList<Integer>(); 
        
        int number = 0;
        while(number >= 0) {
            
            // get input from user
            Scanner input = new Scanner(System.in);
            
            number = input.nextInt();
            
            inputArray.add(number);     
        }

        // sort the array
        Collections.sort(inputArray);

       // remove the negative integer (which is stored in the first cell of the array)
       inputArray.remove(0);

        // allocate new array to store the sequence
        ArrayList<Integer> sequence = new ArrayList<Integer>();
        
        // get first cluster
        sequence = FindSequence(0, input);

        for(int it : sequence){
            System.out.println(it);

        }
}

最后,我试着用这个方法找到连续整数的第一个序列,这不完全是我的目标,但我从更简单的事情开始,然后我会用这个方法找到所有的连续序列:

public static ArrayList<Integer> FindSequence(int index, ArrayList<Integer> input) {
    ArrayList<Integer> sequence = new ArrayList<Integer>();

    while(input.get(index) == input.get(index + 1) || input.get(index) == input.get(index + 1) + 1 ) {
        sequence.add(input.get(index));
        index++;
    }
    
    sequence.add(input.get(index));

    for(int it : sequence) {
            System.out.println(it);
    }
    
    return sequence;
}

这两种方法都在同一个类中声明和实现。

问题是我输入的序列是1 2 3-1我希望1 2 3是打印的,但我得到的输出是1。我尝试使用prints进行了一些调试,发现程序不进入while循环,尽管满足了条件,因为input.get(index)=1input.get(index+1)=2,所以input.get(index)==input.get(index+1)+1为true。

运算符表示(据我所知)布尔or,因此只有满足其中一个条件,程序才能进入while循环。我真的很困惑,我不知道为什么会发生这种情况,也许有人可以解释并建议我如何解决这个问题?

谢谢你。

共有1个答案

林礼骞
2023-03-14

input.get(index)==input.get(index+1)+1行中,您希望检查下一个索引是否比当前索引大1。

要检查相同,在将1添加到当前元素后,它应该等于下一个元素。相同的布尔语句可以是

input.get(index) + 1 == input.get(index + 1)
 类似资料:
  • 在给定的数组中,我试图找到子序列的总数,以便: 连续各学期差额不大于3 子序列的第一个元素是数组的第一个元素 子序列的最后一个元素是数组的最后一个元素 例如,在数组:中,它有5个遵循上述条件的子序列。 我正在尝试一种自下而上的方法。我尝试了以下方法,但它没有给出所有子序列和输出4,而不是5。 我该怎么做?我的直觉是,这种方法可能类似于最长的递增子序列,但不确定如何实现。

  • 本文向大家介绍求一个数组中连续子向量的最大和相关面试题,主要包含被问及求一个数组中连续子向量的最大和时的应答技巧和注意事项,需要的朋友参考一下 考察点:数组    

  • 我在Leetcode上遇到了这个问题,我看到了解决方案,但我无法理解它为什么工作。它适用于模数的什么性质?我们怎么能说我们已经找到了一个和等于k的子数组,只看前面的模结果呢? 问题:

  • 问题是: 给出一个由n个整数组成的数组A、一个分离整数M和一个整数d。求a的一个连续子数组S,使子数组的大小小于或等于d,S中所有元素的和为M。返回a的索引,使左索引和右索引成为子数组S。所有的数字都是正的。 在这一点上我有80%的把握这是不可能的...我一直在看它,我想不出一个单一的方法来使这个工作,这可能是一个巨大的诡计问题吗?

  • 问题内容: 我正在尝试使用蒙特卡洛算法查找下周的乐透数字包含连续数字的概率。我认为对数字进行排序可能会使实际查找连续项更加容易,但是在网上搜索了很多之后,似乎并没有什么真正可以帮助我寻找所需内容的信息 到目前为止,这就是我所知道的,我知道我将使用计数器来查找百万结果中的连续数,但实际上我只是为如何真正找到连续数而烦恼 问题答案: 首先我读错了问题,对不起,答案很抱歉! 好吧,让我们分手吧。那么首先

  • NowCoder 题目描述 {6, -3, -2, 7, -15, 1, 2, 2},连续子数组的最大和为 8(从第 0 个开始,到第 3 个为止)。 解题思路 // java public int FindGreatestSumOfSubArray(int[] nums) { if (nums == null || nums.length == 0) return 0;