这么简单的算法,九成程序员写的都不对!
时间:2021-04-26 20:11:59
手机看文章
扫描二维码
随时随地手机看文章
[导读]前段时间,在论坛上看到有统计说“90%的程序员都不能够写对简单的二分法”。这???
/*** 二分查找,找到该值在数组中的下标,否则为-1*/static int binarySearch(int[] array, int key) {int left = 0;int right = array.length - 1;// 这里必须是 <=while (left <= right) {int mid = (left + right) / 2;if (array[mid] == key) {return mid;}else if (array[mid] < key) {left = mid + 1;}else {right = mid - 1;}}return -1;}
1、找出第一个与key相等的元素
// 查找第一个相等的元素static int findFirstEqual(int[] array, int key) {int left = 0;int right = array.length - 1;// 这里必须是 <=while (left <= right) {int mid = (left + right) / 2;if (array[mid] >= key) {right = mid - 1;}else {left = mid + 1;}}if (left < array.length && array[left] == key) {return left;}return -1;}
2、找出最后一个与key相等的元素
// 查找最后一个相等的元素static int findLastEqual(int[] array, int key) {int left = 0;int right = array.length - 1;// 这里必须是 <=while (left <= right) {int mid = (left + right) / 2;if (array[mid] <= key) {left = mid + 1;}else {right = mid - 1;}}if (right >= 0 && array[right] == key) {return right;}return -1;}
3、查找第一个等于或者大于Key的元素
// 查找第一个等于或者大于key的元素static int findFirstEqualLarger(int[] array, int key) {int left = 0;int right = array.length - 1;// 这里必须是 <=while (left <= right) {int mid = (left + right) / 2;if (array[mid] >= key) {right = mid - 1;}else {left = mid + 1;}}return left;}
4、查找第一个大于key的元素
// 查找第一个大于key的元素static int findFirstLarger(int[] array, int key) {int left = 0;int right = array.length - 1;// 这里必须是 <=while (left <= right) {int mid = (left + right) / 2;if (array[mid] > key) {right = mid - 1;}else {left = mid + 1;}}return left;}
5、查找最后一个等于或者小于key的元素
// 查找最后一个等于或者小于key的元素static int findLastEqualSmaller(int[] array, int key) {int left = 0;int right = array.length - 1;// 这里必须是 <=while (left <= right) {int mid = (left + right) / 2;if (array[mid] > key) {right = mid - 1;}else {left = mid + 1;}}return right;}
6、查找最后一个小于key的元素
// 查找最后一个小于key的元素static int findLastSmaller(int[] array, int key) {int left = 0;int right = array.length - 1;// 这里必须是 <=while (left <= right) {int mid = (left + right) / 2;if (array[mid] >= key) {right = mid - 1;}else {left = mid + 1;}}return right;}
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!






