package animation threejs callback vue自定义事件 vue开发 后台模板下载 mysql当前时间减一天 java三维数组 查看kafka消费情况 js回调函数写法 matlab中axis oracle可视化工具 linux查看防火墙 dwf文件怎么转成dwg mysql 选择数据库 react python加法 python编程教程 java实例 安装java环境 java8的新特性 java安装环境 配置java开发环境 java时间转换 java获取现在时间 java游戏开发 javascript案例 脚本软件 ps怎么插入表格 如何给黑白照片上色 系统维护工具 办公室复印机使用方法 游戏linux正则表达式 cmd命令数字雨 edquota bin文件编辑器 手机刷机助手 刻刀工具 画图橡皮擦怎么放大
当前位置: 首页 > 学习教程  > 编程语言

JavaScript / TypeScript for LeetCode (115)

2020/9/19 16:26:53 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

是差点运气,可我一直在努力!

当前进程:

  • 开始时间:2020.6.27
  • 结束时间:undefined

GitHub仓库:https://github.com/Cundefined/JavaScript-or-TypeScript-for-LeetCode

1、题目要求

( 剑指 Offer 11 ) 旋转数组的最小数字

2、解题思路

方法:先考虑翻转分界区再二分搜索

参考【154.Find Minimum in Rotated Sorted Array II1、预判,输入数组只有一个元素,则返回第一个元素即为最小值
2、创建二分搜索的两个指针,初始分别指向数组开头和结尾
3、先判断给定数组是否被反转,若没反转就直接返回第一个元素即最小值
4while循环,left<right时,一直搜索:
     4.1、计算mid中间位置
     4.2、开始二分搜索

2.1、JavaScript Solution

/**
 * @param {number[]} numbers
 * @return {number}
 */
var minArray = function (numbers) {
  // 1、预判,输入数组只有一个元素,则返回第一个元素即为最小值
  if (numbers.length === 1) {
    return numbers[0];
  }
  // 2、创建二分搜索的两个指针,初始分别指向数组开头和结尾
  let left = 0;
  let right = numbers.length - 1;

  // 3、先判断给定数组是否被反转,若没反转就直接返回第一个元素即最小值
  if (numbers[right] > numbers[left]) {
    return numbers[0];
  }

  // 4、while循环,left<right时,一直搜索:
  while (left < right) {
    // 4.1、计算mid中间位置
    let mid = Math.floor(left + (right - left) / 2);

    // 4.2、开始二分搜索:
    if (numbers[mid] < numbers[right]) {
      right = mid;
    } else if (numbers[mid] > numbers[right]) {
      left = mid + 1;
    } else {
      right--;
    }
  }

  return numbers[right];
};

2.2、TypeScript Solution

function minArray(numbers: number[]): number {
  // 1、预判,输入数组只有一个元素,则返回第一个元素即为最小值
  if (numbers.length === 1) {
    return numbers[0];
  }
  // 2、创建二分搜索的两个指针,初始分别指向数组开头和结尾
  let left: number = 0;
  let right: number = numbers.length - 1;

  // 3、先判断给定数组是否被反转,若没反转就直接返回第一个元素即最小值
  if (numbers[right] > numbers[left]) {
    return numbers[0];
  }

  // 4、while循环,left<right时,一直搜索:
  while (left < right) {
    // 4.1、计算mid中间位置
    let mid: number = Math.floor(left + (right - left) / 2);

    // 4.2、开始二分搜索:
    if (numbers[mid] < numbers[right]) {
      right = mid;
    } else if (numbers[mid] > numbers[right]) {
      left = mid + 1;
    } else {
      right--;
    }
  }

  return numbers[right];
}

本文链接: http://www.dtmao.cc/news_show_200426.shtml

附件下载

上一篇:C++加载素材

下一篇:dvwa之sql injection

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?