100. Search Insert Position

2024-05-12 01:08
文章标签 100 position insert search

本文主要是介绍100. Search Insert Position,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.

You may assume no duplicates in the array.

Here are few examples.
[1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0

Subscribe to see which companies asked this question

分析:给定一个排好序的非递减数组和关键字target,如果target在数组中存在,则返回target在数组中第一次出现的下标。如果target不在数组中存在 ,则返回target应该插入的下标。前半部分采用二分查找的方式找元素下标,如果查找到则返回的下标为该元素在数组中首次出现的下标。用二分查找得到一个下标low,由于初始化和循环的控制条件,这个low在nums的合法下标内,所以可以直接判断如果nums[low]>=target, 则返回low即可。否则返回low+1.

/*** 给定一个排好序的非递减数组和关键字target,如果target在数组中存在,则返回target在数组中第一次出现的下标。* 如果target不在数组中存在 ,则返回target应该插入的下标。* 前半部分采用二分查找的方式找元素下标,如果查找到则返回的下标为该元素在数组中首次出现的下标。* 用二分查找得到一个下标low,由于初始化和循环的控制条件,这个low在nums的合法下标内,所以可以直接判断如果nums[low]>=target,* 则返回low即可。否则返回low+1.* */public int searchInsert(int[] nums, int target) {int high = nums.length - 1;int low = 0;int mid = 0;while (low < high) {// 注意1对应注意2mid = low + (high - low) / 2; // 这样先减后加是为了防止溢出if (nums[mid] < target) {low = mid + 1;} else {high = mid; // 注意2}}// low出循环的时候肯定是在[0,high],都是数组的正常合法的下标。/* 出了while循环的low和high都已经被改变了,不再是初始化时的low和high */if (nums[low] >= target) {//如果nums[low]比target大或者二者相等,则low即为target的插入位置return low;} else {return low + 1;}}


这篇关于100. Search Insert Position的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/981176

相关文章

background-position切图

老生常谈,网上也很多,但是还是记下。 .overview-user-icon {background-image: url('../../../../static/imgs/overview-201811161524.svg');width: 24px;height: 24px;display: inline-block;background-size: 475% 458.3333333333

探索Elastic Search:强大的开源搜索引擎,详解及使用

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选,相信大家多多少少的都听说过它。它可以快速地储存、搜索和分析海量数据。就连维基百科、Stack Overflow、

mysql replace into 与 insert update

replace into 与 insert update 功能类似 总结下: replace into 是根据表中的唯一索引或主键来判断是否重复的。如果没有则replace into不起作用直接插入。 replace into如果遇到重复的值,会先把之前的数据删除,并且重新插入一条新的数据。效率可能不高 replace into的时候会删除老记录。所以其他表中所有与本表老数据主键i

MySQL——Insert语句详解

语法: INSERT INTO 表名([字段名1,字段名2,字段名3])VALUES('值1'),('值2'),('值3'),······  注意事项: ·  字段和字段之间,使用英文逗号隔开 ·  字段是可以省略的,但是后面的值必须一一对应,不能少 ·  可以同时插入多条数据,VALUES后面的值,需要使用逗号隔开    VALUES( ) , ( ) 代码演示: --

43 mysql insert select 的实现

前言 我们这里 来探讨一下 insert into $fields select $fields from $table; 的相关实现, 然后 大致来看一下 为什么 他能这么快 按照 我的思考, 应该里里面有 批量插入才对, 但是 调试结果 发现令我有一些意外 呵呵 果然 只有调试才是唯一的真理   测试数据表如下  CREATE TABLE `tz_test` (`id` int(

求13x+12y=100;x+45=90的解,找到一个满足的解就行(break跳出循环)

#include<stdio.h>#include<stdlib.h>//break语句不能用在循环语句和switch语句之外的语句int main(){//x>0,y>0 ,求:x,y 且是整数 //13x+12y=100:即13i+12j=100,即12j=100-13ifor(int i=0;i<100;i++){printf("%d\n",i);if((100-13*i)%12==

oracle创建一个带参数的存储过程:为指定的员工,涨100块钱的工资;并且打印涨前和涨后的薪水

--创建一个带参数的存储过程--为指定的员工,涨100块钱的工资;并且打印涨前和涨后的薪水/*beginraisesalary(6755);raisesalary(4456);commit();//这里提交,所以说我们一般不会在存储过程或者存储函数中写提交,end;/*/--host cls--先创建表emp和插入数据,显示表的结构用desc 表名--create table empcr

float和position的区别

相同:设置后,对应的模块都会脱离文档流 不同点:position相应的块级元素会覆盖下面的内容(文字,),而float只会覆盖块级元素,里面的文字会脱离 出来 float是浮动定位,position是绝对定位 文档流是文档中可显示对象在排列时所占用的位置。 快级元素 在做页面布局的时候,一般会将html元素分为两种,即块级元素和行内元素。

Python-算法编程100例-前缀和双指针(入门级)-最长的指定瑕疵度的元音子串

题目描述: 元音字符为“aeiouAEIOU” 给定一个字符串,求字符串中满足指定瑕疵度的最长元音子串的长度。元音子串为字符串中开头和结尾都是元音字符的字符串,瑕疵度为子串中非元音字符的个数。 题目分析: 1、直接使用双指针,难度稍微有些大,边界不好处理。 2、使用前缀和+双指针,题目难度简化。 瑕疵度k=0原始字符串asdbuiodevauufgh元音字符到起始位置的瑕疵度00003

三个 insert 导致的死锁问题

锁种类 插入意向锁(insert intention lock)对已有数据行的修改与删除,必须加强互斥锁 X 锁,那对于数据的插入,是否还需要加这么强的锁,来实施互斥呢?插入意向锁,孕育而生。插入意向锁是间隙锁(Gap Locks)的一种,它是专门针对 insert 操作的,也是为数不多的在 RC 级别下产生 Gap 锁情况 锁兼容性 排他锁 X排他意向锁 IX共享锁 S共享意向锁 IS排他