随机产生十个一到100之间的整数,并查找最小值和最大值,定义一个新数组,将最小值和最大值存在新数组的第一个和第二个位置。
import java.util.Arrays;
import java.util.Random;
public class Main {
public static void main(String[] args) {
// 随机产生十个一到100之间的整数
int[] nums = new int[10];
Random rand = new Random();
for (int i = 0; i < nums.length; i++) {
nums[i] = rand.nextInt(100) + 1;
}
System.out.println("随机生成的十个数字为:" + Arrays.toString(nums));
// 查找最小值和最大值
int min = nums[0], max = nums[0];
for (int i = 1; i < nums.length; i++) {
if (nums[i] < min) {
min = nums[i];
}
if (nums[i] > max) {
max = nums[i];
}
}
System.out.println("最小值为:" + min);
System.out.println("最大值为:" + max);
// 存入新数组的第一个和第二个位置
int[] result = new int[2];
result[0] = min;
result[1] = max;
System.out.println("新数组为:" + Arrays.toString(result));
}
}
解题思路与变形1相同,只是在边界条件的判断上有所不同,对于各个情况的分析也类似变形1。废话少说,直接上码:
def bisearch_var2_1(A, value):
low = 0
high = len(A)-1
while low <= high:
mid = low +((high-low)>>1)
if A[mid] > value:
high = mid -1
elif A[mid] < value:
low = mid + 1
elif A[mid] == value:
if mid == len(A)-1 or A[mid+1] != value:
return mid
else:
low = mid + 1
return -1
def bisearch_var2_2(A, value):
low = 0
high = len(A)-1
while low <= high:
mid = low + ((high-low)>>1)
if A[mid] > value:
high = mid - 1
elif A[mid] <= value:
low = mid + 1
if high >=0 and A[high]==value:
return high
else:
return -1
A = [1,2,3,3,3,4,4,5,6]
print(bisearch_var2_1(A,3)) # result: 4
print(bisearch_var2_2(A,0)) # result: -1