首页 > 试题广场 >

二分查找-II

[编程题]二分查找-II
  • 热度指数:190921 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
请实现有重复数字的升序数组的二分查找
给定一个 元素有序的(升序)长度为n的整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的第一个出现的target,如果目标值存在返回下标,否则返回 -1

数据范围:
进阶:时间复杂度,空间复杂度
示例1

输入

[1,2,4,4,5],4

输出

2

说明

从左到右,查找到第1个为4的,下标为2,返回2    
示例2

输入

[1,2,4,4,5],3

输出

-1
示例3

输入

[1,1,1,1,1],1

输出

0
头像 数据结构和算法
发表于 2021-03-31 16:57:47
精华题解 往左边逼近 public int search(int[] nums, int target) { //边界条件判断 if (nums == null || nums.length == 0) return -1; in 展开全文
头像 宫水三叶的刷题日记
发表于 2021-08-25 15:53:08
精华题解 朴素解法 一个朴素的解法是直接对 进行线性扫描,当第一次遇到 说明找到了答案。 代码: import java.util.*; public class Solution { public int search (int[] nums, int target) { in 展开全文
头像 棒棒糖🍭201906101800876
发表于 2021-07-20 11:31:44
精华题解 NC105 二分查找-II 1. 顺序查找 思路略。 class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 如果目标值存在返回下标,否则返回 -1 * @para 展开全文
头像 changed.
发表于 2021-07-17 16:52:32
精华题解 方法一:二分查找到指定元素后找到最左边 核心思想: 首先使用二分查找,寻找到一个与目标值相等的数,之后往左侧线性查找到最左边或到不等于目标值的元素 核心代码: class Solution { public: int search(vector<int>& nums, 展开全文
头像 Chiaa
发表于 2021-03-03 12:15:33
思路 普通的二分法查找,需要注意题目要求从左到右,返回第一个为target的下标 代码*(JAVA) import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 展开全文
头像 小猪部落
发表于 2021-03-13 17:16:22
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 如果目标值存在返回下标,否则返回 -1 * @param nums 展开全文
头像 子夜降晴空
发表于 2021-03-10 19:40:04
class Solution { public: int search(vector<int>& nums, int target) { return(helper(nums, target, 0, nums.size() - 1)); } 展开全文
头像 只为刷题
发表于 2021-05-24 15:05:58
JAVA二分法的思想:思路:设置三个哨兵位置(min max mid)初始时候mid = (min +max)/2 的位置然后用被查找的对象数和mid去比较,如果大于mid,则表示对象数在mid的右侧,此时更新查找范围,把min变为mid+1 (此处用数组下标说明)如果小于mid,则表示对象数在 展开全文
头像 小陆要懂云
发表于 2021-08-04 17:27:23
auto result=equal_range(nums.begin(), nums.end(), target); if(result.first==result.second) return -1; else return result.first 展开全文
头像 凯东
发表于 2021-03-28 20:24:14
感觉这道题题目有点问题,没有说是取出现的第一个还是最后一个,通过测试用例结果来看应该是取第一个出现的值。所以在得到匹配的值mid的时候,还需要做两个判断: 如果已经是数组第一个数据,直接返回mid的值 如果不是数组第一个数据,那么前面的数如果不等于当前mid的数,返回mid即可 上述均不满足的时候 展开全文
头像 诗云panther
发表于 2021-08-16 17:53:44
class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 返回符合牛牛希望的分法中最小的差值是多少 * @param n int整型 代表共有多少数 * @param a 展开全文
头像 觅杳
发表于 2021-04-08 18:15:53
主体为非递归的二分查找。由于题目要求得到第一个等于target的数据的下标,故而在nums[mid] == target时,多加了一个循环,以查找第一个等于target的数据。class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修 展开全文
头像 诗云panther
发表于 2021-08-06 11:47:41
class Solution {public: int search(vector<int>& nums, int target) { return(helper(nums, target, 0, nums.size() - 1)); } int 展开全文
头像 BrainerGao
发表于 2021-10-04 18:21:39
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 如果目标值存在返回下标,否则返回 -1 * @param nums int整型vector * 展开全文