宁波育才建设教育集团网站,海南app开发,眉山市做网站的公司,怎么用手机创建网站二分查找 两种写法#xff1a;左闭右闭[left,right]、左闭右开[left,right) 主要有几点不同#xff1a;1. right是从num.length开始还是从num.length-1开始。2.left还是right。3.rightmid还是mid1
左闭右闭写法#xff1a; public int search(int[] nums, int targ…二分查找 两种写法左闭右闭[left,right]、左闭右开[left,right) 主要有几点不同1. right是从num.length开始还是从num.length-1开始。2.left还是right。3.rightmid还是mid1
左闭右闭写法
public int search(int[] nums, int target) {int left0;int rightnums.length-1;while(leftright){int mid(leftright)/2;if(nums[mid]target){leftmid1;}else if(nums[mid]target){rightmid-1;} else{return mid;}}return -1;}左闭右开写法 public int search(int[] nums, int target) {int left0;int rightnums.length;while(leftright){int mid(leftright)/2;if(nums[mid]target){leftmid1;}else if(nums[mid]target){rightmid;} else{return mid;}}return -1;}有重复元素的二分查找返回重复元素的第一个位置。输入{1,2,3,3,3,3,4,5}和3返回2 public static void main(String[] args) {search(new int[]{1,2,3,3,3,3,4,5},3);}public static int search(int[] nums, int target) {int left 0;int right nums.length - 1;while (left right) {int mid (left right) / 2;if (target nums[mid]) {left mid 1;} else if (target nums[mid]) {right mid - 1;} else {while(mid0nums[mid]nums[mid-1]){mid--;}return mid;}}return -1;}leetcode540. 有序数组中的单一元素 题目描述给你一个仅由整数组成的有序数组其中每个元素都会出现两次唯有一个数只会出现一次。 请你找出并返回只出现一次的那个数。 你设计的解决方案必须满足 o(log n) 时间复杂度和 (1)空间复杂度。
示例 输入nums[1,1,2,3,3,4,4,8,8] 输出2 输入nums[3,3,7,7,10,11,11] 输出10
一般是偶数位和它后面的奇数位的数值相同。如11223344 一旦只出现一次元素那么就变成奇数位和后面的偶数位数值相同了。如1123344
while循环终止的时候是leftright。退出的时候返回nums[left]和nums[right]都可以。 public int singleNonDuplicate(int[] nums) {//int left0;int rightnums.length-1;//这里不减一 会报数组越界的错while(leftright){ //左闭右开写法int mid(leftright)/2;if(mid%20){if(nums[mid]nums[mid1]){leftmid1;} else{rightmid;}} else{if(nums[mid]nums[mid1]){rightmid;} else{leftmid1;}}}return nums[left];}