- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想计算给定数组 t
中最长子序列的总和和长度。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class so {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] s = br.readLine().split(" ");
br.close();
int[] t = new int[s.length];
for (int i = 0; i < s.length; i++) {
t[i] = Integer.parseInt(s[i]);
}
int length = 1;
int sum = t[0];
int maxSum = 0;
int maxLength = 0;
for (int i = 1; i < t.length; i++) {
for (; i < t.length && t[i - 1] <= t[i]; i++) {
length++;
sum += t[i];
System.out.print(t[i] + " ");
}
if (length > maxLength) {
maxLength = length;
maxSum = sum;
length = 1;
sum = 0;
i--;
}
}
System.out.println("sum is " + maxSum + " length is " + maxLength);
}
}
对于数字1 1 7 3 2 0 0 4 5 5 6 2 1
我得到输出:
sum 为 20 长度为 6
但对于相反顺序的相同数字 1 2 6 5 5 4 0 0 2 3 7 1 1
我得到输出:
sum is 17 length is 6
这是不正确 因为我应该得到 sum is 12 length is 5
。
有人能发现我的错误吗?
最佳答案
您正在重置length
和sum
仅当您找到下一个最长序列时但您应该每次 你完成了一个序列的测试:
现在,您的代码累积 length
和 sum
直到它超过 maxLength
但 length
和 sum
是在测试每个可能的子序列时需要重置的测试变量。
此外,您的sum
变量需要重置为t[i - 1]
的当前测试值,而不是0
。即使存在此错误,您仍获得正确结果的原因是,您的两个输入的 LIS 中的第一项都是 0
。
如果我们输入类似的内容(将第一个输入中的两个 0
替换为 1
):
1 1 7 3 2 1 1 4 5 5 6 2 1
输出是:
sum is 21 length is 6
但是总和应该是22
事实上,一种稍微更简洁的方法是在循环开始时执行测试变量的初始化,而不是在循环外初始化然后在循环内重置:
// ...
int length, sum, maxSum = Integer.MIN_VALUE, maxLength = Integer.MIN_VALUE;
for (int i = 1; i < t.length; i++) {
// initialize test variables
length = 1;
sum = t[i - 1];
for (; i < t.length && t[i - 1] <= t[i]; i++) {
length++;
sum += t[i];
System.out.print(t[i] + " ");
}
if (length > maxLength) {
maxLength = length;
maxSum = sum;
i--;
}
}
// ...
注意:我为 maxLength
和 maxSum
添加了初始化,以使用可能的最小整数来计算负数。
关于java - 最长递增子序列的长度和总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33244424/
我正在尝试编写一个名为 map-longest 的 Clojure 实用函数(感谢备用名称建议)。该函数将具有以下“签名”: (map-longest fun missing-value-seq c1
为什么我创建了一个重复的线程 我在阅读后创建了这个线程 Longest increasing subsequence with K exceptions allowed .我意识到提出问题的人并没有真
我正在编写一个 Sub 来识别 1 到 1000 之间最长的 Collatzs 序列。由于我刚刚开始学习 VBA,我想知道如何添加过程来计算每个序列的长度。 Sub Collatz() Dim i
我正在编写一个 Sub 来识别 1 到 1000 之间最长的 Collatzs 序列。由于我刚刚开始学习 VBA,我想知道如何添加过程来计算每个序列的长度。 Sub Collatz() Dim i
我正在尝试减去 CSV 中的两列以创建第三列“持续时间”结束时间 - 开始时间 每一行也对应一个用户 ID。 我可以创建一个仅包含“持续时间”列的 csv 文件,但我宁愿将其重定向回原始 csv。 例
我在 2018.04 玩这个最长的 token 匹配,但我认为最长的 token 不匹配: say 'aaaaaaaaa' ~~ m/ | a+? | a+ /; # 「a」
因此,按照规范规定最终用户/应用程序提供的给定变量(200 字节)的字节长度。 使用 python 字符串,字符串的最大字符长度是多少,满足 200 字节,因此我可以指定我的数据库字段的 max_le
我需要针对我们的Jenkins构建集群生成每周报告。报告之一是显示具有最长构建时间的作业列表。 我能想到的解决方案是解析每个从属服务器(也是主服务器)上的“构建历史”页面,对于作业的每个构建,都解析该
我正在构建一个 iOS 应用程序,它将流式传输最长为 15 秒的视频。我阅读了有关 HLS 的好文章,因此我一直在对片段大小为 5 秒的视频进行转码。如果视频的第一部分加载时间太长,那么我们可以在接下
docs for Perl 6 longest alternation in regexes punt to Synopsis 5记录 longest token matching 的规则.如果不同的
我是一名优秀的程序员,十分优秀!