数据结构与算法面试题

来源:互联网 发布:湖北楚天网络客服电话 编辑:程序博客网 时间:2024/05/21 22:32

1。计算二叉树的深度

// 获取最大深度    public static int getMaxDepth(TreeNode root) {        if (root == null)            return 0;        else {            int left = getMaxDepth(root.left);            int right = getMaxDepth(root.right);            return 1 + Math.max(left, right);        }    }

2。折半查找(非递归)

package althorgrim;  /**  * 1、必须采用顺序存储结果  * 2、关键字必须有序  * @author hanrk-2734  *  */  public class TestBinarySearch {      public static int binarySearch(int a[],int goal){          int high=a.length-1;          int low=0;          while (low<=high) {              int middle=(low+high)/2;              if (a[middle]==goal) {                  return middle;              }              else if (a[middle]>goal) {                  high=middle-1;              }              else {                  low=middle+1;              }          }          return -1;      }      /**      * @param args      */      public static void main(String[] args) {          // TODO Auto-generated method stub          int[] src = new int[] {1, 3, 5, 7, 8, 9};          System.out.println(binarySearch(src, 3));       }  }  

3.找到数据中最大的前两个值

list=[1,2,5,6,3,4,5,4]max1=0max2=0for i in range(len(list)):    if list[i]>max1:        max2=max1        max1=list[i]    else:        if list[i]>max2:            max2=list[i]print(max1)print(max2)

4。把字符串中的连续多个空格转换成一个空格

str='a  b  c  d  e f     g    h'def replace(str):    count = 0    strr=''    for i in range(len(str)):        if str[i]==' ':            count+=1        if count==2:            count=count-1        else:            strr=strr+str[i]        if str[i]!=' ':            count=0    return strrprint(str)print(replace(str))

5.给定a、b两个文件,各存放50亿个url,每个url各占用64字节,内存限制是4G,如何找出a、b文件共同的url?
(昨天参加安卓越 笔试,其中的最后一道解答题)

解答:每个文件 50亿*64B 约为300GB大小,内存肯定是装不下了。毫无疑问还是采用分而治之的思想:1.  遍历文件a,对每个url求取hash(url)%1000,然后根据所得值将url分别存储到1000个小文件(设为a0,a1,...a999)当中;遍历文件b,对每个url求取hash(url)%1000,然后根据所得值将url分别存储到1000个小文件(设为b0,b1,...b999)当中;这样处理后,所有可能相同的url都在对应的小文件(a0-b0, a1-b1....a999-b999)当中,不对应的小文件(比如a0-b99)不可能有相同的url。2.  统计1000对文件中相同的url,采用hash_set.比如对a0-b0,遍历a0,将其中的url存储到hash_set当中;然后遍历b0,如果url在hash_map中,则说明此url在a和b中同时存在,保存到文件中即可。