元素查找
2016-12-21 12:48
127 查看
public int findElement(int[] A, int n, int x) { //return findElementHelp(A, 0, n - 1, x); if (n == 1) { return 0; } else { if (n == 2) { if (A[0] == x) { return 0; } else { return 1; } } } if (A[0] < A[n - 1]) { return Arrays.binarySearch(A, 0, n, x); } int left = 0; int right = n; if (A[0] < A[1]) {//先升后升,(注意不是先升后降) while (left < right) { int mid = (left + right) / 2; if (mid != 0 && mid != (n - 1) && A[mid] > A[mid + 1] && A[mid - 1] < A[mid]) {//如果找到拐点 return Math.max(Arrays.binarySearch(A, 0, mid + 1, x), Arrays.binarySearch(A, mid + 1, n, x)); } else { if (A[mid] > A[0]) { left = mid + 1; } else { right = mid; } } } } else { while (left < right) { int mid = (left + right) / 2; if (mid != 0 && mid != (n - 1) && A[mid] < A[mid + 1] && A[mid - 1] > A[mid]) {//如果找到拐点 return Math.max( downBinarySearch(A, 0, mid + 1, x), Arrays.binarySearch(A, mid + 1, n, x)); } else { if (A[mid] > A[n - 1]) { left = mid + 1; } else { right = mid; } } } } return -1; } private int downBinarySearch(int[] A, int left, int right, int x) { while (left < right) { int mid = (left + right) / 2; if (A[mid] == x) { return mid; } else { if (A[mid] < x) { right = mid; } else { left = mid + 1; } } } return -1; }
相关文章推荐
- 查找最大元素
- 查找给定区间内第K大的元素
- jQuery常用的元素查找方法总结
- Javascript脚本语言简介、查找元素节点、查看是否存在子节点、根节点
- 查找BST中Kth小的元素
- 杨氏三角查找元素
- 【100题】查找最小的k个元素
- Jsoup查找dom元素
- 旋转数组中查找某个元素
- jQuery父级以及同级元素查找
- Find the element that appears once(查找出现一次的元素)
- hdoj2025 查找最大元素
- 查找单项链表中间元素,若有相同,取第一个
- 【元素的查找】js和jquery方法查找dom元素
- HDU_ACM-2025 查找最大元素
- std::vector删除重复元素和查找
- 查找集合中某个元素的位置和某个元素的集合
- map常用成员(关联容器)----创建map<主键,主键对应的值>,增insert,删erase,改查找find,然后修改second,遍历iterator,获取元素个数size,判空empty
- Arrays查找元素所在位置