数据结构与算法之二分查找及场景应用(Java)

数据结构与算法-初识算法(内含LeedCode题) 定义​ 在计算机科学领域,数据结构是一种数据组织、管理和存储格式,通常被选择用来高效访问数据​ 说白了,数据结构是一种存储和组织数据的方式,旨在便于访问和修改接下来我们通过对一个非常著名的二分查找算法的讲解来认识一下算法。 阅读详情

目录

1.二分查找介绍

2.场景应用

2.1 两层循环

2.2 利用二分查找

2.3 维度对比


1.二分查找介绍

参考上一篇文章:数据结构与算法之二分查找及场景应用(Java)-优快云博客

2.场景应用

数组求和:

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]

提示:

  • 2 <= nums.length <= 104
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109
  • 只会存在一个有效答案

2.1 两层循环

public static int[] toSum(int[] nums, int target) {
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[i] + nums[j] == target) {
                    return new int[]{i + 1, j + 1};
                }
            }
        }
        return new int[]{};
    }

2.2 利用二分查找

    public static int[] toSumBinarySearch(int[] nums, int target) {
        //先把数组转换成二维数组
        int[][] newNums = new int[nums.length][2];
        for (int i = 0; i < nums.length; i++) {
            newNums[i][0] = nums[i];
            newNums[i][1] = i;
        }
        System.out.println("二维数组是" + Arrays.deepToString(newNums));
        //排序
        Arrays.sort(newNums, Comparator.comparingInt(o -> o[0]));
        System.out.println("排序之后的二维数组是" + Arrays.deepToString(newNums));
        for (int i = 0; i < newNums.length; i++) {
            int a = newNums[i][0];
            int b = target - a;
            int j = 0;
            if (b >= a) {
                j = binarySearch(newNums, i + 1, newNums.length-1, b);
            } else {
                j = binarySearch(newNums, 0, i - 1, b);
            }
            if (j != -1) {
                return new int[]{newNums[i][1], newNums[j][1]};
            }
        }
        return new int[]{};
    }

    //返回数组下标
    public static int binarySearch(int[][] arr, int left, int right, int val) {
        //int left = 0;
        //int right = arr.length - 1;
        int mid = 0;
        while (left <= right) {
            mid = (left + right) / 2;
            if (val == arr[mid][0]) {
                return mid;
            } else if (val > arr[mid][0]) {
                left = mid + 1;
            } else if (val < arr[mid][0]) {
                right = mid - 1;
            }
        }
        return -1;
    }

测试代码:

 public static void main(String[] args) {
        int[] arr = {3,2,4};
        System.out.println(Arrays.toString(toSumBinarySearch(arr, 6)));
    }

运行结果:

二维数组是[[3, 0], [2, 1], [4, 2]]
排序之后的二维数组是[[2, 1], [3, 0], [4, 2]]
[1, 2]

2.3 维度对比

算法时间复杂度空间复杂度代码复杂度
两层循环o(n²)o(1)简单
二分查找o(nlogn)o(n)较复杂

Java实现数组的高效二分查找算法 二分查找算法作为计算机科学中的一个经典搜索算法,凭借其高效的性能和易于实现的特点,成为处理有序数据集的重要工具。通过对二分查找原理的深入理解和应用,可以显著提升数据搜索的效率,特别是在大规模数据处理场景中表现突出。大O表示法用于描述函数的运行时间或空间需求如何随输入规模的增加而变化。例如,如果一个算法的时间复杂度是O(n),那么算法的执行时间将与输入数据的大小成线性关系增长。时间复杂度是评价算法性能的关键指标之一,理解不同算法的时间复杂度对于选择合适的算法至关重要。 阅读详情

相关推荐

基于Hadoop生态的大数据异常检测平台搭建

