03.替换空格+数组合并 java版

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

示例 1:

输入: s = “We are happy.”
输出: “We%20are%20happy.”

/**
 * 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
 *
 * 示例 1:
 * 输入: s = “We are happy.”
 * 输出: “We%20are%20happy.”
 */
class p3Solution1{
    public static String substitudespace(String s){

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < s.length(); i++) {
            if(s.charAt(i) == ' '){
                sb.append("%20");
            }else {
                sb.append(s.charAt(i));
            }
        }
        String s_new = sb.toString();
        return s_new;
    }
}

 

88. 合并两个有序数组
* 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
*
* 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。

 

/**
 * 88. 合并两个有序数组
 * 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
 *
 * 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。
 *
 * 思路1:直接将nums2添加到nums1,然后快排。时间复杂度(n+m)log(n+m)
 *
 * 思路2:由于是两个有序数组,要用到“有序”这个条件来降低时间复杂度
 * 可以从后往前,比较两个数组的元素,由于nums1的长度足够,不会出现覆盖元素的情况。
 */
class p3Question2{
    public static void Quicksort(int[] nums1,int n,int[] nums2,int m){
        for (int i = n,j=0; j<nums2.length ;i++,j++) {
            nums1[i] = nums2[j];
        }
        Arrays.sort(nums1);
    }

    public static void solution2(int[] nums1,int n,int[] nums2,int m){
        // p1指向nums1元素的当前位置。p2指向nums2元素的当前位置。p指向数组中排好序的当前位置。
        int p1 = n-1;
        int p2 = m-1;
        int p = nums1.length-1;
        // 当p1或者p2<0时,说明有一个数组以及插空完成,只需要将剩下的数组直接插到最前面即可
        while (p1>=0 && p2>=0 ){
            if(nums1[p1] > nums2[p2]){
                nums1[p] = nums1[p1];
                p1--;
            } else{
                nums1[p] = nums2[p2];
                p2--;
            }
            p--;
        }
        // length为p2+1,因为如果是p1<0,那么符合逻辑。如果是p2<0,由于p1本身前面就是排好序的,同样可以用该式子,只不过不会替换。
        System.arraycopy(nums2,0,nums1,0,p2+1);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值