java二分法整数小拼接
时间: 2023-05-27 11:07:20 浏览: 103
二分法java
下面是一个用Java实现的二分法整数小拼接的例子:
```
public class BinarySearch {
public static void main(String[] args) {
int[] nums = {5, 9, 15, 20, 25, 30, 35, 40, 45, 50};
int target = 18;
int index = binarySearch(nums, target);
System.out.println("Index of " + target + " is " + index);
int[] nums1 = {2, 3, 4};
int[] nums2 = {5, 6, 7, 8};
int[] result = merge(nums1, nums2);
System.out.println(Arrays.toString(result));
}
// 二分查找
public static int binarySearch(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (nums[mid] == target) {
return mid;
} else if (nums[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
// 整数小拼接
public static int[] merge(int[] nums1, int[] nums2) {
int n1 = nums1.length;
int n2 = nums2.length;
int[] result = new int[n1 + n2];
int i = 0, j = 0, k = 0;
while (i < n1 && j < n2) {
int num1 = nums1[i];
int num2 = nums2[j];
if (compare(num1, num2)) {
result[k++] = num1;
i++;
} else {
result[k++] = num2;
j++;
}
}
while (i < n1) {
result[k++] = nums1[i++];
}
while (j < n2) {
result[k++] = nums2[j++];
}
return result;
}
// 比较两个整数拼接的大小
public static boolean compare(int num1, int num2) {
String s1 = String.valueOf(num1);
String s2 = String.valueOf(num2);
String s12 = s1 + s2;
String s21 = s2 + s1;
return s12.compareTo(s21) > 0;
}
}
```
在这个例子中,我们首先实现了一个二分查找的函数`binarySearch`,用来查找一个有序数组中是否包含某个元素。
然后我们实现了一个整数小拼接的函数`merge`,它的输入是两个有序数组`nums1`和`nums2`,返回一个拼接后的有序数组。这个函数的实现使用了归并排序的思想,具体来说,我们使用三个指针`i`、`j`、`k`,分别指向数组`nums1`、数组`nums2`、结果数组`result`的当前位置,然后不停地比较`nums1[i]`和`nums2[j]`,将较小的那个放入`result[k]`中,并将对应的指针向右移动。最后,如果有一个数组已经全部遍历完了,我们直接将另一个数组的剩余部分放入`result`中即可。
最后,我们实现了一个比较两个整数拼接的大小的函数`compare`。这个函数将两个整数转换成字符串,然后分别将它们拼接起来,比较两个拼接后的字符串的大小,如果第一个字符串大于第二个字符串,就返回`true`,否则返回`false`。这个函数的实现使用了字符串的`compareTo`方法,它将两个字符串进行字典序比较,如果第一个字符串在字典序上大于第二个字符串,就返回正数,否则返回负数或零。
阅读全文