面试过程中遇到的几个简单的算法

来源:互联网 发布:看台湾电视直播软件 编辑:程序博客网 时间:2024/04/27 10:16
  1. 冒泡排序

  2. 把一个数字转换成相应的汉字显示,5001:五千零一

  3. 看HashSet的输出顺序,和放入进去的先后是没有一定关系的,无序

  4. 按空格把字符串反序输出,如:I love China 输出为 CHina love I

  5. 给出n,输出N行的图形
    1
    2 3
    4 5 6
    7 8 9 10
    依次类推

  6. 将字符串倒序输出   love 输出 evol

  7. 合并两个从小到大顺序的数组,并排序,从小到大

下面是代码,都是简单的实现,可能都不是最好的算法,如果有什么好的算法,希望可以有人可以告知哦,学习一下!

import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class Test {
    //冒泡排序
    public static void sortArray(int arrs[]) {
        int temp = arrs[0];
        System.out.println("排序之前的数组:");
        for (int i = 0; i < arrs.length; i++) {
            System.out.print(arrs[i] + " ");
        }
        System.out.println("");
        for (int i = 0; i < arrs.length; i++) {
            for (int j = i + 1; j < arrs.length; j++) {
                if (arrs[j] < arrs[i]) {
                    temp = arrs[i];
                    arrs[i] = arrs[j];
                    arrs[j] = temp;
                }
            }
        }
        System.out.println("排序之后的数组:");
        for (int i = 0; i < arrs.length; i++) {
            System.out.print(arrs[i] + " ");
        }
    }
    //把一个数字转换成相应的汉字显示,5001:五千零一
    public static String transferToUpper(Long num) {// 5001
        Map map = new HashMap();
        // 把汉字的零到九放到Map中如果用到直接取
        map.put("cn_0", "零");
        map.put("cn_1", "一");
        map.put("cn_2", "二");
        map.put("cn_3", "三");
        map.put("cn_4", "四");
        map.put("cn_5", "五");
        map.put("cn_6", "六");
        map.put("cn_7", "七");
        map.put("cn_8", "八");
        map.put("cn_9", "九");
        map.put("zh_2", "十");
        map.put("zh_3", "百");
        map.put("zh_4", "千");
        String str = num.toString();
        StringBuffer strsb = new StringBuffer(str);
        strsb = strsb.reverse();// 将要数据转化成字符串,倒序,以便从个位开始
        int len = strsb.length();
        StringBuffer sb = new StringBuffer("");
        for (int i = 0; i < len; i++) {
            char keynum = strsb.charAt(i);
            String key = "cn_" + keynum;
            if (map.get(key) != null) {
                if (i % 4 != 2 && keynum == '0') {
                } else {
                    // 把十百千输出
                    if (map.get("zh_" + (i % 4 + 1)) != null && keynum != '0') {
                        sb.append(map.get("zh_" + (i % 4 + 1)));
                        if (keynum == '1' && (i % 4 + 1 == 2) && i + 1 == len) {
                            // 如果是最高位,例如是11亿,直接输出十一亿而不输出一十一亿
                        } else {
                            // 输出数字
                            sb.append(map.get(key));
                        }
                    } else {
                        // 输出数字
                        sb.append(map.get(key));
                    }
                }
            }
            if (i == 7 && len > 8) {
                // 判断是否需要输出亿
                sb.append("亿");
            } else if (i == 3 && len > 4) {
                // 判断是否需要输出万
                sb.append("万");
            }
        }
        if (sb != null) {
            // 将字符串倒序返回,在刚开始做的反转
            return sb.reverse().toString();
        }
        return null;
    }
    //看HashSet的输出顺序
    public static void testSet() {
        System.out.println("放入的顺序是:");
        Set set = new HashSet();
        set.add(20);
        System.out.print(20 + " ");
        set.add(2);
        System.out.print(2 + " ");
        set.add(12);
        System.out.print(12 + " ");
        set.add(34);
        System.out.print(34 + " ");
        set.add(21);
        System.out.print(21 + " ");
        set.add(14);
        System.out.print(14 + "\n");
        Iterator it = set.iterator();
        System.out.println("输出的顺序是:");
        while (it.hasNext()) {
            System.out.print(it.next() + " ");
        }
    }
    //按空格把字符串反序输出,如:I love China 输出为China love I
    public static String reverseBySpace(String str) {
        if (str != null) {
            StringBuffer sb = new StringBuffer("");
            if (str.indexOf(" ") != -1) {
                String[] arrs = str.split(" ");// 空格分隔,生成数组
                int len = arrs.length;
                for (int i = 0; i < (int) ((len - 1) / 2) + 1; i++) {
                    // 将数组的前半部分与后半部分换位置
                    String temp = arrs[i];
                    arrs[i] = arrs[len - 1 - i];
                    arrs[len - 1 - i] = temp;
                }
                for (int i = 0; i < len; i++) {
                    sb.append(arrs[i] + " ");
                }
                // 去掉最后一个空格返回新字符串
                return sb.substring(0, sb.length() - 1);
            } else {
                // 不含有空格的,直接返回原来字符串
                return str;
            }
        }
        return str;
    }
    /*1
     *2 3
     *4 5 6
     *7 8 9 10
     * 依次类推
     * 给出n,输出N行的图形
     */
    public static int printG(int n){
        if(n==1){
            System.out.println(1);
            return 1;
        }else{
            int s=printG(n-1);
            for(int i=1;i<=n;i++){
                System.out.print((s+=1)+" ");    
            }
            System.out.println("");
            return s;
        }
    }
    //将字符串倒序输出
    public static String reverseString(String str){
        return str.length() > 0 ? reverseString(str.substring(1)) + str.charAt(0): "" ;
    }
    //合并两个从小到大顺序的数组,并排序,从小到大
    public static int [] combineArray(int []a,int []b){
        if(a==null || a.length==0){
            return b;
        }
        if(b==null || b.length==0){
            return a;
        }
        int s[]=new int[a.length+b.length];
        System.out.println("length:===="+s.length);
        int sindex=0;
        int j=0;
        for(int i=0;i<a.length;i++){            
            for(;j<b.length;j++){
                if(a[i]<b[j]){
                    s[sindex++]=a[i];
                    break;
                }else{    
                    s[sindex++]=b[j];
                    continue;
                }
            }
         //如果b已经全部排出序,a剩下的直接追加到数组后面
          if(j>=b.length){
              s[sindex++]=a[i];
          }
        }
        //如果a已经全部排出序,b剩下的直接追加到数组后面
        if(j<b.length-1){
            for(;j<b.length;j++){
                s[sindex++]=b[j];
            }
        }
        return s;
    }
    public static void main(String[] args) {
        int[] arrs = new int[] { 1, 9, 0, 7, 8, 3, 8, 78, 98, 23, 46 };
        Test.sortArray(arrs);
        System.out.println(Test.transferToUpper(Long.valueOf("11011110050")));
        Test.testSet();
        System.out.println(Test.reverseBySpace("I love China"));
        Test.printG(7);
        int a[]=new int[]{3,8,9,11,34,98,193};
        int b[]=new int[]{1,2,3,5,6,7,9,56};
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]+" ");
        }
        System.out.println("");
        for(int i=0;i<b.length;i++){
            System.out.print(b[i]+" ");
        }
        System.out.println("");
        int [] r=combineArray(b, a);
        for(int i=0;i<r.length;i++){
            System.out.print(r[i]+" ");
        }
        System.out.println("");
    }
}


原创粉丝点击