美团实习一面

不是搞Java的面试官,可能是管理层,一面主要就是了解一下之前的做的项目,以及算法和编成实现。
出了一道算法题,告诉你道格拉斯算法的过程,
https://blog.csdn.net/foreverling/article/details/78066632
让你实现这个算法过程,找到所有的特征点。

定义了输入是一系列点、阈值;
输出是所有的特征点,并保证是有前后顺序的。
这个题并没有测试集,主要是实现这个过程给他看

我的代码:
它给的函数定义是c++的,需要自己转化为Java的

import java.util.Scanner;
public class Main {
    
    
    public static void main(String[] args) {
    
    
        // 输入,arr[Node], tolerance
        int n = arr.length;
        // 先添加首节点
        res.add(arr[0]);
        douglasPeucker(arr, 0, n - 1, tolerance, res);
        // 再添加尾节点
        res.add(arr[n - 1]);
    }
    public static void douglasPeucker(Node[] arr, int left, int right, double tolerance, List<Node> res) {
    
    
        double max = 0;
        int c = 0;
        for (int i = left + 1; i < right; i++) {
    
    
            double dis = distance_pt_to_segment(arr[i], arr[left], arr[right]);
            if (dis > max) {
    
    
                max = dis;
                c = i;
            }
        }
        if (max > tolerance) {
    
    
            // 递归左边
            douglasPeucker(arr, left, c, tolerance, res);
            // 添加节点,保证前后顺序
            res.add(arr[c]);
            // 递归右边
            douglasPeucker(arr, c, right, tolerance, res);
        }
    }
    
    public static double distance_pt_to_segment(Node p, Node a1, Node a2){
    
    
        return 0; // 不用实现
    }
    
}
class Node {
    
    
    double x,
    double y,
}

主要考察的是你对一个为接触过事务(算法)的理解能力,以及用代码将它实现的编程能力

猜你喜欢

转载自blog.csdn.net/weixin_42541360/article/details/114972620