📌  相关文章
📜  用于检查数组是否已排序和旋转的 Javascript 程序(1)

📅  最后修改于: 2023-12-03 15:11:17.409000             🧑  作者: Mango

用于检查数组是否已排序和旋转的 Javascript 程序
简介

本篇文章介绍了一个用于检查数组是否已排序和旋转的 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;
}
程序解释

该程序的主要思想是利用二分查找的思想查找旋转点,进而进行判断。具体步骤如下:

  1. 设置左右指针 leftright,分别指向数组的第一个元素和最后一个元素。
  2. 首先判断是否已排序,即 nums[left] < nums[right],如果已排序则直接返回 false
  3. 进入循环,计算出中间点 mid
  4. 判断是否旋转,即判断 nums[mid] > nums[mid + 1],如果成立,则说明旋转点为 mid + 1,返回 true
  5. 如果没有旋转,则判断 nums[left] <= nums[mid]。如果成立,说明旋转点在右半部分,更新 left = mid + 1,否则旋转点在左半部分,更新 right = mid - 1
  6. 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 程序。该程序利用了二分查找的思想,并结合了一些判断条件,可以高效地判断一个数组是否已排序和旋转。