批处理:用Spark MLlib的LOF(局部异常因子,适合高密度数据)、(单类支持向量机,适合高维数据);流处理:用Flink ML的(实时聚类,检测离群点)、ADWIN(自适应滑动窗口,处理概念漂移)。数据层:用Flume/Kafka采集数据,HDFS存储,Hive管理元数据;计算层:用Spark处理离线批数据,Flink处理实时流数据;算法层:用孤立森林(批)、3σ原则(流)检测异常;可视化层:用Grafana做仪表盘,Prometheus+Alertmanager报警。这个平台能处理。

软件工程实践的博客 934

数据结构与算法13-二分查找算法上

今天我们讲一种针对有序数据集合的查找算法:二分查找(Binary Search)算法,也叫折半查找算法。二分查找的思想非常简单,很多非计算机专业的同学很容易就能理解,但是...

sinat_27143551的博客 293

C# WPF多页面间的数据共享(经典)

实现页面间的数据共享有很多方法,比如:①事件的发布订阅 ②委托③ioc容器④静态类等,这节主要通过静态的集合实现数据的添加和获取。

sf315418的博客 639

数据结构与算法 Java

一、数据结构 1. 数组 2. 链表 2.1 单链表 2.2 双向链表 2.3 约瑟夫环形链表 3. 栈 3.1 数组模拟栈 3.2栈的应用 (1)中缀表达式的计算 (2)中缀转后缀的计算 (3)前缀表达式 4. 哈希表(散列表) 5. 树 5.1 二叉树 5.2 顺序存储二叉树 5.3 线索化二叉树 5.4 树结构的实际应用 (1)堆排序 (2)赫夫曼树 (3)二叉排序树(BST) (4)平衡二叉树(AVL树/二叉搜索树) 6. 图 6.1 图的深度优先遍历

QiAn的博客 562

光电振荡器(OEO):从原理到应用,解锁高频微波信号新纪元

本文深入解析了光电振荡器(OEO)的核心原理与前沿应用。OEO通过巧妙的光-电-光转换机制,利用光学谐振腔产生高频、高纯度、低相位噪声的微波信号,有效突破了传统电子电路的频率瓶颈。文章详细拆解了其工作流程,并探讨了在雷达系统、高速光通信及精密测量等领域的硬核应用价值。

weixin_29231027的博客 367

乐鑫ESP32-C6产测全流程:RAM固件测试与阈值校准实战指南

Wi-Fi模组量产测试是保障IoT设备射频性能与硬件可靠性的关键环节,其核心在于基于RAM的无损固件加载、可配置的阈值判定机制及多工位协同控制。该流程依托串口协议与结构化配置(如JSON阈值文件、.bin测试固件),实现RF性能(fb_rssi、tx_power)、GPIO导通性、Flash ID识别与固件版本校验等原子化测试项的自动化执行。技术价值体现在避免Flash擦写风险、支持动态温补与在线学习校准,并无缝对接MES系统实现质量数据闭环。典型应用场景包括ESP32-C6/C3/S2等乐鑫全系Wi-Fi

weixin_35756690的博客 312

【JAVA面试】JAVA常考点之数据结构与算法(1)

JAVA常考点之数据结构与算法(1) JAVA常考点之数据结构与算法 目录 1、二分查找 1 2、冒泡排序 3 3、层序遍历二叉树 4 4、选择排序 5 5、反转单链表 6 6、插入排序 7 7、判断链表是否有环 8 8、快速排序 11 9、求二叉树最大的深度(宽度) 12 10、爬楼梯 13 11、合并两个有序链表...

阳阳的博客 1万+

Android实战——白天黑夜模式设置

白天黑夜模式是一种动态的UI模式,根据当前时间或用户设置的偏好,在白天和黑夜之间进行切换。它通过调整应用程序的颜色、亮度和其他可视化元素来提供更加舒适和易读的用户界面。

小旭的专栏 5229

(一)算法--查找算法顺序查找和二分查找(递归和非递归方式)

