leetcode 二分查找
https://oj.leetcode.com/problems/search-for-a-range/就是一个二分查找,没事练练手
public class Solution {
public int[] searchRange(int[] A, int target) {
int a[]=new int[2];
int ans=bSearch(A,target);
if(ans==-1)
{
a[0]=-1;
a[1]=-1;
return a; }
else
{
int beg=ans;
int end=ans;
while(beg>=0&&(A[beg]==A[ans]))
{
beg--; }
while(end<A.length&&(A[end]==A[ans]))
{
end++;
}
a[0]=beg+1;
a[1]=end-1;
return a; } }
public int bSearch(int[] A,int target)
{
int low=0;
int 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 -1;
} }
2.另外一种二分查找 beg=0 end=len; end指向的是最后一个元素的后面,
public class Solution {
public int[] searchRange(int[] A, int target) {
int a[]=new int[2];
int ans=bSearch(A,target);
if(ans==-1)
{
a[0]=-1;
a[1]=-1;
return a; }
else
{
int beg=ans;
int end=ans;
while(beg>=0&&(A[beg]==A[ans]))
{
beg--; }
while(end<A.length&&(A[end]==A[ans]))
{
end++;
}
a[0]=beg+1;
a[1]=end-1;
return a; } }
public int bSearch(int[] A,int target)
{
int low=0;
int high=A.length;
while(low<high) //low<high不能等于
{
int mid =(low+high)/2;
if(A[mid]==target)
{
return mid; }
else if(A[mid]>target)
{ high=mid; }
else
{
low=mid+1;
} } return -1;
} }
3.第一种方法的递归方式
public class Solution {
public int[] searchRange(int[] A, int target) {
int a[]=new int[2];
int ans=bSearch(A,target,0,A.length);
if(ans==-1)
{
a[0]=-1;
a[1]=-1;
return a; }
else
{
int beg=ans;
int end=ans;
while(beg>=0&&(A[beg]==A[ans]))
{
beg--; }
while(end<A.length&&(A[end]==A[ans]))
{
end++;
}
a[0]=beg+1;
a[1]=end-1;
return a; } }
public int bSearch(int[] A,int target,int low,int high)
{ while(low<high)
{
int mid =(low+high)/2;
if(A[mid]==target)
{
return mid; }
else if(A[mid]>target)
{ bSearch(A,target,low,mid); }
else
{
bSearch(A,target,mid,high);
} } return -1;
} }
leetcode 二分查找的更多相关文章
- leetcode二分查找问题整理
自从做完leetcode上的三道关于二分查找的题后,我觉得它是比链表找环还恶心的题,首先能写出bugfree代码的人就不多,而且可以有各种变形,适合面试的时候不断挑战面试者,一个程序猿写代码解决问题的 ...
- [leetcode]二分查找总结
Search for a Range 1.最简单的想法,用最普通的二分查找,找到target,然后向左右扩张,大量的重复的target,就会出现O(n)效率. class Solution { pub ...
- leetcode 二分查找 Search in Rotated Sorted ArrayII
Search in Rotated Sorted Array II Total Accepted: 18500 Total Submissions: 59945My Submissions Follo ...
- Leetcode 二分查找 Search Insert Position
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie Search Insert Position Total Accepted: 14279 T ...
- leetcode 二分查找 Search in Rotated Sorted Array
Search in Rotated Sorted Array Total Accepted: 28132 Total Submissions: 98526My Submissions Suppose ...
- LeetCode 二分查找模板 II
模板 #2: int binarySearch(vector<int>& nums, int target){ if(nums.size() == 0) return -1; in ...
- LeetCode 二分查找模板 I
模板 #1: int binarySearch(vector<int>& nums, int target){ if(nums.size() == 0) return -1; in ...
- LeetCode 二分查找模板 III
模板 #3: int binarySearch(vector<int>& nums, int target){ if (nums.size() == 0) return -1; i ...
- leetcode二分查找相关
目录 33/81搜索旋转排序数组 34在排序数组中查找元素的第一个和最后一个位置 35搜索插入位置 74搜索二维矩阵 300最长上升子序列,354俄罗斯套娃信封问题 33/81搜索旋转排序数组 假设按 ...
随机推荐
- time.h文件中包含的几个函数使用时须注意事项
time.h头文件中包含以下函数 char* asctime(const struct tm *tm); char* asctime_r(const struct tm *tm,char *buf); ...
- android软件开发之webView.addJavascriptInterface循环渐进【二】
本篇文章由:http://www.sollyu.com/android-software-development-webview-addjavascriptinterface-cycle-of-gra ...
- MFC设置对话框透明背景
在对话框初始化函数OnInitDialog函数中添加如下代码: SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(GetSafeHwnd(), ...
- Entity SQL 初入
Entity SQL 是 ADO.NET 实体框架 提供的 SQL 类语言,用于支持 实体数据模型 (EDM).Entity SQL 可用于对象查询和使用 EntityClient 提供程序执行的查询 ...
- Spring in action笔记
耦合的两面性 一方面代码耦合难以测试,会出现打地鼠式的bug特性(修复一个bug,引发另一个bug) 另一方面耦合又是必须的,不同的类必须要进行适当的交互,才能实现功能. bean的四种装配方 ...
- shell脚本操作mysql数据库—创建数据库,在该数据库中创建表(插入,查询,更新,删除操作也可以做)
#!/bin/bash HOSTNAME="192.168.1.224" #数据库Server信 ...
- wpf+xml实现的一个随机生成早晚餐的小demo
话说每到吃完的时间就发愁,真的不知道该吃什么,然后就想到做一个生成吃什么的小软件,既然这个软件如此的简单,就打算用wpf开发吧,也不用数据库了,直接保存在xml中就可以了 程序整体结构如下图 首先我写 ...
- caffe之(三)激活函数层
在caffe中,网络的结构由prototxt文件中给出,由一些列的Layer(层)组成,常用的层如:数据加载层.卷积操作层.pooling层.非线性变换层.内积运算层.归一化层.损失计算层等:本篇主要 ...
- 如何通过SNMP的OID识别不同厂商的设备
众所周知,SNMP作为通用的网络协议常用于系统监控之中,那么如何借助SNMP来识别不同厂商的设备呢? 事实上,在SNMP的OID树状图中专门有一个节点用于识别各不同的厂商,这个节点是: iso(1) ...
- YUV数据格式
概要: 与RGB编码方法类似,YUV也是一种颜色编码方法,主要用于电视系统以及模拟视频领域,它是指将亮度参量(Y:Luminance或Luma)和色度参量(UV:Chrominance或Chroma) ...