簡體   English   中英

java中列表的子列表

[英]Sublists of a list in java

在某個一維景觀中有N個建築物。 每個建築物的高度由 hi,i∈[1,N] 給出。 如果你加入 K 個相鄰的建築物,它們將形成一個面積為 K×min(hi,hi+1,…,hi+k−1) 的實心矩形。

給定 N 棟建築物,找出由連續建築物構成的最大的這種實心區域。

輸入格式 第一行包含N,一共建築物的數量。 第二行包含 N 個空格分隔的整數,每個整數代表建築物的高度。

輸出格式 一個整數,表示形成的矩形的最大面積。

樣本輸入

5
1 2 3 4 5

樣本輸出

9

這是我的代碼,我試圖交叉檢查它但它有問題,每當我訪問一個子列表時,它會自動排序並且它們在原始列表中的位置也發生變化

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

 public class Solution 
{
 public static void main(String[] args) 
 {
   Scanner sc = new Scanner(System.in);
   int n=sc.nextInt();

   List<Integer> al= new ArrayList<Integer>();

    for(int i=0;i<n;i++)
        al.add(sc.nextInt());

  int i, c,min=0;

  for( c = 0 ; c < n ; c++ )
  {

     for( i = c+1 ; i <= n ; i++ )
     {   
         System.out.println(" value of c is "+c+" value of i is "+i);
         List<Integer> X = al.subList(c,i);

         for(int j=0;j<X.size();j++)
             System.out.print(X.get(j)+" ");

         System.out.println();

         Collections.sort(X);

         for(int j=0;j<X.size();j++)
             System.out.print(X.get(j)+" ");

         System.out.println();

         int x=X.get(0);
         System.out.println("min value is "+x);
         int y=x*(X.size());
         System.out.println("projected value is "+y);

         if(y > min)
             min = y;

         System.out.println("modified value is "+min);

      }
   }

    System.out.println(min);
  }
}

subList() 方法實際上是明確記錄的,以便您了解原始內容:

返回此列表中指定 * {@code fromIndex}(包括)和 {@code toIndex}(不包括在內)之間的部分的視圖。 (如果 * {@code fromIndex} 和 {@code toIndex} 相等,則返回的列表為 * 空。)返回的列表由此列表支持,因此返回列表中的非結構性 * 更改會反映在此列表中,反之亦然。 * 返回的列表支持所有可選的列表操作。

所以 subList() 不適合如果你想修改它並且不將更改反映回原始。

而是制作一個明確的副本:

List<Integer> X = new ArrayList<>(al.subList(c,i));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM