小编use*_*840的帖子

给定一个没有空格的短语,添加空格以构成正确的句子

这是我的想法,但它是 O(n^2):

例如:输入是“Thisisawesome”,我们需要检查添加当前字符是否会使旧的搜索结果变得更长且有意义。但是为了看到我们需要备份的地方,我们必须一直遍历到开始。例如:“awe”和“some”是合适的词,但“awesome”是更大的词。请建议我们如何提高复杂性。这是代码:

void update(string in)
{
   int len= in.length();
   int DS[len];
   string word;
   for(int i=0; i<len; i++) DS[i]=0;

   for(int i=0; i<len; i++)
        for(int j=i+1; j<=len; j++)
        {
            word = in.substr(i,j-i);
            if(dict.find(word)!=dict.end())
                   DS[j-1] = (DS[j-1] > word.length()) ? DS[j-1] : word.length();   
         }
}
Run Code Online (Sandbox Code Playgroud)

string algorithm dynamic-programming

5
推荐指数
1
解决办法
7077
查看次数

正则表达式匹配数字或UUID

我需要与UUID和数字松散匹配的正则表达式.我希望我的文件名格式如下:

results_SOMETHING.csv
Run Code Online (Sandbox Code Playgroud)

理想情况下,这应该是数字(运行脚本的次数)或UUID.

这个正则表达式包含大量的文件名:

 ^results_?.*.csv$
Run Code Online (Sandbox Code Playgroud)

还有这个:

 ^results_?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}.csv$
Run Code Online (Sandbox Code Playgroud)

仅匹配UUID.我想要一个正则表达式介于两者之间的正则表达式.大多数情况下,我不希望像匹配result__123.csv.

regex uuid

5
推荐指数
1
解决办法
1万
查看次数

在DynamoDB表项中的List类型属性中添加或删除条目

我有一个非常简单的类,带有字符串类型主键和List类型属性.我想编写APIS来添加和删除属性列表中的项目并将更改保存回DDB.

我能想到的最简单的解决方案是: - 读取列表(如果存在) - 如果存在,从List类型属性中删除或添加该条目 - 将修改后的对象放回

有没有更简洁的方法通过DynamoDB java API执行此操作?在我在这里发布这个问题之前,我花了很长时间来查找它.

list amazon-web-services amazon-dynamodb

5
推荐指数
3
解决办法
1万
查看次数

int和longs之间的java乘法给出0

private static final int FIRST  = 8;
private static final int SECOND = (4 * 1024 * 1024)/8;
private static final int THIRD = (4 * 1024 * 1024);
private static final long RESULT  = FIRST *SECOND * THIRD;
Run Code Online (Sandbox Code Playgroud)

为什么3的产品出现0?

java int type-conversion multiplication long-integer

4
推荐指数
1
解决办法
2601
查看次数

平均分配桶中的"项目"(尽力而为)

假设我想将y项目x均匀分配到存储桶.如果xy这个分布的倍数将是偶数,如果不是,我可以最终得到0每个桶中的项目.例如:

例如:我有3水桶,我想分配2每个项目.由于进行分割(2/3)将导致0每桶物品.如何能够做到,分布1,1,0

java algorithm math distribution

4
推荐指数
3
解决办法
4697
查看次数

与数组上的迭代相比,使用 Arrays.stream() 是否有任何性能优势?

我需要迭代所有枚举值,检查它们是否用于构造 int (称为input),如果是,则将它们添加到 Set (称为usefulEnums)。我可以使用流 API 或迭代所有枚举来完成此任务。Arrays.stream()与传统的数组迭代方法相比,使用它有什么好处吗values()

   enum TestEnum { VALUE1, VALUE2, VALUE3 };

   Set<TestEnum> usefulEnums = new HashSet<>();

   Arrays.stream(TestEnum.values())
            .filter(t -> (input & t.getValue()) != 0)
            .forEach(usefulEnums::add);

    for (TestEnum t : TestEnum.values()) {
        if ((input & t.getValue()) != 0) {
            usefulEnums.add(t);
        }
    }
Run Code Online (Sandbox Code Playgroud)

enums java-8 java-stream

4
推荐指数
1
解决办法
620
查看次数

最长增加子序列如何成为DAG中最长路径的特例?

我在"Hitchhiker的算法指南"中读到了这个陈述.但是,我无法将其可视化为LIS问题,我们所拥有的只是一系列数字.如何将其调整为图形问题?

algorithm graph directed-acyclic-graphs

3
推荐指数
1
解决办法
1377
查看次数

就地排序具有2个排序子数组的数组

[这是一个面试问题.我找不到重复的内容.]

数组包含两个子排序数组.给出一个inplace算法来排序两个子数组.

例如:I/P:1 4 5 7 8 9 2 3 6 10 11 O/P:1 2 3 4 5 6 7 8 9 10 11

我认为在就地合并排序,插入排序(因为子数组已经排序)和快速排序方面,但无法想到一个比使用标准排序方法更复杂的解决方案.

请帮我找一个算法,它允许我们利用已排序的子数组属性,并且比在输入上运行Quicksort时产生更好的时间复杂度.

这是我想到的合并排序模拟,使用这个例子:

  1) For position 0, Comparing 1 & 2, 1 is smaller let it stay at it's original place
  2) For position 1, Comparing 2 & 4, 2 is smaller so swap 2 and 4
  3) For position 2, Comparison now is between 4 and 3 (5 > 4 anyways) swap 3 and 5 …
Run Code Online (Sandbox Code Playgroud)

sorting algorithm

3
推荐指数
1
解决办法
3512
查看次数

为分布式系统中的每个请求生成唯一的ID

我正在尝试为DS中的每个请求生成唯一的ID。我正在考虑连接请求接收的随机整数和时间戳。因为获取随机整数会导致负值,所以我决定打印十六进制表示形式:

     String randomPrefix = Integer.toHexString(RANDOM.nextInt()).toUpperCase();
     java.util.Date date = new java.util.Date();
     String timestamp = Long.toHexString(date.getTime()).toUpperCase();
     String id = randomPrefix.concat(timestamp);    
Run Code Online (Sandbox Code Playgroud)

我不太擅长机率,但我想知道是否还有其他操作会导致此值较短且字符串长度同样低(甚至有更好的机会避免重复)。

像外行人一样,串联应该将复发的可能性提高X倍,而加法则要增加它的可能性(重复发生的可能性更高)。

请提出其他方法以使ID更简洁,更短(或确认是否正确)。

PS:请原谅我使用外行语言,请继续努力。:(

java string hex probability distributed-computing

3
推荐指数
1
解决办法
3625
查看次数

Java将long转换为字节 - 哪种方法更有效

我有两种方法来转换长到字节数组.

for (int i = 0; i < 7; i++) {
    data[pos + i] = (byte) (value >> (7- i - 1 << 3));
}
Run Code Online (Sandbox Code Playgroud)

for (int i = 7; i >= 0; --i) {
    data[p + i] = (byte)(newl & 0xff);
    newl >>= 8;
}
Run Code Online (Sandbox Code Playgroud)

哪两个操作更有效?

java byte bit-shift endianness

3
推荐指数
1
解决办法
8062
查看次数