从数组生成所有连续序列
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))
有一个数组 [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))