这是悦乐书的第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+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

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

LeetCode算法题-Binary Search(Java实现)的更多相关文章

  1. LeetCode算法题-Binary Number with Alternating Bits(Java实现)

    这是悦乐书的第292次更新,第310篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第160题(顺位题号是693).给定正整数,检查它是否具有交替位:即它的二进制数的任意两 ...

  2. LeetCode算法题-Binary Tree Tilt(Java实现)

    这是悦乐书的第263次更新,第276篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第130题(顺位题号是563).给定二叉树,返回整棵树的倾斜度.树节点的倾斜被定义为所有 ...

  3. LeetCode算法题-Binary Watch(Java实现)

    这是悦乐书的第216次更新,第229篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第84题(顺位题号是401).二进制手表顶部有4个LED,代表小时(0-11),底部的6 ...

  4. LeetCode算法题-Binary Tree Paths(Java实现-3种解法)

    这是悦乐书的第199次更新,第206篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第62题(顺位题号是257).给定二叉树,返回所有根到叶路径.例如: 输入: 1 / \ ...

  5. LeetCode算法题-Binary Tree Level Order Traversal II(Java实现)

    这是悦乐书的第165次更新,第167篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第24题(顺位题号是107).给定二叉树,返回其节点值的自下而上级别顺序遍历(即从左到右 ...

  6. LeetCode算法题-Heaters(Java实现)

    这是悦乐书的第239次更新,第252篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第106题(顺位题号是475).冬天来了!您在比赛期间的第一份工作是设计一个固定温暖半径 ...

  7. LeetCode算法题-Sqrt(Java实现)

    这是悦乐书的第158次更新,第160篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第17题(顺位题号是69). 计算并返回x的平方根,其中x保证为非负整数. 由于返回类型 ...

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

    这是悦乐书的第284次更新,第301篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第152题(顺位题号是669).给定二叉搜索树以及L和R的最低和最高边界,修剪树以使其所 ...

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

    这是悦乐书的第295次更新,第314篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第163题(顺位题号是700).给定一个二叉搜索树(BST)的和正整数val. 你需要在 ...

随机推荐

  1. MT2017笔试题

    一.大富翁游戏 1.题目 大富翁游戏,玩家根据骰子的点数决定走的步数,即骰子点数为1时可以走一步,点数为2时可以走两步,点数为n时可以走n步.求玩家走到第n步(n<=骰子最大点数且是方法的唯一入 ...

  2. 我曾做过陈士成,也做过孔乙己,还做过阿Q

    一. 我现在是陈士成,陈士成现在是我.为什么这么说呢? 那年那天,天刚微微亮,似乎还在打着哈欠.我和父亲去得很早,为的就是在“小升初的考试成绩榜单”前面占一个有利的位置.我不记得当时穿的厚还是不厚,体 ...

  3. PYTHON BS 四大对象

    BeautifulSoup是灵活又方便的网页解析库,处理搞笑,支持多种解析器利用它不用编写正则表达式即可方便地实现网页信息的提取BS的四大对象:1.TagTag就是HTML中的一个个标签,例如:< ...

  4. 如何通过js调用接口

    例如一个接口的返回值如下:var returnCitySN = {"cip": "221.192.178.158", "cid": &quo ...

  5. RabbitMQ学习笔记(一) Hello World

    RabbitMQ是做什么的? RabbitMQ可以类比现实生活中的邮政服务. 现实中邮件服务处理的是邮件,发件人写好信件投入邮箱,邮递员收取信件存入邮局,邮局根据信件地址,分配邮递员投递信件到指定地点 ...

  6. 在使用 Git pull 时候报错 error: inflate

    在使用 Git pull 时候报错 error: inflate 具体的错误是 这样的 error: inflate: data stream error (unknown compression m ...

  7. [Leetcode]100. Same Tree -David_Lin

    Given two binary trees, write a function to check if they are equal or not. Two binary trees are con ...

  8. HBase学习——4.HBase过滤器

    1.过滤器 基础API中的查询操作在面对大量数据的时候是非常苍白的,这里Hbase提供了高级的查询方法:Filter.Filter可以根据簇.列.版本等更多的条件来对数据进行过滤,基于Hbase本身提 ...

  9. 【bug】----- Git上传文件错误导致本地代码丢失

    1.问题描述:通过Git上传本地文件,在git commit操作后本地未上传的代码全部丢失... 2.解决: 第一步:在项目目录下打开Git Bash: 第二步:输入 git reflog 第三步:在 ...

  10. 痞子衡嵌入式:并行接口NAND标准(ONFI)及SLC Raw NAND简介

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是ONFI标准及SLC Raw NAND. NAND Flash是嵌入式世界里常见的存储器,对于嵌入式开发而言,NAND主要分为两大类:S ...