从数组生成所有连续序列

时间:2015-08-31 10:23:46

标签: java arrays logic

有一个阵列说[1,2,4,5,1]。我需要从中打印所有连续的子阵列。

输入:[1,2,4,5,1]

输出:

 1
 1,2
 1,2,4
 1,2,4,5
 1,2,4,5,1
 2
 2,4
 2,4,5
 2,4,5,1
 4
 4,5
 4,5,1
 5
 5,1
 1

我尝试过但无法获得完整系列。

//items is the main array
for(int i = 0; i < items.length; i++) {
    int num = 0;
    for(int j = 0; j < items.length - i; j++) {
        for(int k = i; k < j; k++) {
            System.out.print(items[k]);
        }
        System.out.println();
    }
}

8 个答案:

答案 0 :(得分:3)

您只需进行2次更改。外循环迭代的次数与数组中的元素一样多,这是正确的。第一个内部循环应该使用外部循环的索引作为起始索引(int j = i),否则总是从第一个元素开始。然后将内循环中断条件更改为k <= j,否则i不会打印最后一个元素。

// i is the start index
for (int i = 0; i < items.length; i++)
{
    // j is the number of elements which should be printed
    for (int j = i; j < items.length; j++)
    {
        // print the array from i to j
        for (int k = i; k <= j; k++)
        {
            System.out.print(items[k]);
        }
        System.out.println();
    }
}

答案 1 :(得分:1)

经过测试和工作!试试这个算法。

for(int i=0;i<items.length;i++) {

        for(int j=i;j<items.length;j++) {

            for(int k=i;k<=j;k++) {

                System.out.print(items[k]);
            }
            System.out.println();
        }
}

答案 2 :(得分:0)

尝试这样的事情:

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

我还没有测试过,但它应该有效。

答案 3 :(得分:0)

问题似乎在于你的第二个循环:

for(int j=0;j<items.length-i;j++)

你总是在第一个地方跑步。你想要做的是从i运行到数组结束,如下:

for(int j=i;j<items.length;j++)

答案 4 :(得分:0)

试试这种方式。

int items[]={1,2,4,5,1};
for(int i=0;i<=items.length;i++)//items is the main array 
{
    int num=0;
    for(int j=0;j<items.length;j++)
    {
        for(int k=i;k<=j;k++)
        {
            System.out.print(items[k]);
        }

        System.out.println();
    }
}

答案 5 :(得分:0)

使用以下代码:

import java.io.*;
class stack
{
    public static void main(String args[]) throws IOException
    {
        int items[]={1,2,4,5,1};

        for(int i=0;i<items.length;i++)//items is the main array 
        {
            for(int j=i;j<items.length;j++)
            {
                for(int k=i;k<=j;k++)
                {
                    System.out.print(items[k]);
                    if (k==j)
                        continue;
                    else
                        System.out.print(",");
                }
                System.out.println();
            }
        }
    }
}

答案 6 :(得分:0)

我认为这可能会有所帮助

for(int i=0;i<=items.length-1;i++)
{
    for(int l=i;l<=items.length;l++)
    {
    int b[]=Arrays.copyOfRange(a, i,l);

        for(int k=0;k<=b.length-1;k++)
        {
            System.out.print(b[k]);
        }

        System.out.println();
    }
}

答案 7 :(得分:0)

// Javascript.
// Generate Array and print it.
function subArray(arr) {
    if (arr.length < 1) return 0;
    if (arr.length < 2) return arr[0];

    let result = [];
    for (let i = 0; i < arr.length; i++) {
        const temp = [];
        for (let j = i; j < arr.length; j++) {
            temp.push(arr[j]);
            result.push([...temp]);
            console.log(temp.join(','));
        }
    }
    return result
}

// Calculate only Sum of the subarrays.
function subArrSum(arr) {
  if (arr.length < 1) return 0;
  if (arr.length < 2) return arr[0];

  let sum = 0;
  for (let i = 0; i < arr.length; i++) {
      sum += (arr.length - i) * (i + 1) * arr[i];
  }
  return sum;
}