2021-09-21:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。要求:设计并实现时间复杂度为 O(log n) 的算法。

福大大 答案2021-09-21:

二分法。
时间复杂度:O(N)。
空间复杂度:O(1)。

代码用golang编写。代码如下:

package main

import "fmt"

func main() {
arr := []int{1, 2, 3, 3, 4, 6}
target := 3
ret := searchRange(arr, target)
fmt.Println(ret)
ret = searchRange2(arr, target)
fmt.Println(ret)
} func searchRange(nums []int, target int) []int {
if len(nums) == 0 {
return []int{-1, -1}
}
L := lessMostRight(nums, target) + 1
if L == len(nums) || nums[L] != target {
return []int{-1, -1}
}
return []int{L, lessMostRight(nums, target+1)}
} func lessMostRight(arr []int, num int) int {
L := 0
R := len(arr) - 1
M := 0
ans := -1
for L <= R {
M = L + (R-L)>>1
if arr[M] < num {
ans = M
L = M + 1
} else {
R = M - 1
}
}
return ans
} func searchRange2(nums []int, target int) []int {
if len(nums) == 0 {
return []int{-1, -1}
}
lv := NearestIndex(nums, target)
rv := NearestIndex2(nums, target)
if lv == -1 {
return []int{-1, -1}
}
if rv == -1 {
return []int{-1, -1}
}
if lv > rv {
return []int{-1, -1}
}
return []int{lv, rv}
} // 在arr上,找满足>=value的最左位置
func NearestIndex(arr []int, v int) int {
L := 0
R := len(arr) - 1
index := -1 // 记录最左的对号
for L <= R {
mid := L + (R-L)>>1
if arr[mid] >= v {
index = mid
R = mid - 1
} else {
L = mid + 1
}
}
return index
} // 在arr上,找满足<=value的最右位置
func NearestIndex2(arr []int, v int) int {
L := 0
R := len(arr) - 1
index := -1 // 记录最右的对号
for L <= R {
mid := L + (R-L)>>1
if arr[mid] <= v {
index = mid
L = mid + 1
} else {
R = mid - 1
}
}
return index
}

执行结果如下:


左神java代码

