矩形 --- lintcode 820

本文介绍了一种从给定点集中查找是否存在四个点可以构成矩形的算法实现。通过遍历点集并利用坐标关系来确定可能的矩形顶点组合,最终验证是否存在满足条件的矩形。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点击打开原题


已知:

给定我们一个点的集合,找出其中是否存在四个点能构成一个矩形


思路:

这道题的思路,往简单了想,我是这么考虑的:一个矩形的四个点分为左上右上左下右下,我们遍历点集合的所有点,假设当前点是左上,找到满足要求的所有左下和右上,然后左下和右上配对产生右下,判断右下是否在点集合之中,如果存在,则返回“YES”,如果遍历完都不存在,就返回“NO”


/*
public class Point {
    public int x;
    public int y;
    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}
*/

public class Solution {
    /**
     * @param pointSet: The point set
     * @return: The answer
     */
    public String rectangle(Point[] pointSet) {
		for (Point p : pointSet) {
			if (calculate(p, pointSet)) {
				return "YES";
			}
		}
		return "NO";
	}

	private boolean calculate(Point p, Point[] pointSet) {
		for (int i = 0; i < pointSet.length; i++) {
			if (pointSet[i].x == p.x && pointSet[i].y < p.y) {
				for (int j = 0; j < pointSet.length; j++) {
					if (pointSet[j].x > p.x && pointSet[j].y == p.y) {
						Point temp = new Point(pointSet[j].x, pointSet[i].y);
						if (contain(pointSet, temp)) {
							return true;
						}
					}
				}
			}
		}

		return false;
	}

	private boolean contain(Point[] pointSet, Point temp) {
		for (Point p : pointSet) {
			if (p.x == temp.x && p.y == temp.y) {
				return true;
			}
		}

		return false;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值