示例输入#1
isSorted([1,3,5,7})
样本输出#1
true
示例输入#2
isSorted({11,9,2,-5})
样本输出#2
true
示例输入#3
isSorted({1,2,3,4,-1,-2})
public boolean isSorted(int[] arr){
boolean isSorted = false;
if(arr.length==1)
return true;
for(int i=0;i<arr.length-1;i++)
{
if(arr[i]<arr[i+1])
{
isSorted = true;
}
else if(arr[i]>arr[i+1])
{
isSorted = true;
}
else
isSorted = false;
if(isSorted != true)
return isSorted;
}
return isSorted;
}
我的代码中的一些测试用例没有通过 参数'{24,27,30,31,34,37,40,42}'通过 参数'{1,3,5,7,4}'失败
答案 0 :(得分:4)
您正在尝试使用单个boolean
变量来保留两位信息,但这不起作用。这里需要两个boolean
- 一个表示数组按升序排序,另一个表示数组按降序排序。
准备两个变量isAscending = true
和isDescending = true
。按照现在的方式浏览数组,如果检测到反转,则将相应的变量设置为false
。永远不要再将这些变量设置为true
,因为单个反转会破坏排序顺序。
if (arr[i]<arr[i+1]) isDescending = false;
if (arr[i]>arr[i+1]) isAscending = false;
这就是你需要做的一切。循环结束后,isAscending || isDescending
表达式会给出答案。
要加快退出for
循环,请使用此终止条件:
i<arr.length-1 && (isAscending || isDescending)
答案 1 :(得分:1)
逻辑:
答案 2 :(得分:0)
我有一个与安德烈亚斯不同的命题:
ascending
和descending
初始化为true
ascending = ascending && previousElement <= currentElement
ascending || descending
答案 3 :(得分:0)
您需要另一个var来表示排序:升序或降序
short srt = 0;//-1 descending, +1ascending
然后比较两个第一个val来决定排序感,所以我建议这个解决方案:
public boolean isSorted(int[] arr){
short srt = 0;//-1 descending, +1ascending
if(arr.length <= 2)
return true;
else {
if(arr[0] < arr[1])
srt = 1;
else
srt = -1
for(int i=1;i<arr.length-1;i++)
if((arr[i] < arr[i+1] && srt = -1) || (arr[i] > arr[i+1] && srt = 1)
return false;
}
return true;
}