您的位置:首页 > 编程语言 > Java开发

在逆转数组中寻找最小元素——Java实现

2017-04-10 20:50 330 查看
思路:使用左右两个指针,左指针最初指向0,右指针指向最后一个元素。根据左右指针所指的数据和中间指针所指数据的大小关系移动指针。

(注意:如果左右指针只相差1,需要特殊处理)

Java代码如下:

public class Solution {

// 在left~right 之间顺序查找最小元素
public static int findMinNum(int[] nums, int left, int right) {
int min = nums[left];
for (int i = left + 1; i <= right; i++) {
if (nums[i] < min) {
min = nums[i];
}
}
return min;
}

// 寻找旋转数组中的最小数
public static int findMin(int[] nums) {
if (nums == null || nums.length == 0) {
return -1;
}
int left = 0;
int right = nums.length - 1;
int middle = 0;

while (nums[left] >= nums[right]) {
if ((right - left) == 1) {
middle = right;
break;
}
middle = (left + right) / 2;
if ((nums[left] == nums[right]) && (nums[right] == nums[left])) {
// 在left~right 之间顺序查找最小元素
return findMinNum(nums, left, right);
}
if (nums[middle] < nums[left]) {
right = middle;
} else {
left = middle;
}
}
return nums[middle];
}

public static void main(String[] args) {
int[] nums = { 4,5,6, 1,2,3,};
System.out.println(findMin(nums));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: