给定一个整数数组作为输入,如果数组已排序,则返回true。请注意,数组可以按升序或降序排序

时间:2015-08-25 21:19:13

标签: java

示例输入#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}'失败

4 个答案:

答案 0 :(得分:4)

您正在尝试使用单个boolean变量来保留两位信息,但这不起作用。这里需要两个boolean - 一个表示数组按升序排序,另一个表示数组按降序排序。

准备两个变量isAscending = trueisDescending = 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)

我有一个与安德烈亚斯不同的命题:

  • 将布尔值ascendingdescending初始化为true
  • 存储项目0,从项目1开始迭代。当其中一个或布尔值为真时,存储当前值并增加索引。在每个循环期间,更新两个布尔值(例如,第一个布尔值:ascending = ascending && previousElement <= currentElement
  • return 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;

}