我们抛开二分查找算法,如果有这样的一个需求,需要在一些数字中找出有没有某个数字,我们应该怎么做?          1 首先我们会想到用什么数据结构存放这些数?          数据结构就是计算机存储组织、组织数据的方式。可以这样理解,生活中我们穿的衣服需要放到一个地方,衣服可以放到衣橱中,也可以放到行李箱中,也可以放到衣架中,这里的衣架、衣橱、和行李箱及是衣服的存放结构。所

Xinghf 8739

Halcon学习之一维测量(3)

带定位器的测量。首先看一下“定位”是什么意思?回答:比如我们测量一个芯片,这时候我们设置一个测量矩形,来沿着测量目标进行测量。但是下一张当芯片的位置发生变化时,测量矩形的位置就不对了,就不是沿着测量目标了。这样就不对了!芯片在转,测量矩形也要跟着一起转才行。这个时候就需要“定位”来起作用了!定位之后得到这个芯片的旋转角度之后,测量矩形可以跟着这个角度转。这就是“定位”+“测量”,这是我们工业视觉常用的一个手法,在Halcon里面也是有例子展现的。

deep_love1314的博客 788

Virtual Hard Disk version 2 (VHDX) 文件格式详解

VHDX 镜像格式详解 0. References windows github 1. Overview Microsoft 虚拟化产品中常用的映像格式是虚拟硬盘版本 2 (VHDX) 映像格式。该规范基于可用文档,并通过分析测试数据进行了增强。 VHDX 镜像格式种类 固定硬盘镜像 动态硬盘镜像 差异硬盘镜像 VHDX 镜像文件由以下元素构成: file (type) identifier 2x image headers 2x region tables log or metadata journ

圣三一 2697

Java数据结构与算法综述

数据结构 1. 数组 2. 链表 3. 栈 4. 队列 5. 哈希表 6. 树 7. 图 8. 堆 9. 字典树(Trie) 10. 并查集 11. 哈希集合 12. 哈希映射(哈希表) 算法 1. 排序算法 2. 搜索算法 3. 动态规划 4. 图算法 5. 字符串匹配算法 6. 数学算法 7. 贪心算法 8. 分治算法 9. 回溯算法 10. 网络流算法 11. 随机化算法 12. 位运算算法 13. 哈希算法

横竖撇折点 1314

Captcha must be filled out,解决Kaggle新用户注册无法弹出验证提示的问题

Captcha must be filled out

weixin_46713695的博客 5万+

数据结构与算法(java语言描述)

数据结构Java语言描述

wtt12344321的博客 1387

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

2022-07-03 数据结构与算法-二分查找、跳表

二分查找也叫折半查找,针对有序数据,依赖数组结构来存储元素,时间复杂度O(n); 不适合数据量太大,对于1G的元素那么就需要1G的连续存储空间; 常见变形问题(存在多个相同的值):需要维护多级索引,通过索引达到快速定位到元素位置;保证元素有序, 解决链表查询问题;时间复杂度O(n*logn),空间复杂度O(n)。 主要解决了:范围查询,支持查询给定区间范围...

不爱吃奶昔(zsl0)的博客 203

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

数据结构-二分查找

定义在数学和计算机科学领域,算法是一系列有限的严谨指令,通常用于解决一类特定问题或执行计算algorithm不正式的说,算法就是任何定义优良的计算过程:接收一些值作为输入,在有限的时间内,产生一些值作为输出。定义在计算机科学领域,数据结构是一种数据组织、管理和存储格式,通常被选择用来高效访问数据数据结构是一种存储和组织数据的方式,旨在便于访问和修改接下来我们通过对一个非常著名的二分查找算法的讲解来认识一下算法。

weixin_38472038的博客 736

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Java查找之二分查找.

二分查找

m0_74195366的博客 444

java 固定长度队列_如何彻底搞懂 Java 数据结构?|优快云 博文精选

