• 字符数组中将空格移到最后java实现


    最近遇到一个题:一个字符数组中,里边有字母和空格,那么需要将所有空格移动到后边,前边的字母按顺序连续排在一起,

    解法1:两层循环,嵌套比对,这种比较笨,我当时面试就是用的这种,时间复杂度为 N方。

    解法2:使用两个游标,从第一个元素开始,如果遇到字母,那么两个游标同时移动,如果遇到空格,其中的第一个游标继续移动,第二个游标停止移动,交换元素,再将第二个游标移动,时间复杂度为 N。

    下边的时代码

    /**
     * 移动空格:
     *      一个字符数组中,里边又字母和空格,此时需要将空格全部挪到数组的后边,字符按顺序挪到前边
     *
     * @create 2018-04-03 22:54
     **/
    public class BlankFilter {
    
        /**
         * 两层嵌套循环,时间复杂度: N方
         * @param arr
         */
        public static void forFilter(char[] arr){
    
            for (int i = 0 ;i < arr.length ; i++){
                if( arr[i] == ' '){//找到空格
    
                    for (int j = i ; j < arr.length; j++){
    
                        if(arr[j] != ' '){//从后找到非空格
                            char temp = arr[i];
                            arr[i] = arr[j];
                            arr[j] = temp;
                        }
    
                    }
                }
            }
    
        }
    
        /**
         * 两下标的方式,时间复杂度为 N
         * @param arr
         */
        public static void twoIndexFilter(char[] arr){
            int i = 0 , j = 0 ;
    
            for (; i < arr.length ; i++){// i 下标一直往前挪
    
                if(arr[i] != ' ' && j < arr.length){//如果遇到非空格,那么此时进入,在最后 j 向后挪动一个位置
    
                    if(i != j){//如果 i 和 j 相当,那么说明,前边未遇到空格,因为如果是非空格的情况,两个下标同时都在移动
                        char tmp = arr[i];
                        arr[i] = arr[j];
                        arr[j] = tmp;
                    }
    
                    j++;//i 和 j 下标都往前挪
                }
            }
        }
    
        public static void main(String[] args) {
            char[] a = {'a',' ',' ','b',' ','c'};
    
            //解法一:最笨的方式,两层嵌套循环:时间复杂度  N方
    //        forFilter(a);
            twoIndexFilter(a);
    
            for (char ch : a){
                System.out.println( ch + ",");
            }
    
        }
    
    }
    

      

    Read the fucking manual and source code
  • 相关阅读:
    读《程序是怎样跑起来的》第七章有感
    读《程序是怎样跑起来的》第六章有感
    读《程序是怎样跑起来的》第五章有感
    读《程序是怎样跑起来的》第四章有感
    读《程序是怎样跑起来的》第三章有感
    读《怎样成为一个高手 183》有感
    读《程序是怎样跑起来的》第二章有感
    《程序是怎样跑起来的》第一章读后感
    我与计算机
    师生关系
  • 原文地址:https://www.cnblogs.com/qxynotebook/p/8728547.html
Copyright © 2020-2023  润新知