在逆转数组中寻找最小元素——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));
}
}
(注意:如果左右指针只相差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));
}
}
相关文章推荐
- java实现把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如{3,4,5,1,2}为{1,2,3,4,5}
- Java/Go实现——把正整数数组的元素拼成一个最小的数
- 从无序数组中获取最小的M个元素(小顶堆实现)
- 寻找最小的k个数(采用维护k个元素的最大堆的方法来实现)
- 如何交换两个等长整形数组使其数组和的差最小(C和java实现)
- [java]一次for循环实现查询有序数组中所有重复的元素
- 寻找数组中只出现一次的数 java实现
- java 实现从无序数组中 找出第k大的数, 无序数组充许有重复元素
- 寻找三个有序数组的共同最小元素
- java实现——008旋转数组的最小数字
- java实现 数组中两个元素相加等于指定数的所有组合
- 递归实现逆转数组(Java实现)
- 用快排实现寻找数组中的最小k个数
- java 数组比较,元素的比较,Comparable,Comparator比较的应用实现,排序,查找示例
- 寻找在数组中一个元素是不是该行最小,该列最大的元素
- 寻找最小的k个数(采用维护n个元素的最小堆的方法来实现)
- 重载运算符 [] 实现寻找数组的第K大的元素
- 寻找有序数组的反转数组中最小的元素
- Java实现O(log(n+m))两个有序数组中第K大元素或中位数
- 数组求最大最小值和排序java实现