繁体   English   中英

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

[英]Given an array of integers as input, return true if the array is sorted. Note that the array can be sorted in either ascending or descending order

样本输入#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}'失败

您正在尝试使用单个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 isAscending || isDescending表达式为您提供了答案。

要加快退出for循环的速度,请使用以下终止条件:

i<arr.length-1 && (isAscending || isDescending)

逻辑:

  • 使用索引计数器遍历列表
  • 首先,前进索引,而后两个值相等
  • 如果下一个值小于当前值,则进行降序检查
  • 如果下一个值大于当前值,则进行升序检查
  • 验证所有剩余值都在升/降或相等

我的提议与Andreas的提议不同:

  • 初始化布尔值ascendingdescendingtrue
  • 存储项目0,从项目1开始进行迭代。当布尔值为true或true时,存储当前值并递增索引。 在每个循环中,更新两个布尔值(例如第一个布尔值: ascending = ascending && previousElement <= currentElement
  • 返回ascending || descending ascending || descending

您需要另一个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;

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM