给定二维空间中四点的坐标,返回四点是否可以构造一个正方形。
2017-12-06 11:04
120 查看
本题源自leetcode 593
------------------------------------------------------------
思路:、用一个有序集合,计算四个点俩俩之间的距离,存入有序集合。如果是正方形,那么有序集合最终只有边和对角线俩个值,且不为0
代码:
bool validSquare(vector<int>& p1, vector<int>& p2, vector<int>& p3, vector<int>& p4) {
unordered_set<int> s;
s.insert(d(p1,p2));
s.insert(d(p1,p3));
s.insert(d(p2,p3));
s.insert(d(p1,p4));
s.insert(d(p2,p4));
s.insert(d(p3,p4));
return !s.count(0) && s.size() == 2;
}
int d(vector<int>& p1,vector<int>& p2){
return (p1[0]-p2[0])*(p1[0] - p2[0]) + (p1[1] - p2[1]) * (p1[1] - p2[1]);
}
------------------------------------------------------------
思路:、用一个有序集合,计算四个点俩俩之间的距离,存入有序集合。如果是正方形,那么有序集合最终只有边和对角线俩个值,且不为0
代码:
bool validSquare(vector<int>& p1, vector<int>& p2, vector<int>& p3, vector<int>& p4) {
unordered_set<int> s;
s.insert(d(p1,p2));
s.insert(d(p1,p3));
s.insert(d(p2,p3));
s.insert(d(p1,p4));
s.insert(d(p2,p4));
s.insert(d(p3,p4));
return !s.count(0) && s.size() == 2;
}
int d(vector<int>& p1,vector<int>& p2){
return (p1[0]-p2[0])*(p1[0] - p2[0]) + (p1[1] - p2[1]) * (p1[1] - p2[1]);
}
相关文章推荐
- 给定平面上的圆(圆心坐标和半径长度)和一个正方形(四个点的坐标)判断两者是否有交点。
- 1.实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 2.判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1
- 确定字符互异 确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。 给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代
- 给定一个字符串列表,找出单词中最长单词,可以用l列表中的其他单词一次构建一个字符。返回具有最小字典顺序的最长单词。
- 1.实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 2.判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1
- 题目四:给定一个数组,值可以为正、负和0,请返回累加和小于等于k的最长子数组长度。 时间复杂度:O(n)
- 给定一个字符串s和一个单词dict的字典,确定s是否可以分割成一个或多个字典单词的空格分隔的序列。 s ="leetcode", dict =["leet", "code"].
- *(5)输入互不相同的一组整数,构造一棵二叉排序树,要求: ① 按递减有序的顺序输出; ② 输入一个整数,查找该整数是否在该二叉排序树中,查找成功返回1,否则返回0; ③ 在②中,若查找成功,则将该结
- 判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
- 请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。 给定一个string iniString,请返回一个string,为翻转后的字符串。保证字符串的
- python判断是否可以只插一个字符,让字符串变成回文,返回true/false
- 原串翻转 请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。 给定一个string iniString,请返回一个string,为翻转后的字符串
- 回文链表 请编写一个函数,检查链表是否为回文。 给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文。 测试样例: {1,2,3,2,1} 返回:true {1,2,3,
- 度度熊有一张网格纸,但是纸上有一些点过的点,每个点都在网格点上,若把网格看成一个坐标轴平行于网格线的坐标系的话,每个点可以用一对整数x,y来表示。度度熊必须沿着网格线画一个正方形,使所有点在正方形的内部或者边界。然后把这个正方形剪下来。问剪掉正方形的最小面积是多少。
- 给定一个random()函数,返回1到n的随机值,构造一个random2()的函数,返回1到m...
- 给定一个数字列表,返回其所有可能的排列。 注意事项 你可以假设没有重复数字。
- 请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。 给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代
- 题目三:给定一个数组,值可以为正、负和0,请返回累加和为给定值k的最长子数组长度。
- POJ1228:Grandpa's Estate(给定一些点,问是否可以确定一个凸包)
- 编写函数,接受一对指向vector<int>的迭代器和一个int值。在两个迭代器指定的范围内查找给定的值,返回一个布尔值来指出是否找到。