【问题标题】:maximum number of elements which can be added to an arraylist可以添加到数组列表的最大元素数
【发布时间】:2015-06-02 22:08:33
【问题描述】:

问题:-

给定一个包含 N 个字符的字符串 S。众所周知,字符串由小写拉丁字母组成。字符串是随机生成的。这意味着每个符号都是从集合 {'a', 'b', ..., 'z'} 中随机且独立地选择的。所有字母出现的概率相等。

你得到了关于这个字符串的 Q 查询。每个查询都采用 P C 的形式,其中 P 是 1 和 N(均包含)之间的整数,C 是集合 {'a', 'b', ..., 'z'} 中的一个字符。 P 和 C 都是随机选择的,并且独立于其他查询。

当您有一个 P C 形式的查询时,您必须将 S 的第 P 个符号更改为 C。每次更改后,我们都会要求您输出 S 的不同非空子字符串的数量。

输入格式 第一行输入由两个单空格分隔的整数 N 和 Q 组成——分别是字符串 S 的长度和查询次数。

第二行包含字符串 S 本身。

以下 Q 行以 P C 的形式描述查询,其中 P 和 C 也用一个空格分隔。

约束

4 ≤ N ≤ 75000 4≤Q≤75000

输出格式 输出 Q 线。在输出的第 i 行输出第 i 个查询后 S 的不同子串的数量。

示例输入

4 4 
aaab
1 a
2 b
3 c
4 d

样本输出:-

7
7
9
10

解释:-

将第一个索引处的字符替换为 a 后,我们仍然拥有原始字符串 aaab。 aaab 的非空子串总数为

a b ab aa aab aaab 因此 7.

将第二个索引处的字符替换为 b 后,我们得到了字符串 abab。 abab 的非空子串总数为

a b ab ba aba bab abab 因此 7.

用 c 替换第 3 个索引处的字符后,我们得到了字符串 abcb。 abcb 的非空子串总数为

a b c ab bc cb abc bcb abcb 因此 9.

将第 4 个索引处的字符替换为 d 后,我们得到了字符串 abcd。 abcd 的非空子串总数为

a b c d ab bc cd abc bcd abcd 因此 10.

我的代码:-

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

public class Solution 
{
 public static long count(String string)
 {
    String sub;
    int i,c,length;
    ArrayList<String>al=new ArrayList<String>();
    length = string.length();

    for(c=0;c<length;c++)
    {
        for(i=1;i<=length-c;i++)
        {
            sub = string.substring(c,c+i);
            al.add(sub);
        }
    }

    HashSet hs = new HashSet();
    hs.addAll(al);
    al.clear();
    al.addAll(hs);

    return al.size();
}
public static void main(String[] args) 
{
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int q = sc.nextInt();

    String s = sc.next();
    StringBuilder m = new StringBuilder(s);
    while((q--)>0)
    {
        int p = sc.nextInt() - 1;
        char c = sc.next().toCharArray()[0];
        m.setCharAt(p,c);
        String z = m.toString();
        long x = count(z);
        System.out.println(x);
    }
 }
}

当输入非常大并且如果答案大于 2147483647(最大 int 值)例如说 2812324482 .... 我得到错误的输出

我们都知道 size() 方法返回 int 所以它的最大容量是 2147483647 ,但我的答案预计会超过不能容纳的

谁能给我一个想法来存储更多值或任何其他替代手动或预定义方法,它返回最大容量超过 2147483647 的数组列表的大小?

【问题讨论】:

  • 无论如何,您都无法在内存中存储那么多对象实例。也许您应该考虑另一种方法。
  • 可能会增加主内存的大小帮助?
  • 是的...如果您试图通过实际存储所有可能性来解决这样的问题,那么您在开始之前就已经迷失了。
  • 它提到了 'distinct' 子串,所以我必须使用 hashset 否则我会使用 long count =0;我会增加它@LouisWasserman
  • @coder101 坦率地说,需要实例化多个 Integer.MAX_VALUE 对象的 any 解决方案是不可行的,无论您如何尝试安排它,因此它们不会全部在一个 ArrayList 中.

标签: java arrays string arraylist hashset


【解决方案1】:

ArrayList 包含的最大项目数取决于实现。由于List&lt;Integer&gt;List&lt;Person&gt;不同,所以这两个List的最大项数应该不同。

【讨论】:

  • 即使你有无限的内存(例如 200 GB 的内存),它们都有相同的边界:ArrayList 用于实现的数组,其大小不能超过Integer.MAX_VALUE(在事实上,数组的最大大小小于这个值)。
猜你喜欢
  • 1970-01-01
  • 2021-07-23
  • 1970-01-01
  • 1970-01-01
  • 2019-08-31
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多