[英]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 = true
和isDescending = 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的提議不同:
ascending
和descending
為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.