美文网首页
面试题5: 替换空格和归并数组

面试题5: 替换空格和归并数组

作者: mark_x | 来源:发表于2019-10-02 23:38 被阅读0次

5-1 替换空格

package cn.zxy.interview;

/**
 * 分析:
 * 首先不要使用StringBuffer+append; 使用重新设置str长度的方式
 * 1. 先遍历一遍字符串, 确定空格的个数; 根据空格个数和原字符串长度确定新长度newLength
 * 2. 用p1指向旧字符串尾部, 用p2指向新(长度)字符串的尾部
 * 3. 从后向前
 */
public class A05_ReplaceSpacing {
    public static String replaceSpacing(StringBuilder str){
        int countSpace = 0;
        for (int i = 0; i < str.length(); i++) {
            if(str.charAt(i) == ' '){
                countSpace++;
            }
        }
        // 确定新长度, 设置指针
        int oldLength = str.length();
        int newLength = str.length() + 2 * countSpace;
        str.setLength(newLength);

        int p1 = oldLength - 1;
        int p2 = newLength - 1;

        // p1指示原始字符串末尾
        // 当两个指针碰面, 转移完毕
        while(p1 != p2){
            char ch = str.charAt(p1);
            if(ch != ' '){
                str.setCharAt(p2, ch);
                p1--;
                p2--;
            }else if(ch == ' '){
                str.setCharAt(p2--, '0');
                str.setCharAt(p2--, '2');
                str.setCharAt(p2--, '%');
                p1--;
            }
        }
        return str.toString();

    }

    public static void main(String[] args) {
        String str = "We are happy.";
        String strNew = replaceSpacing(new StringBuilder(str));
        System.out.println(strNew);
    }
}

5-2 归并数组

package cn.zxy.interview;

import java.util.Arrays;

/**
 * 问题: 数组A1和A2都有序, A1空余空间足够, 有序归并两数组
 * 分析:
 * 1. 根据A1和A2的长度, 确定合并后数组的长度, 利用一个指针指向该位置
 * 2. 利用两个指针分别指示元素在A1和A2中的位置
 * 3. 比较 较大者放入新数组
 * 4. 注意分四种情况
 */

public class A05_MergeArray {
    public static void mergeArray(int[] a1, int[] a2, int m, int n){
        if (a1 == null || a2 == null || a1.length == 0 || a2.length == 0) return;
        int newLength = m + n;
        int p1 = m - 1;
        int p2 = n - 1;
        int p3 = newLength - 1;

        // 可能有1组先归并完
        while(p3> 0){
            if(p1 == 0)              a1[p3--] = a2[p2--];  // a1先归并完
            else if(p2 == 0)         a1[p3--] = a1[p1--];  // a2先归并完
            else if(a1[p1] > a2[p2]) a1[p3--] = a1[p1--];  // 大的放后面
            else                     a1[p3--] = a2[p2--];
        }

    }

    public static void main(String[] args) {
        int[] a1 = {1, 3, 4, 7, 12, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
        int[] a2 = {2, 3, 5, 8};
        int m = 6;
        int n = 4;
        mergeArray(a1, a2, m, n);
        for (int i = 0; i < a1.length; i++) {
            System.out.print(a1[i]+ " ");
        }

    }

}

相关文章

  • 面试题5: 替换空格和归并数组

    5-1 替换空格 5-2 归并数组

  • 替换空格

    《剑指offer》面试题5:替换空格 题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“we...

  • 面试题5: 替换空格

    思路:对于C++要从后向前替换,java好像 从前向后从后向前都一样 相关题目:合并两个有序数组,已知A1有足够大...

  • 面试题5:【替换空格】

    【题目描述】请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过...

  • 面试题5:替换空格

    请实现一个函数,把字符串中的每个空格替换成"%20"。 解析:从后往前替换。首先计算出需要的容量,然后从最后一位开...

  • 面试题5:替换空格

    请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字...

  • 面试题5:替换空格

    题目 实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“We are happy.”,则输出“We%...

  • 面试题5:替换空格

    题目一 实现一个函数,把字符串中的每个空格替换成"%20".解法一:朴素思想,从前到后扫描,遇到空格首先把后面的内...

  • 面试题5:替换空格

    题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“We are happy.”,则输出“We...

  • 面试题5:替换空格

    题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经...

网友评论

      本文标题:面试题5: 替换空格和归并数组

      本文链接:https://www.haomeiwen.com/subject/yhorpctx.html