面试杂谈之我的秋招求职之路

宜信大数据创新中心

自我介绍,详细介绍项目,主要是美团实习项目,然后画项目架构图。

五道编程题目:

1.设计一个数据结构可以存储一组整型数,并且能够O(1)时间查找中位数和O(logN) add操作。

本来想的是采用map的结构,最后其实是采用堆进行存储,在Java中可以看一下PriorityQueue,内部是采用堆进行实现的。

2.

中序遍历,存储根节点到每个叶子节点的路径。

3.求平方根,两种方式。

# 输入:整数 n
# 输出:n 的平方根
# 精度 10^(-5),定义域:实数

(1)二分法

public static double sqrt(double t, Double precise) {
        double low = 0, high = t, middle, squre,
                prec = precise != null ? precise : 1e-7;
        if ( t < 0 ) {
            throw new RuntimeException("Negetive number cannot have a sqrt root.");
        }
        
        while ( high - low > prec ) {
            middle = ( low + high ) / 2;
            squre = middle * middle;
            
            if ( squre > t ) {
                high = middle;
            } else {
                low = middle;
            }
        }
        return ( low + high ) / 2;
    }

(2)牛顿迭代法

public static double sqrt_ ( double t, Double precise) {
        double x0 = t, x1, differ,
                prec = precise != null ? precise : 1e-7;
        
        while ( true ) {
            x1 = ( x0 * x0 + t ) / ( 2 * x0 );
            differ = x1 * x1 - t;
            
            if ( differ <= prec && differ >= -prec ) {
                return x1;
            }
            x0 = x1;
        }
    }

(4)两数之和为定值

参考:https://www.cnblogs.com/DarrenChan/p/8871495.html#_label0

(5)遍历一遍用两个指针实现删除倒数第k个单链表节点

class Node{
    int val;
    Node next;
}

public void delete(Node head,int num){
    Node p1 = head;
    Node p2 = head;
    int index = 0;
    while(p1 != null){
        p1 = p1.next;
        index++;
        if(index > num){
            p2 = p2.next;
        }
    }
    if(p2.next == null){
        p2 = null;
    }else{
        p2.val = p2.next.val;
        p2.next = p2.next.next;
    }
}

猜你喜欢

转载自www.cnblogs.com/DarrenChan/p/9653003.html