黑马程序员技术交流社区

标题: 【成都校区】java面试代码题 [打印本页]

作者: 小刀葛小伦    时间: 2019-10-11 14:10
标题: 【成都校区】java面试代码题
一、Java中的经典算法之冒泡排序
原理:比较两个相邻的元素,将值大的元素交换至右端。
思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。
然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。
由此可见:N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数。
冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值。如上例:第一趟比较之后,排在最后的一个数一定是最大的一个数,
第二趟排序的时候,只需要比较除了最后一个数以外的其他的数,同样也能找出一个最大的数排在参与第二趟比较的数后面,第三趟比较的时候,
只需要比较除了最后两个数以外的其他的数,以此类推……也就是说,没进行一趟比较,每一趟少比较一次,一定程度上减少了算法的量。
[Java] 纯文本查看 复制代码
/*

* 冒泡排序

*/

public class BubbleSort {

  public static void main(String[] args) {

    int[] arr={6,3,8,2,9,1};

    System.out.println("排序前数组为:");

    for(int num:arr){

      System.out.print(num+" ");

    }

    for(int i=0;i<arr.length-1;i++){//外层循环控制排序趟数

      for(int j=0;j<arr.length-1-i;j++){//内层循环控制每一趟排序多少次

        if(arr[j]>arr[j+1]){

          int temp=arr[j];

          arr[j]=arr[j+1];

          arr[j+1]=temp;

        }

      }

    }

    System.out.println();

    System.out.println("排序后的数组为:");

    for(int num:arr){

      System.out.print(num+" ");

    }

  }

}

二、java去重复字符串
[Java] 纯文本查看 复制代码
/**

     * @方法一:先把字符串通过空拆分为数组,再利用list集合的contains方法去数组重复项添加数组项

     * @param str

     * @return

     */

        public static String strDuprRem(String str){

                String[] strArr =str.split("");

               

                if (strArr.length == 0 ) {

                        return null;

                        }

                List<String> list = new ArrayList<String>();

                StringBuffer sb = new StringBuffer();

                for(int i=0;i < strArr.length;i++){

                        if(!list.contains(strArr)){

                                list.add(strArr);

                                sb.append(strArr+"");

                        }

                }               

                return sb.toString().substring(0, sb.toString().lastIndexOf(""));               

        }

        

         /**

     * @方法二:先把字符串通过字符串的toCharArray变为字符数组,

     * 再利用循环刻录字符数组每一项内容,利用循环比较刻录的每一项内容与数组每一项内容比较,相等就把内容置空,最后去处空格

     * @param str

     * @return

     */

        public static String strDuprRem2(String str){

                char[] charArr =str.toCharArray();

                if(charArr==null){

                        return str;

                }

                if (charArr.length < 2 ) {

                     return str;

                        }

                //双层循环把字符数组重复项置空

                for(int i=0;i<charArr.length;i++){

                        char tmp =charArr;

                        if(tmp!=' '){

                                for(int j=i+1;j<charArr.length;j++){

                                        if(tmp==charArr[j]){

                                                charArr[j]=' ';

                                        }        

                                }

                        }

                }

                //字符数组去空

                StringBuffer sb = new StringBuffer();

                for(int t=0;t<charArr.length;t++){

                        if(charArr[t]!=' '){

                                sb.append(charArr[t]);

                        }               

                }

               

                return sb.toString();               

        }

        

        /**

     * @方法三:先把字符串通过字符串的toCharArray变为字符数组,

     * 再利用循环把字符数组每一项添加到set集合,由于set集合内容不允许重复从而到达去重的目的,

     * 添加进集合的时候要做空格判断空格项不能添加进集合,遍历set集合用StringBuffer转为字符串,

     * 但是set集合是无序,看到结果第三种内容顺序跟第一种不一样,要是有顺序要求此种方法不可用

     * @param str

     * @return

     */

        public static String strDuprRem3(String str){

                char[] charArr =str.toCharArray();

                if(charArr==null){

                        return str;

                }

                if (charArr.length < 2 ) {

                             return str;

                        }

               

                Set<String> hash =new HashSet<String>();

                //字符数组循环添加进set集合

                for(int i=0;i<charArr.length;i++){

                        if(charArr!=' '){    //字符数组去空并添加到set集合

                                hash.add(String.valueOf(charArr));

                        }

                }

//                //set集合遍历转为字符串

                StringBuffer sb = new StringBuffer();

                for(String laststr:hash){

                        sb.append(laststr);

                }

                return sb.toString();               

        }

三、java实现字符串反转
1.最简单的方法,jdk提供的reverse()方法:
2.最常用的方法:
[Java] 纯文本查看 复制代码
public static String reverse3(String s)

{

   char[] array = s.toCharArray(); //将string类型参数转化为char[]类型参数

   String reverse = "";  //注意这是空串,不是null

   for (int i = array.length - 1; i >= 0; i--)

   reverse += array;

   return reverse;

  }

四、java数组去重
//数组去重方法一  
先遍历原数组,然后遍历结束集,通过每个数组的元素和结果集中的元素进行比对,若相同则break。若不相同,则存入结果集。
两层循环进行遍历得出最终结果。
[Java] 纯文本查看 复制代码
String[] array = {"a","b","c","c","d","e","e","e","a"};  

List<String> result = new ArrayList<>();  

boolean flag;  

for(int i=0;i<array.length;i++){  

    flag = false;  

    for(int j=0;j<result.size();j++){  

        if(array.equals(result.get(j))){  

            flag = true;  

            break;  

        }  

    }  

    if(!flag){  

        result.add(array);  

    }  

}  

String[] arrayResult = (String[]) result.toArray(new String[result.size()]);  

System.out.println(Arrays.toString(arrayResult));  

//数组去重方法二  
通过使用indexOf方法进行判断结果集中是否存在了数组元素。
[Java] 纯文本查看 复制代码
String[] array = {"a","b","c","c","d","e","e","e","a"};  

List<String> list = new ArrayList<>();  

list.add(array[0]);  

for(int i=1;i<array.length;i++){  

    if(list.toString().indexOf(array) == -1){  

            list.add(array);  

    }  

}  

String[] arrayResult = (String[]) list.toArray(new String[list.size()]);  

System.out.println(Arrays.toString(arrayResult));  








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2