1752 檢查陣列是否經排序和輪轉得到(分析)

2021-10-19 13:03:03 字數 1767 閱讀 7802

1. 問題描述:

給你乙個陣列 nums 。nums 的源陣列中,所有元素與 nums 相同,但按非遞減順序排列。如果 nums 能夠由源陣列輪轉若干位置(包括 0 個位置)得到,則返回 true ;否則,返回 false 。源陣列中可能存在 重複項 。

注意:我們稱陣列 a 在輪轉 x 個位置後得到長度相同的陣列 b ,當它們滿足 a[i] == b[(i+x) % a.length] ,其中 % 為取餘運算。

示例 1:

輸入:nums = [3,4,5,1,2]

輸出:true

解釋:[1,2,3,4,5] 為有序的源陣列。

可以輪轉 x = 3 個位置,使新陣列從值為 3 的元素開始:[3,4,5,1,2] 。

示例 2:

輸入:nums = [2,1,3,4]

輸出:false

解釋:源陣列無法經輪轉得到 nums 。

示例 3:

輸入:nums = [1,2,3]

輸出:true

解釋:[1,2,3] 為有序的源陣列。

可以輪轉 x = 0 個位置(即不輪轉)得到 nums 。

示例 4:

輸入:nums = [1,1,1]

輸出:true

解釋:[1,1,1] 為有序的源陣列。

輪轉任意個位置都可以得到 nums 。

示例 5:

輸入:nums = [2,1]

輸出:true

解釋:[1,2] 為有序的源陣列。

可以輪轉 x = 5 個位置,使新陣列從值為 2 的元素開始:[2,1] 。

1 <= nums.length <= 100

1 <= nums[i] <= 100

2. 思路分析:

分析題目可以知道我們需要找出題目中的某些規律判定是否可以通過輪轉得到,第一種情況是nums中的陣列為非降序序列,所以不需要通過輪轉得到也即原序列就滿足題目的條件,第二種情況是需要輪轉得到原陣列中的非降序序列,類似於nums = [3,4,5,1,2]這種情況而且對於這種需要進行輪轉的我們需要判斷nums序列中降序的片段有多少個,當超過1個的時候明顯是不滿足條件的,所以nums陣列序列只能存在0個或者是1個降序序列,否則是不能夠通過輪轉得到原陣列的非降序序列的,我們可以在迴圈中使用乙個變數來累計降序的片段的個數這樣可以判斷是否可以通過輪轉得到,迴圈結束之後判斷兩種情況:當滿足降序序列的片段等於0(不需要通過輪轉得到)或者是降序序列片段個數等於1並且最後乙個元素小於等於第乙個元素(只要是觀察出規律就可以解決)即可以通過輪轉得到

3. **如下:

from typing import list

class solution:

def check(self, nums: list[int]) -> bool:

count = 0

for i in range(len(nums) - 1):

if nums[i] > nums[i + 1]:

count += 1

# 降序的數量只能是0或者是1

if count > 1: return false

# 全都是公升序或者是將降序後面的插入到最前面

return count == 0 or nums[-1] <= nums[0]

檢查陣列是否經排序和輪轉得到

1752.檢查陣列是否經排序和輪轉得到 難度簡單6收藏分享切換為英文接收動態反饋 給你乙個陣列nums。nums的源陣列中,所有元素與nums相同,但按非遞減順序排列。如果nums能夠由源陣列輪轉若干位置 包括 0 個位置 得到,則返回true 否則,返回false。源陣列中可能存在重複項。注意 我...

陣列排序和檢查陣列

氣泡排序 比較相鄰的元素,如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數 針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。public void ...

js檢查元素是否包括在陣列中

在系統中須要檢查稅率填寫的正確性,一定是國家規定的某幾種稅率,當然能夠通過if else進行校驗,可是還能夠使用定義乙個陣列然後校驗是否包括在元素中進行校驗。長處 加入稅率無需改動邏輯,僅僅須要在稅率陣列中加入就可以。array.prototype.contains function obj ret...