簡體   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