zoukankan      html  css  js  c++  java
  • java面试:手写代码

    二分查找法。

    /**
     *   二分查找法:给定一组有序的数组,每次都从一半中查找。直到找到要求的数据。
     *   主要是得找到下标的表示方法。
     */
    public class BinaryFind {
    
        /**
         * 使用二分法,找到有序数组中的某个数,返回下标。
         * @param sortedArray
         * @param number
         * @return
         */
        public int find(int[] sortedArray,int number){
              if(sortedArray==null)  {
                  throw new IllegalArgumentException();
              }
              int last=sortedArray.length-1;
              int start=0;
    
              //没找到对应的数据,就一直循环查找
              while ( start<= last ) {
                  //先找到中间的元素的下标 , mid是首尾下标的和的一半
                   int mid= (start+last)/2 ;
                   if( sortedArray[mid] > number   ) {
                       last=mid-1;
                   }else if(sortedArray[mid] <number ){
                       start=mid+1;
                   }else {
                       return  mid;
                   }
    
              }
             return  -1;
    
    }
    

    排序算法

    1.快速排序

    /**
     * 快速排序.
     * https://gitbook.cn/books/59f6a752d97c2122653a169e/index.html
     */
    public class QuicklySort {
    
        /**
         *
         * @param a 数组
         * @param low  数组开始的下标。也就是0。
         * @param high  数组末尾的下标。也就是length-1。
         */
        public int[] sort(int a[],int low,int high){
            if(low>high || a==null) {
                return null;
            }
    
            int i=low;
            int j=high;
            //key设置为数组首位
            int key=a[low];
    
            //while结束后,小于key的全部放在key的左边,大于key的全部放在右边。。
             while (i<j) {
                   //最后面的下标,从后向前遍历,找到第一个大于key的数据,将它赋给数组首位
                    while (i<j && key<=a[j]) {
                         j--;
                    }
                    a[i]=a[j];
                    //最前面的下标,从前向后遍历,找到第一个小于key的数据
                    while (i<j && key>=a[i]) {
                        i++;
                    }
                    a[j]=a[i];
                    a[i]=key;
                }
            //以下的i就是key的下标,对key两边的数据分别进行排序。
               sort(a,low,i-1);
               sort(a,i+1,high);
    
            return  a;
    
        }
    }
    

    2.冒泡排序
    比较低端,不建议写。

    多线程

    1.手写一下生产者消费者模式,不要用BlockingQueue。
    思路:可以使用wait(),notify()
    2.手写一个死锁。

    设计模式

    设计模式的代码详情见:
    设计模式代码示例
    1.手写一下单例模式。
    单例模式示例
    2.手写一下工厂模式。
    3.手写一下观察者模式。
    观察者模式示例
    说起来很尴尬,我曾经在面试时因为没能手写观察者模式,十分钟就结束了面试。当时的心情真的好难受。

    其他

    其他的LeetCode算法解题思路,详情见: https://www.cnblogs.com/expiator/p/10226647.html

    待补充。
    参考资料:
    十大排序算法全面解析-Java实现
    《剑指offer》

  • 相关阅读:
    什么是JAVA内容仓库(Java Content Repository)(3)
    Documentum 中 Type定义与存储
    洛谷 P1421 小玉买文具
    校内 第一届ACM校赛——热身赛
    洛谷 P1307 数字反转
    洛谷P1579 哥德巴赫猜想(升级版)
    51单片机 第三节 独立按键
    51单片机 第四节 数码管
    校内 第一届ACM校赛——正赛
    51单片机 第二节 点亮LED
  • 原文地址:https://www.cnblogs.com/expiator/p/10274732.html
Copyright © 2011-2022 走看看