从数组生成所有连续序列

Generate all contiguous sequences from an array

有一个数组 [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();
    }
}

尝试这样的事情:

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

我还没有测试过,但应该可以。

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

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

你总是运行宁在第 i 个地方。你想要做的是 运行 从 i 到数组的末尾,这样:

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

您只需进行 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();
    }
}

试试这个方法。

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();
    }
}

已经过测试并且可以正常工作!试试这个算法。

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();
        }
}

使用下面的代码:

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();
            }
        }
    }
}

我认为这可能会有所帮助

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();
    }
}
// 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;
}

有一种花费更少时间的更好方法:

输入:

int items[] = {1,2,3,4};

代码:

int j = 0;
StringBuilder sb = new StringBuilder();

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

   sb.setLength(0);
   j = 0;
   sb.append(items[i]+ " ");
   System.out.print(sb.toString()+ " ");
   System.out.println();

   j=i+1;
   
   while(j< items.length){

       sb.append(arr.get(j) + " ");
       System.out.print(sb.toString() +" ");
       System.out.println();

       j = j+1;
   }
   System.out.println();
   }

输出:

  1
  1 2
  1 2 3
  1 2 3 4

  2 
  2 3
  2 3 4
  
  3
  3 4

  4

def printSubsequences(l, r, arr:list, n):

if(l == n):
    return
while(l<=r):
    print(arr[l:r+1])
    r-=1
printSubsequences(l+1, n-1, arr, n)

如果__name__ == "__main__":
arr = list(map(int, input("Enter : ").strip().split()))
printSubsequences(0, len(arr)-1, arr, len(arr))