【数据结构】二分查找-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;
	}

}
相关推荐
成为大佬先秃头几秒前
前后分离项目:整合JWT+Shiro
java·springboot·shiro·jwt
网络工程小王3 分钟前
【大模型(LLM)的业务开发】学习笔记
人工智能·算法·机器学习
y = xⁿ4 分钟前
【Leet Code 】滑动窗口
java·算法·leetcode
WBluuue7 分钟前
数据结构与算法:二项式定理和二项式反演
c++·算法
nianniannnn7 分钟前
力扣104.二叉树的最大深度 110. 平衡二叉树
算法·leetcode·深度优先
day day day ...16 分钟前
MyBatis条件误写引发的查询条件污染分析与防范
java·服务器·tomcat
_深海凉_17 分钟前
LeetCode热题100-只出现一次的数字
算法·leetcode·职场和发展
hrhcode21 分钟前
【java工程师快速上手go】一.Go语言基础
java·开发语言·golang
nianniannnn36 分钟前
力扣206.反转链表 92.反转链表II
算法·leetcode·链表
2601_9507039436 分钟前
Spring IoC入门实战:XML与注解双解
java