旋转数组的问题
1.数组一次旋转的问题
题目描述:
1.1 题目分析
处于递增:low上移
处于递减:high下移(如果是high-1,则可能会错过最小值,因为找的就是最小值)
其余情况:low++缩小范围
1.2 根据算法分析,编写程序实现如下
public int minNumberInRotateArray(int [] array) {
int left = 0,right = array.length-1,mid;
while(left<right){
mid = left + ((right-left)>>1);
if(array[mid]>array[right]){
left = mid+1;
}else{
right = mid;
}
}
return array[right];
}
2. 数组变换找目标值的问题
题目描述:给出一个转动过的有序数组,你事先不知道该数组转动了多少 (例如,0 1 2 4 5 6 7可能变为4 5 6 7 0 1 2). 在数组中搜索给出的目标值,如果能在数组中找到,返回它的索引,否则返回-1。 假设数组中不存在重复项。
输入:[1],0
输出:-1输入:[3,2,1],1
输出:2
/**
*
* @param A int整型一维数组
* @param target int整型
* @return int整型
*/
public int search (int[] A, int target) {
// write code here
if(A==null)return -1;
int left = 0,right = A.length-1,mid;
while(left<=right){
mid = left + ((right-left)>>1);
if(A[mid]==target)return mid;
if(A[left]==target)return left;
if(A[right]==target)return right;
if(A[mid]>A[right]){
if(target>A[mid] && target<A[right])
left = mid+1;
else
right = mid-1;
}else{
if(target>A[left] && A[mid]>target){
right = mid-1;
}else if (target>A[right] || target<A[mid])
right = mid-1;
else
left = mid+1;
}
}
return -1;
}
- 上一篇: 在无序数组中找出最小的正整数
- 下一篇: 扑克牌问题