【数据结构】二分查找-LeftRightmost
查找:
Leftmost(最左侧重复元素)
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(最右侧重复元素)
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的最靠左索引位置)
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的最靠右索引位置)
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;}}