ETH官方钱包

前往
大廳
主題

LeetCode - 1752. Check if Array Is Sorted and Rotated 解題心得

Not In My Back Yard | 2023-05-10 12:00:10 | 巴幣 0 | 人氣 104

題目連結:


題目意譯:
給定一個陣列 nums,如果陣列原先是非遞減順序排列,只是其後被旋轉了若干位置(包含 0)的話,則回傳真(True);反之,回傳假(False)。

原始陣列中可能包含重複的數字。

注: 一陣列 A 旋轉 x 個位置將得到另一個長度相同的陣列 B 使得 A[i] == B[(i+x) % A.length],其中 % 為模除操作。

限制:
1 ≦ nums.length ≦ 100
1 ≦ nums[i] ≦ 100



範例測資:
範例 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。


解題思維:
(令 n = nums.length)
把 nums 複製一份並由非遞減順序排序(稱此陣列為 sorted)。

然後找到某個元素 nums[i] 恰好等於 sorted[0] 之後,之後就檢查 nums[i + 1] 是否等於 sorted[1] 、 nums[i + 2] 是否等於 sorted[2] 、……、nums[n - 1] 是否等於 sorted[n - i - 1],然後再檢查 nums[0] 是否等於 sorted[n - i]、……。

如果 sorted 都掃完之後都是一致的話,則代表 sorted 本身經過若干次旋轉後可以變為 nums;反之則代表不存在已排序的陣列旋轉後可得到 nums。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

追蹤 創作集

作者相關創作

更多創作