Chinaunix首页 | 论坛 | 博客
  • 博客访问: 40271
  • 博文数量: 37
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 372
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-12 23:27
文章分类

全部博文(37)

文章存档

2014年(5)

2013年(32)

我的朋友

分类: C/C++

2013-11-24 14:47:53

遍历。每次处理两个点,然后找与他们在一条直线上的点,统计并更新,即可。


点击(此处)折叠或打开

  1. /**
  2.  * Definition for a point.
  3.  * struct Point {
  4.  * int x;
  5.  * int y;
  6.  * Point() : x(0), y(0) {}
  7.  * Point(int a, int b) : x(a), y(b) {}
  8.  * };
  9.  */
  10. class Solution {
  11. public:
  12.     int maxPoints(vector<Point> &points) {
  13.         // IMPORTANT: Please reset any member data you declared, as
  14.         // the same Solution instance will be reused for each test case.
  15.         if(points.size()<3) return points.size();
  16.         int count=0;
  17.         int max=0;
  18.         
  19.         for(int i=0;i<points.size()-1;i++)
  20.         {
  21.             for(int j=i+1;j<points.size();j++)
  22.             {
  23.                 int sign=0;
  24.                 int a,b,c;
  25.                 if(points[i].x==points[j].x) sign=1;
  26.                 else
  27.                 {
  28.                     a=points[j].x-points[i].x;
  29.                     b=points[j].y-points[i].y;
  30.                     c=a*points[i].y-b*points[i].x;
  31.                 }
  32.                 int len=0;
  33.                 for(int k=0;k<points.size();k++)
  34.                 {
  35.                     if((0==sign&&a*points[k].y==c+b*points[k].x)||(1==sign&&points[k].x==points[j].x)) len++;
  36.                 }
  37.                 if(len>max) max=len;
  38.             }
  39.         }
  40.         return max;
  41.     }
  42. };

阅读(1550) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~