1752. Check if Array Is Sorted and Rotated
Problem
Given an array nums, return true if the array was originally sorted in non-decreasing order, then rotated some number of positions (including zero). Otherwise, return false.
There may be duplicates in the original array.
Note: An array A rotated by x positions results in an array B of the same length such that A[i] == B[(i+x) % A.length], where % is the modulo operation.
https://leetcode.com/problems/check-if-array-is-sorted-and-rotated/
Example 1:
Input:
nums = [3,4,5,1,2]
Output:true
Explanation:[1,2,3,4,5]is the original sorted array.
You can rotate the array byx = 3positions to begin on the the element of value 3:[3,4,5,1,2].
Example 2:
Input:
nums = [2,1,3,4]
Output:false
Explanation: There is no sorted array once rotated that can make nums.
Example 3:
Input:
nums = [1,2,3]
Output:true
Explanation:[1,2,3]is the original sorted array.
You can rotate the array byx = 0positions (i.e. no rotation) to make nums.
Constraints:
1 <= nums.length <= 1001 <= nums[i] <= 100
Test Cases
class Solution:
def check(self, nums: List[int]) -> bool:import pytest
from solution import Solution
@pytest.mark.parametrize('nums, expected', [
([3,4,5,1,2], True),
([2,1,3,4], False),
([1,2,3], True),
])
@pytest.mark.parametrize('sol', [Solution()])
def test_solution(sol, nums, expected):
assert sol.check(nums) == expected
Thoughts
遍历数组,统计数字变小的次数,如果超过一次就不是循环有序数组。要注意数组的第一个数字和最后一个数字也要比较。
时间复杂度 O(n),空间复杂度 O(1)。
Code
class Solution:
def check(self, nums: list[int]) -> bool:
prev = nums[-1]
down = 0
for num in nums:
if num < prev:
down += 1
if down > 1:
return False
prev = num
return True
评论需要 JavaScript。