LeetCode算法题-Binary Search(Java实现)

leetcode刷题笔记-binary search 410.Split Array Largest Sum 还有一种dp的解法,没有二分法好,写在dp分类里面 思路:https://leetcode.com/problems/split-array-largest-sum/discuss/89817/Clear-Explanation%3A-8ms-Binary-Search-Java 用Go写的: func split... 阅读详情

这是悦乐书的第297次更新,第316篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第165题(顺位题号是704)。给定n个元素的排序(按升序)整数数组nums和目标值,编写一个函数来搜索nums中的目标。如果target存在,则返回其索引,否则返回-1。例如:

输入:nums = [-1,0,3,5,9,12],目标= 9

输出:4

说明:9存在于nums中,其索引为4


输入:nums = [-1,0,3,5,9,12],target = 2

输出:-1

说明:2在nums中不存在,因此返回-1


注意:

  • nums中的所有元素都是唯一的。

  • n将在[1,10000]范围内。

  • nums中每个元素的值将在[-9999,9999]范围内。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

使用二分查找。取数组的第一位和最后一位索引值,计算取出中间数做新索引,判断新索引对应的元素是否等于目标值,等于就直接返回新索引,小于就将开始索引重新赋值为中间索引加1,大于就将结束索引重新赋值为中间索引减1。

此解法的时间复杂度是O(log2(n)),空间复杂度是O(1)。

public int search(int[] nums, int target) {
    if (target < nums[0] || target > nums[nums.length-1]) {
        return -1;
    }
    int start = 0, end = nums.length-1;
    while (start <= end) {
        int mid = (end+start)/2;
        if (nums[mid] == target) {
            return mid;
        } else if (nums[mid] > target) {
            end = mid-1;
        } else {
            start = mid+1;
        }
    }
    return -1;
}

03 第二种解法

直接使用循环依次匹配,如果遍历完数组所有元素都没有匹配上,就返回-1。

此解法的时间复杂度是O(n),空间复杂度是O(1)。

public int search(int[] nums, int target) {
    if (target < nums[0] || target > nums[nums.length-1]) {
        return -1;
    }
    for (int i=0; i<nums.length; i++) {
        if (target == nums[i]) {
            return i;
        }
    }
    return -1;
}

04 第三种解法

因为数组元素的取值范围定了,我们可以使用新的数组,以旧数组元素值为索引,旧元素索引为值,最后以目标值为索引,在新数组中查找,如果其值为0,就返回-1,反之返回其值。

此解法的时间复杂度是O(n),空间复杂度是O(n)。

public int search(int[] nums, int target) {
    if (target < nums[0] || target > nums[nums.length-1]) {
        return -1;
    }
    int[] temp = new int[20000];
    for (int i=0; i<nums.length; i++) {
        temp[nums[i]+10000] = i+1;
    }
    return temp[target+10000] == 0 ? -1 : temp[target+10000]-1; 
}

05 小结

算法专题目前已日更超过四个月,算法题文章165+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

易康eCognition9.0分类|规则集和机器学习的方法的面向对象的多尺度分割分类 基于易康eCognition9.0软件的规则集和机器学习的方法的面向对象的多尺度分割分类 阅读详情

相关推荐

SigFit实战:从FEA到光学仿真的热力耦合分析全流程解析

在光机系统与芯片封装等精密工程领域,热与力的耦合效应是影响产品性能与可靠性的核心物理问题。有限元分析(FEA)是预测结构在热、力载荷下变形与应力的基础工具,但其结果通常无法直接用于评估光学性能。这需要一座桥梁,将物理场数据转化为光学设计语言。其核心原理在于数据映射与面形表征技术,例如通过泽尼克多项式拟合,将离散的节点位移分解为离焦、像散等标准光学像差。这项技术的工程价值在于,它实现了多物理场仿真的闭环,使工程师能在设计阶段精准预测热变形或应力对波前误差、调制传递函数等关键光学指标的影响。其典型应用场景包括高

weixin_28630185的博客 343

【LeetCode】十一、二分查找法:寻找峰值 + 二维矩阵的搜索

第一个想法是:先普通的二分查找value,返回-1后,说明不存在,那就再遍历这个数组,用双指针,当p1的值 < value && p2的值 > value时,return p1 + 1,但这样应该是复杂了。,如果有等于target的,那返回其下标,如果不存在,那就要插入到第一个比target大的值的位置,第一个大的值的下标则往后移动一位。在有序的集合里找一个数字,可以二分查找。找一个数,有序的情况下,直接遍历找,时间复杂度为O(n),用二分法,一半一半的砍着找,则时间复杂度为O(log n),更优。