作者 | 张振华.Jack责编 | 郭芮出品 | 优快云 博客本文和大家一起来重温《Java数据结构》经典之作。Java数据结构要理解Java数据结构,必须能清楚何为数据结构?数据结构:Data_Structure,它是储存数据的一种结构体,在此结构中储存一些数据,而这些数据之间有一定的关系。而各数据元素之间的相互关系,又包括三个组成成分,数据的逻辑结构,数据的存储结构和数据运算结构。而一个数据...

weixin_36098968的博客 469

Java进阶(第六期): Arrays类(数组工具)、冒泡排序、选择排序、二分查找、【正则表达式】、Java正则爬取信息

Java进阶(第六期): Arrays类(数组工具)、冒泡排序、选择排序、二分查找、【正则表达式】、Java正则爬取信息

Forever_Hopeful的博客 1163

(8)《数据结构与算法》之查找算法

在java中,我们常见的查找有四种 顺序查找,也叫线性查找 二分查找,也叫折半查找 插值查找 斐波那契查找 我们将一一介绍着四种查找方式的思想以及程序的实现。 1.顺序查找 顺序查找 的查找过程为:从数组的第一个元素开始,逐个将要查找的关键字和数组中的元素进行比较,若存在相等,则返回对应的下标。反之,若至最后一个元素,其关键字和元素都不相等,则表明数组中不存在要查找的数,查找不成功 举例说明...

qq_41856594的博客 818

JAVA数据结构及刷题算法

一 创建数组 常用四种方式 1 int[] a = {1,2,3}; 2 int b = new int[]{1,2,3}; 3 int c = new int[3];(默认情况都是0) 4 ArrayList<integer> arr = new ArrayList<>();(不需要指定长度和元素) 二 添加元素 ArrayList<integer> arr = new ArrayList<>();//创建ArrayList对象 arr.add

qq_44665418的博客 531

java二叉树路径和等于指定值_如何彻底搞懂 Java 数据结构?|优快云 博文精选

作者 | 张振华.Jack责编 | 郭芮出品 | 优快云 博客本文和大家一起来重温《Java数据结构》经典之作。Java数据结构要理解Java数据结构,必须能清楚何为数据结构?数据结构:Data_Structure,它是储存数据的一种结构体,在此结构中储存一些数据,而这些数据之间有一定的关系。而各数据元素之间的相互关系,又包括三个组成成分,数据的逻辑结构,数据的存储结构和数据运算结构。而一个数据...

weixin_39865061的博客 93

Java中的数据结构

Java中的数据结构

yushan125的博客 411

数据结构与算法

目录前言第一部分 数据结构与算法概述第1节 数据结构的概念1.1 什么是数据结构1.2 常见的数据结构第2节 算法的概念2.1 什么是算法2.2 常见算法第3节 算法复杂度3.1 时间复杂度3.2 空间复杂度第二部分 数据结构与算法基础第1节 线性表1.1 数组1.2 链表1.3 栈1.4 队列第2节 散列表第3节 递归第4节 二分查找第三部分 数据结构与算法高级第1节 树第2节 排序1.1 冒泡排序1.2 快速排序1.3 堆排序1.4 计数排序1.5 桶排序第3节 字符串匹配第4节 图第5节 算法思维贪心

m0_46337171的博客 399

java数据结构和算法

数据结构 Array数组 和C/C++以及其他语言一样,Java中的数组有差不多一样的语法。只是Java中除了8中基本类型,数组也是作为对象处理的,所以创建对象时也需要使用new关键字。和大多数编程语言一样,数组一旦创建,大小便不可改变。  Java中有一个Arrays类,专门用来操作array。  Arrays中拥有一组static函数,  - equals():比较两个arr

mn_changeworld的博客 206
上一篇: 数据结构与算法之二分查找及场景应用(Java)
下一篇: 统一建模语言UML之类之间的关系
程序狗机器猫
博客等级 码龄6年 54粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值