给定一个长度为整数的序列并打印最长排序子序列的长度。如果存在多个相等最大长度的子序列,则首先出现的子序列(索引最小的子序列)将用于输出
对于序列:8 2 3 4 5 6 0 10 26 24.最大长度为5.这是我到目前为止的代码。感谢你们。 注意:我不认为使用数组。我必须使用Ctrl + Z来显示最大排序子序列长度。
import java.io.IOException;
public class RepeatingCharacterPositions {
public static void main(String[] s) throws IOException {
int counter = 0;
int inputValue;
int previousNum = 0;
int nextNum;
while ((inputValue = System.in.read()) != -1) {
nextNum = (int) inputValue;
if (previousNum < nextNum) {
counter++;
} else if (previousNum > nextNum) {
continue;
}
previousNum = nextNum;
}
System.out.println("Number of repeating " + counter);
}
}
答案 0 :(得分:0)
一些注意事项:
您没有处理两个连续的相等值,至少没有明确说明。你应该考虑在你的测试中使用&gt; =或&lt; =。
if (previousNum < nextNum)
{
counter++;
}
else if (previousNum > nextNum)
{
if(counter > longestSeq)
{
longestSeq = counter;
}
counter = 1;
}
previousNum = nextNum;
答案 1 :(得分:0)
我相信你错过了一些东西。
counter
达到的最高价值 int
获取System.in
,您应该使用提供方法Scanner
Scanner#nextInt
if (previousNum <= nextNum)
counter
“重置”为 1 的值(因为任何数字本身都是有序序列 长度1 )例如:
public static void main(final String[] s) {
int counter = 0;
int highestCount = 0;
int previousNum = 0;
int position = 0;
int latestStartingPosition = 0;
int startingPosition = 0;
int inputValue;
try (final Scanner sc = new Scanner(System.in)) {
while ((inputValue = sc.nextInt()) != -1) {
if (previousNum <= inputValue) {
counter++;
if (counter > highestCount) {
highestCount = counter;
startingPosition = latestStartingPosition;
}
} else {
latestStartingPosition = position;
counter = 1;
}
previousNum = inputValue;
position++;
}
}
System.out.println("starting pos: " + startingPosition);
System.out.println("Number of repeating positions: " + highestCount);
}
我希望它有所帮助!
编辑:回答评论中提出的其他问题。
要获得最长有序序列开头的索引,您必须:
int
随时了解您当前的位置counter
时,此值都会更改。counter
达到的最高价值时,请保存该信息。请参阅上面代码中的更新示例:)
答案 2 :(得分:0)
除了ccjmne所指出的,你总是可以使用一个单独的方法来做到这一点:
public class RepeatingCharacterPositions {
public static int findLongestSorted(int[] array) {
int maxCount = 0, count = 0;
int prev = array[0];
for(int num : array) {
if(prev <= num) {
count++;
} else {
count = 1;
}
if(count > maxCount)
maxCount = count;
prev = num;
}
return maxCount;
}
public static void main(String[] s) throws IOException {
int[] arr = {8, 2, 3, 4, 5, 6, 0, 10, 26, 24};
System.out.println("Number of repeating positions " + findLongestSorted(arr));
}
}
请注意,prev
被初始化为数组中的第一个元素,因为只有一个元素的数组被视为已排序。执行程序后,将打印出
Number of repeating positions 5
如果在阵列上只测试一个元素,例如
int[] arr = {8};
将输出:
Number of repeating positions 1