LeetCode Weekly Contest 32 解题报告
2017-05-14 16:33
453 查看
第一次参加leetcode的比赛,刚开始全得用class写十分不适应,这场表现的不是很好,以后继续努力吧……
A.Shortest Unsorted Continuous Subarray
View Code
学到很多的题目,利用了一些几何性质。
A.Shortest Unsorted Continuous Subarray
1 class Solution { 2 public: 3 /*计算两点之间距离*/ 4 static int dis(Point p1,Point p2) 5 { 6 return (p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y); 7 } 8 /*利用×乘 计算三点之间关系 0:共线 1:依次成顺时针 2:依次成逆时针*/ 9 static int orientation(Point p1,Point p2,Point p3) 10 { 11 int val=(p3.y-p1.y)*(p2.x-p1.x)-(p3.x-p1.x)*(p2.y-p1.y); 12 if(val==0) 13 return 0; 14 else 15 return val>0?2:1; 16 } 17 /*将点排序 采用结构体进行排序 第一次见*/ 18 struct pointsComparator 19 { 20 Point p0;/*基准点*/ 21 bool operator() (const Point& p1,const Point& p2) 22 { 23 int val=orientation(p0,p1,p2); 24 if(val==0) 25 return dis(p0,p1)<=dis(p0,p2); 26 else 27 return val==2; 28 } 29 pointsComparator(Point p): p0(p){} 30 }; 31 vector<Point> outerTrees(vector<Point>& points) { 32 int n=points.size(); 33 if(n<=3) 34 return points; 35 int ymin=points[0].y,minlo=0;/*找y坐标最小的点,记录其下标*/ 36 for(int i=1;i<n;++i) 37 { 38 if(points[i].y<ymin||(points[i].y==ymin&&points[i].x<points[minlo].x)) 39 ymin=points[i].y,minlo=i; 40 } 41 Point tem=points[0]; 42 points[0]=points[minlo]; 43 points[minlo]=tem; 44 Point p0=points[0]; 45 sort(points.begin(),points.end(),pointsComparator(p0)); 46 47 48 Point pn = points.back(); 49 if (orientation(p0, points[1], pn) != 0) {//非所有点都共线 50 int idx = n-1; 51 while (orientation(p0, points[idx], pn) == 0) {//找到 52 idx--; 53 } 54 reverse(points.begin() + idx + 1, points.end());//调序??为啥 55 } 56 57 58 vector<Point> vertices; 59 vertices.push_back(points[0]); 60 vertices.push_back(points[1]); 61 vertices.push_back(points[2]); 62 for(int i=3;i<n;++i) 63 { 64 while(orientation(vertices[vertices.size()-2],vertices.back(),points[i])==1) 65 vertices.pop_back(); 66 vertices.push_back(points[i]); 67 } 68 return vertices; 69 } 70 };
View Code
学到很多的题目,利用了一些几何性质。
相关文章推荐
- LeetCode Weekly Contest 32解题思路
- LeetCode Weekly Contest 44解题思路
- LeetCode Weekly Contest 43解题思路
- LeetCode Weekly Contest 41解题思路
- LeetCode Weekly Contest 46解题思路
- LeetCode Weekly Contest 29解题思路
- leetcode解题报告(32):Teemo Attacking
- (几何)LeetCode Weekly Contest 32 D-Erect the Fence
- LeetCode Weekly Contest 45解题思路
- LeetCode Weekly Contest 26解题思路
- LeetCode Weekly Contest 48解题思路
- LeetCode Weekly Contest 31解题思路
- LeetCode Weekly Contest 32
- LeetCode Weekly Contest 27解题思路
- LeetCode Weekly Contest 30解题思路
- LeetCode Weekly Contest 36解题思路
- LeetCode Weekly Contest 28解题思路
- LeetCode Weekly Contest 47解题思路
- [leetcode] 43. Multiply Strings 解题报告
- 【LeetCode】419.Battleships in a Board(Medium)解题报告