2021-09-21:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。要的更多相关文章

  1. 在排序数组中查找元素的第一个和最后一个位置(给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。)

    示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: [3,4] 示例 2: 输入: nums = [5,7,7,8,8,10], target = 6 输出 ...

  2. 刷题之给定一个整数数组 nums 和一个目标值 taget,请你在该数组中找出和为目标值的那 两个 整数

    今天下午,看了一会github,想刷个题呢,就翻出来了刷点题提高自己的实际中的解决问题的能力,在面试的过程中,我们发现,其实很多时候,面试官 给我们的题,其实也是有一定的随机性的,所以我们要多刷更多的 ...

  3. 给定一个整数数组 nums 和一个目标值 target,求nums和为target的两个数的下表

    这个是来自力扣上的一道c++算法题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案 ...

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

    /** * 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标. * * 你可以假设每种输入只会对应一个答案.但是,数组中 ...

  5. Leetcode33--->Search in Rotated Sorted Array(在旋转数组中找出给定的target值的位置)

    题目: 给定一个旋转数组,但是你不知道旋转位置,在旋转数组中找出给定target值出现的位置:你可以假设在数组中没有重复值出现 举例: (i.e., 0 1 2 4 5 6 7 might becom ...

  6. LeetCode1237找出给定方程的正整数解

    题目 给定方程f和值z,找出给定方程f(x,y)=z的正整数解x,y.f(x,y)关于x.y都是严格单调的. 题目保证 f(x, y) == z 的解处于 1 <= x, y <= 100 ...

  7. Codeforces Round #450 (Div. 2) B. Position in Fraction【数论/循环节/给定分子m 分母n和一个数c,找出c在m/n的循环节第几个位置出现,没出现过输出-1】

    B. Position in Fraction time limit per test 1 second memory limit per test 256 megabytes input stand ...

  8. 【c语言】数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字

    题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 比如输入一个长度为9的数组{1,2.3.2,2.2.5,4.2}, 因为数组中数字2出现了5次,超过数组的长度的一半,因此输出2 ...

  9. 最接近的三数之和(给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数, 使得它们的和与 target 最接近。返回这三个数的和)

    例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. 与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2). 思路:首先对数组进行排序     ...

  10. 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数 例如给定nums = [2,7,11,15],target = 9

    python解决方案 nums = [1,2,3,4,5,6] #假如这是给定的数组 target = 9 #假如这是给定的目标值 num_list = [] #用来装结果的容器 def run(nu ...

随机推荐

  1. Javaweb项目和Maven项目的相关导包

    Javaweb项目的学习大致需要一下几个导包: 以上几个包需要导入到WEB-INF目录下的lib文件夹里面,主要操作如下: 1.新建一个lib文件夹(在WEB-INF目录下) 2.右键lib文件夹,选 ...

  2. ZOJ 3735 Josephina and RPG (概率dp)

    题意:给你一个n,然后给你C(n,3)个队伍, 给你每个队伍之间的胜率. 接下来给你m个队伍,让你依次跟他们比赛,开始你能选择任意的队伍,如果你打赢了一支队伍,你可以选择换成输给你的这个队伍或者不换, ...

  3. LockSupport 详解

    更多内容,前往IT-BLOG LockSupport 用来创建锁和其他同步类的基本线程阻塞原语.简而言之,当调用 LockSupport.park时,表示当前线程将会等待,直至获得许可,当调用 Loc ...

  4. CTF-Web-PHP反序列化

    概念解释 PHP 反序列化漏洞又叫做 PHP 对象注入漏洞,我觉得这个表达很不直白,也不能说明根本的问题,不如我们叫他 PHP 对象的属性篡改漏洞好了(别说这是我说的~~) 反序列化漏洞的成因在于代码 ...

  5. 面试题锦集:1、数据库三大范式,2、mysql索引类型及作用,3、事务的特性和隔离级别

    目录 面试题集锦 一.数据库三大范式 二.mysql有哪些索引类型及作用 三.事务的特性和隔离级别 1.事务的四大特性 2.事务的隔离级别 3.什么是脏读.不可重复度.幻读 4.解决办法 面试题集锦 ...

  6. [小迪安全]笔记 day12、13 MySQL注入

    1. 简单案例 1.1 简易代码分析SQL注入原理 http://localhost:8085/sqli-labs/Less-2/index.php?id=2 id=2 正常查询 http://loc ...

  7. PVE Cloud-INIT 模板配置

    PVE Cloud-INIT 模板配置 Cloud-init是什么 Cloud-init是开源的云初始化程序,能够对新创建弹性云服务器中指定的自定义信息(主机名.密钥和用户数据等)进行初始化配置.通过 ...

  8. Python 人工智能 5秒钟偷走你的声音

    介绍 Python 深度学习AI - 声音克隆.声音模仿,是一个三阶段的深度学习框架,允许从几秒钟的音频中创建语音的数字表示,并用它来调节文本到语音模型,该模型经过培训,可以概括到新的声音. 环境准备 ...

  9. 迁移学习《Pseudo-Label : The Simple and Efficient Semi-Supervised Learning Method for Deep Neural Networks》

    论文信息 论文标题:Pseudo-Label : The Simple and Efficient Semi-Supervised Learning Method for Deep Neural Ne ...

  10. MySQL笔记之一致性视图与MVCC实现

    一致性读视图是InnoDB在实现MVCC用到的虚拟结构,用于读提交(RC)和可重复度(RR)隔离级别的实现. 一致性视图没有物理结构,主要是在事务执行期间用来定义该事物可以看到什么数据. 一.Read ...