llg___的博客 1315

从零开始:使用Labelme完成图像语义分割标注全流程

本文详细介绍了如何使用Labelme工具完成图像语义分割标注的全流程,从环境安装、数据准备到核心标注操作,并重点讲解了如何将标注结果转换为PASCAL VOC等深度学习框架可用的标准数据集格式。文章还提供了关键的避坑指南和高效技巧,帮助初学者快速上手,高效产出高质量的标注数据。

weixin_29073241的博客 493

LeetCode Binary Search专题

50.Pow(x, n) 题目链接:https://leetcode.com/problems/powx-n/ class Solution(object): def myPow(self, x, n): """ :type x: float :type n: int :rtype: float """ def pow2(t,n): if n==1: ..

qq_35565669的博客 253

[原创]Linux 802.11n CSI tool Monitor模式

Linux 802.11n CSI tool Monitor模式 使用AP模式的缺陷在于ping 命令速度比较慢,且不能精确控制发送的参数,比如接收的包数量是不可控的。Monitor模式可以调制发送速率、发包数量、发送天线个数、HT模式、short/long guard interval等等,因此调通Monitor模式是必须的。期间参考了博主沃一德的CSI Tool安装使用讲解,对他的工作表示感...

u014645508的博客 1万+

通信原理 | 随机数仿真 | 均匀、正态、双高斯、瑞利、莱斯、对数正态、nakagami、Suzuki分布的随机数仿真(matlab)

信道建模在通信系统设计和分析中扮演着至关重要的角色。它指的是使用数学和物理模型来描述和模拟无线或有线通信路径中的信号传播特性。

若北辰 1990

leetcode题解-binary search题目总结

前面一段时间刷完了二叉搜索部分的题目,现在闲下来写一个总结贴,主要针对这部分题目类型以及所使用的方法。有序数组查找目标值索引首先来说最简单的binary-search,应用在有序数组查找target值等问题中,一般会有两种解法,也就是binary-search问题中最关键的边界问题和更新方案的区别,这里推荐大家选择一种自己喜欢的方案用就可以,不用同时记住两种,反而会搞混,比如我都是用第一种:

呜呜哈的博客 1651

使用C#实现Padim算法的训练和推理:智能缺陷检测的前沿技术

Padim (Patch-based Deep Image Model) 是一种用于无监督异常检测的深度学习算法。它通过提取图像中的局部特征(patch),并在这些特征上构建一个正常样本的分布模型来识别异常。无监督学习:不需要标注数据,适用于缺乏标签的情况。局部特征提取:通过卷积神经网络提取图像的局部特征(patch)。低秩近似:利用低秩近似构建正常样本的协方差矩阵,有效降低计算复杂度。鲁棒性强:能够处理多种类型的缺陷和噪声。

墨夶的博客 1015

LeetCode算法题-Search in a Binary Search Tree(Java实现)

这是悦乐书的第295次更新,第314篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第163题(顺位题号是700)。给定一个二叉搜索树(BST)的和正整数val。 你需要在BST中找到节点的值等于给定val的节点。返回以该节点为根的子树。如果此节点不存在,则应返回null。例如: 鉴于树: 4 / \ 2 7 /...

小川的博客 151

华为OD机试 - 小扇和小船的数字游戏 - 二进制(Python/JS/C/C++ 2024 C卷 200分)

二进制表示:任何数 n 的二进制表示中,要找到下一个有相同数量的1的数,我们需要在最低位的0后面的最低位的1进行操作。右侧交换法则:找到右侧的第一个0,位于第一个1的左边,将这个0变成1(提升这个位),并将这个1变成0(下移这个位)。调整尾部1:为了得到最小的数,将所有低于已交换的1的位重置,使得所有1尽可能靠右。

学Java,找哪吒 1162

Windows远程桌面开发之九-虚拟显示器(Windows 10 Indirect Display 虚拟显示器驱动开发)

by fanxiushu 2019-06-24 转载或引用请注明原始作者。 这里与远程桌面关系不是太大,但这个部分是xdisp_virt远程控制程序的实现多显示器桌面扩展的子功能,因此也归为远程桌面开发一类。 这篇文章与之前发布的...

fanxiushu的专栏 2万+

LeetCode算法题-Trim a Binary Search Tree(Java实现)

这是悦乐书的第284次更新,第301篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第152题(顺位题号是669)。给定二叉搜索树以及L和R的最低和最高边界,修剪树以使其所有元素位于[L,R](R> = L)。可能需要更改树的根,因此结果应返回修剪后的二叉搜索树的新根。例如: 输入:L = 1 R = 2 1 / \ 0 2 输出: ...

