【算法】二分查找(一)朴素二分

【算法】二分查找(一)朴素二分

目录

一、题目介绍

二、朴素二分

1.原理

二段性

时间复杂度(logn)

2.模板

四、提交代码


一、题目介绍

704. 二分查找 - 力扣(LeetCode)

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果 target 存在返回下标,否则返回 -1

你必须编写一个具有 O(log n) 时间复杂度的算法。


示例 1:

输入: nums = [-1,0,3,5,9,12], target = 9 输出: 4 解释: 9 出现在 nums 中并且下标为 4

示例 2:

输入: nums = [-1,0,3,5,9,12], target = 2 输出: -1 解释: 2 不存在 nums 中因此返回 -1

提示:

  1. 你可以假设 nums 中的所有元素是不重复的。
  2. n 将在 [1, 10000]之间。
  3. nums 的每个元素都将在 [-9999, 9999]之间。

二、朴素二分

1.原理二段性

二段性 一次算可排一边 每次在中间 固定算排二分之一暴力 是 纯用算来排,一次算 就只排此个优化 是 增有判来排,一次算 有额外多个

时间复杂度(logn)

算x次剩 未算排 最差直到最后剩1个后算排完

2.模板

int left = 0, right = nums.length - 1;

while(left <= right)

       int mid = left + (right + left) / 2;

       if(二段性排掉左边) left = mid + 1;  

       else if(二段性排掉右边) right = mid - 1;

       else return;

}

四、提交代码

public int search(int[] nums, int target) { int left = 0, right = nums.length - 1; while(left <= right) { //int mid = (left + right) / 2; 如果两个大数相加 就会和溢出算数范围,所以相加时得一方是确保小数 int mid = left + (right - left) / 2; // 一方小数求中点(算术和为mid 比right小 都没有溢出) if(nums[mid] > target) right = mid - 1; else if(nums[mid] < target) left = mid + 1; else return mid; } return -1; }

Read more

C++ STL set 系列完全指南:从底层原理、核心接口到实战场景

C++ STL set 系列完全指南:从底层原理、核心接口到实战场景

🔥草莓熊Lotso:个人主页 ❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受! 🎬 博主简介: 文章目录 * 前言: * 一. 容器分类:序列式容器与关联式容器的本质区别 * 二. set 系列核心原理:红黑树赋能的高效特性 * 三. set 核心接口实战:基于实操代码详解 * 3.1 初始化与插入:去重 + 自动排序 * 3.2 查找与删除:精准操作单个元素 * 3.3 区间操作:lower_bound 与 upper_bound * 四. multiset:支持重复 key 的关联式容器 * 五. set 系列的实战价值:解决实际开发问题

By Ne0inhk
【Java 开发日记】我们来说一说 JVM 的内存模型

【Java 开发日记】我们来说一说 JVM 的内存模型

目录 前言 JVM 内存结构(运行时数据区) 1. 程序计数器 2. Java 虚拟机栈 3. Java 堆 4. 方法区 5. 运行时常量池 直接内存 总结与对比 前言 JVM 内存结构(JVM Memory Structure) 和 Java 内存模型(Java Memory Model, JMM) 是两个不同的概念,但经常被混淆。 1. JVM 内存结构:指的是 JVM 在运行时,其内部的数据存储区域是如何划分的(如堆、栈、方法区等)。这是我们接下来要讲解的重点。 2. Java 内存模型:是一个概念和规范,它定义了多线程环境下,

By Ne0inhk
如何解决IDEA/Datagrip无法连接数据库的问题:解决方法为添加参数-Djava.net.preferIPv4Stack=true

如何解决IDEA/Datagrip无法连接数据库的问题:解决方法为添加参数-Djava.net.preferIPv4Stack=true

如何解决IDEA/Datagrip无法连接数据库的问题:解决方法为添加参数-Djava.net.preferIPv4Stack=true 引言 在开发过程中,我们常常使用集成开发环境(IDE)如 IntelliJ IDEA 或 JetBrains DataGrip 来与数据库进行交互。然而,有时可能会遇到无法连接数据库的情况,尤其是当使用新版的 IDEA 或 DataGrip 时。这种问题通常是由于网络配置或者 IDE 与数据库之间的兼容性问题引起的。 一种常见的解决办法是添加 JVM 参数 -Djava.net.preferIPv4Stack=true,以优先使用 IPv4 协议栈。这种方式能够有效解决因 IPv6 配置问题导致的数据库连接失败问题。本文将详细介绍如何通过修改 IDEA 或 DataGrip 的启动参数来解决这个问题。 文章目录 * 如何解决IDEA/Datagrip无法连接数据库的问题:解决方法为添加参数-Djava.net.

By Ne0inhk