[leetcode]35. Search Insert Position(java)
来源:互联网 发布:大数据专业课程有哪些 编辑:程序博客网 时间:2024/06/06 14:01
问题描述
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
解决方法
public static int searchInsert(int[] nums, int target) { if(nums==null||nums.length==0){ return 0; } int l=0; int h=nums.length-1; int mid; while(l<=h){ mid=(l+h)/2; if(target==nums[mid]) return mid; if(target<nums[mid]) h=mid-1; if(target>nums[mid]) l=mid+1; } return l; }
总结
这题思路为二分查找。思路就是每次取中间,如果等于目标即返回,否则根据大小关系切去一半。算法复杂度是O(logn),空间复杂度O(1)。当循环结束时,如果没有找到目标元素,那么l一定停在恰好比目标大的index上,r一定停在恰好比目标小的index上。这个可以通过简单的例子来证明。
扩展
通过这个二分查找的基础题,再回顾一下二分查找的递归和非递归方式
非递归比较直观,查找到返回查找到位置,没查找到返回-1
int BinSearch(int Array[],int key/*要找的值*/) { int low=0,high=Array.length-1; int mid; while (low<=high) { mid = (low+high)/2; if(key==Array[mid]) return mid; if(key<Array[mid]) high=mid-1; if(key>Array[mid]) low=mid+1; } return -1; }
递归方式就对递归式的结构有一定的要求,按照递归式的要求,首先一定要有个跳出递归的条件,其次因为递归要传递位置的参数,因此递归式形式就不像非递归式形式一样参数仅需数组和目标值即可,而是必须多传递一个low位置值一个high位置值得参数(因为这两个参数是判断递归式结束条件所必需的),所以递归形式的二分查找稍有不同
int BinSearch(int Array[],int low,int high,int key/*要找的值*/) { if (low<=high) { int mid = (low+high)/2; if(key == Array[mid]) return mid; else if(key<Array[mid]) return BinSearch(Array,low,mid-1,key); else if(key>Array[mid]) return BinSearch(Array,mid+1,high,key); } else return -1; }
0 0
- (Java)LeetCode-35. Search Insert Position
- Leetcode[java] 35. Search Insert Position
- Leetcode 35. Search Insert Position (Medium) (java)
- [LeetCode-Java]35. Search Insert Position
- [leetcode]35. Search Insert Position(java)
- [leetcode]35. Search Insert Position(Java)
- [Leetcode] Search Insert Position (Java)
- [LeetCode][Java] Search Insert Position
- [LeetCode][Java] Search Insert Position
- leetcode:Search Insert Position 【Java 】
- LeetCode : Search Insert Position [java]
- Search Insert Position leetcode java
- [LeetCode]35.Search Insert Position
- LeetCode --- 35. Search Insert Position
- LeetCode 35.Search Insert Position
- [Leetcode] 35. Search Insert Position
- LeetCode 35. Search Insert Position
- [leetcode] 35.Search Insert Position
- codeforces上一种应对大测试数据debug方法
- 剑指Offer系列-面试题9:斐波那契数列
- 浙江大学复试编程题之——Sharing
- Android 关于Selector的使用
- stm32f1xx HAL库下载介绍
- [leetcode]35. Search Insert Position(java)
- 【推荐】《Android应用安全设计及安全编码指导手册》更新到2016年9月1日版本
- 数据结构(三)栈结构模拟编译器判断括号是否匹配
- .DS_Store 文件是什么? / .DS_Store 文件是什么macOS
- POJ 1321 基础搜索 DFS 二
- leetcode 141. Linked List Cycle
- 基于利用指针对线性表的实现(单链表)
- java 使用 POI替换doc中的文字
- 导航条在push时出现黑框