【数据结构】二分查找-LeftRightmost

查找:

Leftmost(最左侧重复元素)

java 复制代码
package 二分查找;

public class BinarySearch {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	}
     public static int binarySearchBasic(int[] a,int target) {
    	 int i=0,j=a.length-1; //设置指针初值
    	 int candidate=-1;
    	 while(i<=j) { //范围有内容
    		 int m=(i+j)>>>2;
    		 if(target<a[m]) {
    			 j=m-1;
    		 }else if(target>a[m]) {
    			 i=m+1;
    		 }else {
    			candidate=m;
    			j=m-1;     //找最左的元素
    		 }
    	 }
    	 return candidate;
	}

}

Rightmost(最右侧重复元素)

java 复制代码
package 二分查找;

public class BinarySearch {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	}
     public static int binarySearchBasic(int[] a,int target) {
    	 int i=0,j=a.length-1; //设置指针初值
    	 int candidate=-1;
    	 while(i<=j) { //范围有内容
    		 int m=(i+j)>>>2;
    		 if(target<a[m]) {
    			 j=m;
    		 }else if(target>a[m]) {
    			 i=m+1;
    		 }else {
    			candidate=m;
    			i=m+1;     //找最右的元素
    		 }
    	 }
    	 return candidate;
	}

}

插入:

插入位置(>=target的最靠左索引位置)

java 复制代码
package 二分查找;

public class BinarySearch {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	}
     public static int binarySearchBasic(int[] a,int target) {
    	 int i=0,j=a.length-1; //设置指针初值
    	 while(i<=j) { //范围有内容
    		 int m=(i+j)>>>2;
    		 if(target<a[m]) {
    			 j=m-1;
    		 }else {
    			j=m-1;     //找最左的元素
    		 }
    	 }
    	 return i;
	}

}

Rightmost(<=target的最靠右索引位置)

java 复制代码
package 二分查找;

public class BinarySearch {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	}
     public static int binarySearchBasic(int[] a,int target) {
    	 int i=0,j=a.length-1; //设置指针初值
    	 int candidate=-1;
    	 while(i<=j) { //范围有内容
    		 int m=(i+j)>>>2;
    		 if(target<a[m]) {
    			 j=m;
    		 }else{
    			 i=m+1;
    		 }
    	 }
    	 return j;
	}

}
相关推荐
飛_1 小时前
解决VSCode无法加载Json架构问题
java·服务器·前端
朝朝又沐沐3 小时前
算法竞赛阶段二-数据结构(36)数据结构双向链表模拟实现
开发语言·数据结构·c++·算法·链表
木棉软糖4 小时前
一个MySQL的数据表最多能够存多少的数据?
java
程序视点4 小时前
Java BigDecimal详解:小数精确计算、使用方法与常见问题解决方案
java·后端
愿你天黑有灯下雨有伞4 小时前
Spring Boot SSE实战:SseEmitter实现多客户端事件广播与心跳保活
java·spring boot·spring
薰衣草23334 小时前
一天两道力扣(6)
算法·leetcode
剪一朵云爱着4 小时前
力扣946. 验证栈序列
算法·
遇见尚硅谷5 小时前
C语言:*p++与p++有何区别
c语言·开发语言·笔记·学习·算法
Java初学者小白5 小时前
秋招Day20 - 微服务
java
天天开心(∩_∩)5 小时前
代码随想录算法训练营第三十二天
算法