赞
踩
二分算法:概念简单易懂、就是把一组有序数组、每次一分为二的去查找。
举例:超市买了一堆东西、结完账警报器响了。东西太多、一个一个拿出来警报器过一遍、太浪费时间。保安大哥将你买的东西一分为二、哪边响了、说明哪边有东西没结账。重复两三次、基本就定位了你没结账的物品。
在lertCode刷了一道有关的题
- 使用二分算法实现
-
- 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
-
-
- 来源:力扣(LeetCode)
- 链接:https://leetcode-cn.com/problems/binary-search
起初没明白题意的我直接一个for循环搞定、后来才知道、数据量太大时、这样太损耗性能了。
直接上代码
- var search = function (nums, target) {
- let low = 0,
- high = nums.length - 1; // 下标
- while (low <= high) {
- const mid = Math.floor((high - low) / 2) + low;
- const num = nums[mid];
- if (num === target) {
- return mid;
- } else if (num > target) {
- high = mid - 1;
- } else {
- low = mid + 1;
- }
- }
- return -1;
- };
-
- console.log("结果索引", search([1, 2, 3, 4, 5, 6, 7], 5));
起初我明白思路、但是没明白每个字段代表什么、大了断点看了两次才明白、low和high其实就是二分之后的下标范围、每一次根据传入的值判断是在左边还是右边、来决定范围的更改。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。