两个数组拼接中找到最小数

两个数组拼接中找到最小数

问题: 给你两个数组,你可以将两个数组拼接起来,寻找其中的最小数。
方法一:

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;
    }
}

运行结果:

输入描述和输出结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值