- 顺序查找
从无序数组第一个元素开始逐个元素进行比较,若某个元素与目标元素相等则查找成功,否则直至最后一个元素都不等则查找失败。 -
二分查找
在有序数组中先确定目标元素所在的区间,然后逐步缩小查找范围,直到找到或找不到目标元素。int binarySearch(int[] nums, int tar) { int low = 0, high=nums.length; while(low<=high) { int mid = low+(high-low)/2; if(nums[mid]==cur) return mid; else if(nums[mid]>cur) high = mid - 1; else low = mid + 1; } return -1; }
-
二分查找扩展
1) 在一个有重复元素的数组中查找元素的最左位置。
需要判断返回值 low: 若该位置元素等于目标元素则 low 是最左位置,否则 low 是目标元素的插入位置。int binarySearch(int[] nums, int target) { int low=0, high=nums.length-1; while(low<high) { int mid=low+(high-low)/2; if(target<=nums[mid]) high=mid; else low =mid-1; } return low; }
2) 在一个有重复元素的数组中查找元素的最右位置
需要判断返回值 low: 若该位置元素等于目标元素则 low 是最左位置,否则 low+1 是目标元素的插入位置。int binarySearchRight(int[] nums, int target) { int low=0, high=nums.length-1; while(low<high) { int mid=low+(high-low)/2; if(target>=nums[mid]) low =mid; else high=mid-1; } return low; }
3) 二维数组中查找元素
在从左到右、从上到下递增的二维数组中查找一个元素:从右上角的元素开始比较,大于target则行+1,否则列-1boolean find(int[][] nums, int target) { if(nums==null || nums.length==0 || nums[0].length==0) { return false; } int row=0, col=nums[0].length-1; while(row<nums.length && col>=0) { if(nums[row][col]==target) { return true; } else if(nums[row][col]<target) { row++; } else { col--; } } return false; }
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。