小川的博客 215

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

java算法 library search_LeetCode算法题-Binary Search(Java实现)

这是悦乐书的第297次更新,第316篇原创01 看题和准备今天介绍的是LeetCode算法题中Easy级别的第165题(顺位题号是704)。给定n个元素的排序(按升序)整数数组nums和目标值,编写一个函数来搜索nums中的目标。如果target存在,则返回其索引,否则返回-1。例如:输入:nums = [-1,0,3,5,9,12],目标= 9输出:4说明:9存在于nums中,其索引为4输入:n...

weixin_36058685的博客 152

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

OV9734 DATASHEET,完整规格书

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

算法题库 java实现_LeetCode算法题-Binary Search(Java实现)

这是悦乐书的第297次更新,第316篇原创01 看题和准备今天介绍的是LeetCode算法题中Easy级别的第165题(顺位题号是704)。给定n个元素的排序(按升序)整数数组nums和目标值,编写一个函数来搜索nums中的目标。如果target存在,则返回其索引,否则返回-1。例如:输入:nums = [-1,0,3,5,9,12],目标= 9输出:4说明:9存在于nums中,其索引为4输入:n...

weixin_32185607的博客 147

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

search() java_LeetCode算法题-Search in a Binary Search Tree(Java实现)

这是悦乐书的第295次更新,第314篇原创01 看题和准备今天介绍的是LeetCode算法题中Easy级别的第163题(顺位题号是700)。给定一个二叉搜索树(BST)的和正整数val。 你需要在BST中找到节点的值等于给定val的节点。返回以该节点为根的子树。如果此节点不存在,则应返回null。例如:鉴于树:4/ \2 7/ \1 3以及搜索的价值val:2你应该返回这个子树:2/ \1...

weixin_29442195的博客 98

LeetCode算法题-Find Mode in Binary Search Tree(Java实现)

这是悦乐书的第246次更新,第259篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第113题(顺位题号是501)。给定具有重复项的二叉搜索树(BST),找到给定BST中的所有模式(最常出现的元素)。假设BST定义如下: 节点的左子树仅包含键小于或等于节点键的节点。 节点的右子树仅包含键大于或等于节点键的节点。 左右子树也必须是二叉搜索树。 例如: 鉴于BST [1,...

小川的博客 256

java算法 library search_LeetCode算法题-Search in a Binary Search Tree(Java实现)

这是悦乐书的第295次更新,第314篇原创01 看题和准备今天介绍的是LeetCode算法题中Easy级别的第163题(顺位题号是700)。给定一个二叉搜索树(BST)的和正整数val。 你需要在BST中找到节点的值等于给定val的节点。返回以该节点为根的子树。如果此节点不存在,则应返回null。例如:鉴于树:4/ \2 7/ \1 3以及搜索的价值val:2你应该返回这个子树:2/ \1...

weixin_39895684的博客 101

leetcode85java_LeetCode算法题-Find Mode in Binary Search Tree(Java实现)

这是悦乐书的第246次更新,第259篇原创01 看题和准备今天介绍的是LeetCode算法题中Easy级别的第113题(顺位题号是501)。给定具有重复项的二叉搜索树(BST),找到给定BST中的所有模式(最常出现的元素)。假设BST定义如下:节点的左子树仅包含键小于或等于节点键的节点。节点的右子树仅包含键大于或等于节点键的节点。左右子树也必须是二叉搜索树。例如:鉴于BST [1,null,2,2...

weixin_35353904的博客 202

LeetCode算法题-Convert Sorted Array to Binary Search Tree(Java实现)

这是悦乐书的第166次更新,第168篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第25题(顺位题号是108)。给定一个数组,其中元素按升序排序,将其转换为高度平衡的二叉搜索树。例如: 给定排序数组:[ -10,-3, 0, 5, 9] 一个可能的答案是:[0,-3, 9,-10,null,5],它代表以下高度平衡的二叉搜索树: 0 / ...

小川的博客 227

leetcode 99. Recover Binary Search Tree

复习数据结构:二叉查找树 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public cl

独钓寒江雪 343

Leetcode学习笔记:#1008. Construct Binary Search Tree from Preorder Traversal

Leetcode学习笔记:#1008. Construct Binary Search Tree from Preorder Traversal Return the root node of a binary search tree that matches the given preorder traversal. (Recall that a binary search tree is a ...

ccystewart的博客 232
上一篇: LeetCode算法题-Kth Largest Element in a Stream(Java实现)
下一篇: LeetCode算法题-Design HashSet(Java实现)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值