[LeetCode] 35. 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.
Example 1:
Input: [1,3,5,6], 5 Output: 2
Example 2:
Input: [1,3,5,6], 2 Output: 1
Example 3:
Input: [1,3,5,6], 7 Output: 4
Example 1:
Input: [1,3,5,6], 0 Output: 0
给一个有序数组和一个目标值,数组中没有重复的元素,如果找到目标元素就返回index,如果没有找到就返回要插入的使其有序的位置。
解法1:暴力搜索Brute force
解法2:二分法Binary Search,这个显然是要考察的方法。
Java:
1 2 3 4 5 6 7 8 9 10 11 12 | class Solution { public int searchInsert( int [] A, int target) { int low = 0 , high = A.length- 1 ; while (low<=high){ int mid = (low+high)/ 2 ; if (A[mid] == target) return mid; else if (A[mid] > target) high = mid- 1 ; else low = mid+ 1 ; } return low; } } |
Java:
1 2 3 4 5 6 7 8 9 10 11 | public int searchInsert( int [] nums, int target) { int low = 0 , high = nums.length; while (low < high) { int mid = low + (high - low) / 2 ; if (nums[mid] < target) low = mid + 1 ; else high = mid; } return low; } |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | class Solution( object ): def searchInsert( self , nums, target): """ :type nums: List[int] :type target: int :rtype: int """ left, right = 0 , len (nums) - 1 while left < = right: mid = left + (right - left) / 2 if nums[mid] > = target: right = mid - 1 else : left = mid + 1 return left |
Python: wo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class Solution( object ): def searchInsert( self , nums, target): """ :type nums: List[int] :type target: int :rtype: int """ left, right = 0 , len (nums) - 1 while left < = right: mid = left + (right - left) / 2 if nums[mid] > target: right = mid - 1 elif nums[mid] < target: left = mid + 1 else : return mid return left |
C++: Brute force, TLE
1 2 3 4 5 6 7 8 9 | class Solution { public : int searchInsert(vector< int >& nums, int target) { for ( int i = 0; i < nums.size(); ++i) { if (nums[i] >= target) return i; } return nums.size(); } }; |
C++: BS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class Solution { public : int searchInsert(vector< int >& nums, int target) { if (nums.back() < target) return nums.size(); int left = 0, right = nums.size() - 1; while (left < right) { int mid = left + (right - left) / 2; if (nums[mid] == target) return mid; else if (nums[mid] < target) left = mid + 1; else right = mid; } return right; } }; |
类似题目:
[LeetCode] 374. Guess Number Higher or Lower 猜数字大小
[LeetCode] 278. First Bad Version 第一个坏版本
Search for a Range
Sqrt(x)
Search a 2D Matrix
Search in Rotated Sorted Array
Search in Rotated Sorted Array II
All LeetCode Questions List 题目汇总
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法
· Vite CVE-2025-30208 安全漏洞