糖逗 发表于 2021-4-9 21:13:03

C++刷leetcode(面试题 16.14. 最佳直线)【数学】

题目描述:

给定一个二维平面及平面上的 N 个点列表Points,其中第i个点的坐标为Points=。请找出一条直线,其通过的点的数目最多。

设穿过最多点的直线所穿过的全部点编号从小到大排序的列表为S,你仅需返回,S]作为答案,若有多条直线穿过了相同数量的点,则选择S值较小的直线返回,S相同则选择S值较小的直线返回。

示例:

输入: [,,,]
输出:
解释: 所求直线穿过的3个点的编号为
提示:

2 <= len(Points) <= 300
len(Points) = 2


class Solution {
public:
    vector<int> bestLine(vector<vector<int>>& points) {
      vector<int>res(2);
      int len = points.size();
      int max_len = 0;
      for(int i = 0; i < len-1; i++){
            map<double, vector<int> >store;
            double max_temp = 0;
            for(int j = i+1; j < len; j++){
                double temp;
                if(points - points == 0){
                  temp = 0.0;

                }else if(points - points == 0){
                  temp = (double)INT_MAX;

                }else{
                  temp = (points - points) / (double)(points - points);
                }
                store.push_back(j);
                if(store.size() > max_len){
                  if(store.size() >= 1){
                        res = i;
                        res = store;
                  }
                  max_len = store.size();
                  max_temp = temp;
                }
            }
      }
      return res;
    }
};


注意事项:直线斜率计算。

糖逗 发表于 2021-4-9 21:16:28

{:10_259:}
页: [1]
查看完整版本: C++刷leetcode(面试题 16.14. 最佳直线)【数学】