两个数组拼接中找到最小数
问题: 给你两个数组,你可以将两个数组拼接起来,寻找其中的最小数。
方法一:
class Solution {
public int minNumber(int[] nums1, int[] nums2) {
// 将两个数组合并
int[] nums = merge(nums1, nums2);
// 对合并后的数组进行排序
Arrays.sort(nums);
// 遍历数组,找到第一个不为0的数
for (int num : nums) {
if (num != 0) {
return num;
}
}
// 如果数组中全为0,返回0
return 0;
}
// 合并两个数组
private int[] merge(int[] nums1, int[] nums2) {
int[] nums = new int[nums1.length + nums2.length];
int i = 0, j = 0, k = 0;
while (i < nums1.length && j < nums2.length) {
if (nums1[i] < nums2[j]) {
nums[k++] = nums1[i++];
} else {
nums[k++] = nums2[j++];
}
}
while (i < nums1.length) {
nums[k++] = nums1[i++];
}
while (j < nums2.length) {
nums[k++] = nums2[j++];
}
return nums;
}
}
/**
这个Java程序的思路如下:
合并两个数组为一个新的数组。
对新的数组进行排序。
遍历新的数组,找到第一个不为0的数,返回该数。
如果新的数组中全为0,返回0。
其中,合并两个数组的方法使用了归并排序的思想,可以将两个已经排好序的数组合并为一个有序的数组,
时间复杂度为O(n)。排序使用了Java自带的Arrays.sort()方法,
时间复杂度为O(nlogn)。最终的时间复杂度为O(nlogn)。
*/
运行结果:
问题: return Integer.parseInt(sb.toString()); 这句代码是什么意思?
Integer.parseInt(sb.toString()) 是将一个字符串类型的数字转换为整数类型的方法。
具体来说,sb.toString() 将 StringBuilder 对象 sb 中的所有字符转换成一个字符串,然后 Integer.parseInt() 将这个字符串解析为一个整数。例如,如果 sb.toString() 的结果是 “123”,那么 Integer.parseInt(sb.toString()) 的返回值就是整数 123。
在本题中,我们需要将排序后的字符串数组拼接成一个数字,并返回这个数字。因此,我们可以使用 StringBuilder 将字符串数组中的所有数字连接起来,然后使用 Integer.parseInt() 将这个字符串解析为一个整数。这样,我们就可以得到最小的数字组合了。
那整数类型如何转化为字符串类型的代码是什么?
要将一个整数类型转换为字符串类型,可以使用 String.valueOf() 方法或者 Integer.toString() 方法。这两个方法都可以将整数类型转换为字符串类型。
例如,以下代码将整数类型的数字 num 转换为字符串类型并赋值给变量 str:
int num = 123;
String str = String.valueOf(num); // 使用 String.valueOf() 方法
// 或者
String str2 = Integer.toString(num); // 使用 Integer.toString() 方法
注意:
以上两个方法的参数可以是任何基本数据类型的值,
如 double、float、long、int、short、byte、char,也可以是对应的包装类型。
方法二(此类方法是将两个数组整体连接后,再进行排序):
import java.util.*;
public class Solution {
public int minNumber(int[] nums1, int[] nums2) {
// 将两个数组合并
int[] nums = merge(nums1, nums2);
// 将合并后的数组转换为字符串数组
String[] strNums = new String[nums.length];
for (int i = 0; i < nums.length; i++) {
strNums[i] = String.valueOf(nums[i]);
}
// 对字符串数组进行排序
Arrays.sort(strNums, new Comparator<String>() {
public int compare(String s1, String s2) {
String str1 = s1 + s2;
String str2 = s2 + s1;
return str1.compareTo(str2);
}
});
// 将排序后的字符串数组拼接成一个字符串并返回
StringBuilder sb = new StringBuilder();
for (String str : strNums) {
sb.append(str);
}
return Integer.parseInt(sb.toString());
}
// 合并两个数组
private int[] merge(int[] nums1, int[] nums2) {
// 新建一个数组来存放合并后的结果
int[] nums = new int[nums1.length + nums2.length];
// 定义三个指针,i和j分别指向nums1和nums2的开头,k指向nums的开头
int i = 0, j = 0, k = 0;
// 比较nums1和nums2中当前位置的元素,将较小的元素放入nums中
while (i < nums1.length && j < nums2.length) {
if (nums1[i] < nums2[j]) {
nums[k++] = nums1[i++];
} else {
nums[k++] = nums2[j++];
}
}
// 将nums1中剩余的元素放入nums中
while (i < nums1.length) {
nums[k++] = nums1[i++];
}
// 将nums2中剩余的元素放入nums中
while (j < nums2.length) {
nums[k++] = nums2[j++];
}
// 返回合并后的结果
return nums;
}
}