📅  最后修改于: 2023-12-03 15:11:17.409000             🧑  作者: Mango
本篇文章介绍了一个用于检查数组是否已排序和旋转的 Javascript 程序。该程序利用了二分查找的思想,并结合了一些判断条件,可以高效地判断一个数组是否已排序和旋转。
以下是 Javascript 程序的代码:
/**
* 检查数组是否已排序和旋转
* @param {number[]} nums 目标数组
* @return {boolean} 是否已排序和旋转
*/
function isSortRotated(nums) {
let left = 0;
let right = nums.length - 1;
// 判断是否已排序
if (nums[left] < nums[right]) return false;
while (left < right) {
const mid = Math.floor((left + right) / 2);
// 判断是否旋转
if (nums[mid] > nums[mid + 1]) {
return true;
} else if (nums[left] <= nums[mid]) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return false;
}
该程序的主要思想是利用二分查找的思想查找旋转点,进而进行判断。具体步骤如下:
left
和 right
,分别指向数组的第一个元素和最后一个元素。nums[left] < nums[right]
,如果已排序则直接返回 false
。mid
。nums[mid] > nums[mid + 1]
,如果成立,则说明旋转点为 mid + 1
,返回 true
。nums[left] <= nums[mid]
。如果成立,说明旋转点在右半部分,更新 left = mid + 1
,否则旋转点在左半部分,更新 right = mid - 1
。left >= right
时,循环结束,说明数组没有旋转,返回 false
。以下是使用该程序的示例代码:
const nums1 = [1, 2, 3, 4, 5];
const nums2 = [3, 4, 5, 1, 2];
console.log(isSortRotated(nums1)); // false
console.log(isSortRotated(nums2)); // true
本篇文章介绍了一个用于检查数组是否已排序和旋转的 Javascript 程序。该程序利用了二分查找的思想,并结合了一些判断条件,可以高效地判断一个数组是否已排序和旋转。