java - 对于任何输入,程序似乎总是返回 1
问题描述
我正在尝试解决这个名为 Thanos Sort 的竞争性编程问题。有关问题的一些详细信息,请单击此链接:https ://codeforces.com/problemset/problem/1145/A 本次比赛很久以前就结束了,因此允许讨论。这似乎是一个非常简单的问题。我尝试使用递归来解决这个问题(重复地将数组分成两半并检查它是否已排序,如果我发现其中一半已排序,则返回一半长度的值)。这是我的代码:
import java.util.*;
import java.io.*;
class Main {
public static void main(String[] args) throws IOException{
BufferedReader b1 = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(b1.readLine());
for(int i = 0; i<T; i++) {
String vals [] = (b1.readLine()).split(" ");
int nums [] = new int[vals.length];
for(int j = 0; j<vals.length; j++) {
nums[j] = Integer.parseInt(vals[j]);
}
System.out.println(solve(nums));
}
}
public static int solve(int arr[]) {
int temp1 [] = new int[arr.length/2];
int temp2 [] = new int[arr.length/2];
for(int i = 0; i<arr.length/2; i++) {
temp1[i] = arr[i];
}
for(int i = arr.length/2; i<arr.length; i++) {
temp2[i-(arr.length/2)] = arr[i];
}
if(isSorted(temp1) == true) {
return temp1.length;
}
if(isSorted(temp2) == true) {
return temp2.length;
}
solve(temp1);
solve(temp2);
return 1;
}
public static boolean isSorted(int [] arr) {
for(int i = 0; i<arr.length; i++) {
if(arr.length == 1) {
return true;
}
if(i < arr.length-2 && arr[i] < arr[i+1]) {
continue;
}
else {
return false;
}
}
return true;
}
}
在任何数组上测试时,我的代码似乎总是输出 1。我知道我的代码末尾有“return 1”语句(我需要有这个,因为其他返回语句在 if 语句中)。我相信错误是由我的“return 1”语句引起的。有什么建议么?
解决方案
当你递归时,你丢弃了递归返回的值。改变
solve(temp1);
solve(temp2);
return 1;
类似于
return Math.max(1, Math.max(solve(temp1), solve(temp2)));
此外,您的isSorted
算法似乎被破坏了。迭代数组,检查每个值是否等于或大于前一个。喜欢,
public static boolean isSorted(int[] arr) {
for (int i = 1; i < arr.length; i++) {
if (arr[i] < arr[i - 1]) {
return false;
}
}
return true;
}
推荐阅读
- python - 如何找到唯一的 ID?
- ios - 使用 AVPlayer 时为什么我的视频无法在我的 UIView 中播放
- c - 模拟'&'同样终端自定义shell
- git - 缓存 GPG 密码以在 Mac 上进行 git 签名
- python - 如果在 2 个节点之间存在边,则矩阵取值为 1,否则取值为 0,来自邻接字典
- azure - 连接到 Azure 数据工厂中的 Microsoft Projects o-data 源
- reactjs - Bugsnag 显示缩小文件的 url 而不是上传源映射文件
- ruby-on-rails - 索引未显示搜索结果
- sql - Oracle SQL 总和
- javascript - 使用 JavaScript 使用新选项更新两个输入下拉菜单时遇到问题