程序员面试金典:平分的直线、穿点最多的直线

1.平分的直线

题目描述

在二维平面上,有两个正方形,请找出一条直线,能够将这两个正方形对半分。假定正方形的上下两条边与x轴平行。

给定两个vecotrAB,分别为两个正方形的四个顶点。请返回一个vector,代表所求的平分直线的斜率和截距,保证斜率存在。

测试样例:
[(0,0),(0,1),(1,1),(1,0)],[(1,0),(1,1),(2,0),(2,1)]
返回:[0.0,0.5]

思路:平分线必定过两个正方形的的中点,因此求出两个正方形的中点,然后分别求出其斜率和截距,赋给arr[0]和arr[1]。

import java.util.*;

/*
public class Point {
    int x;
    int y;
    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
    public Point() {
        this.x = 0;
        this.y = 0;
    }
}*/
public class Bipartition {
    public static double[] getBipartition(Point[] A, Point[] B) {
        double [] arr={0,0};
        double Ax=0,Ay=0,Bx=0,By=0;
        for(int i=0;i<A.length;i++){
            Ax+=A[i].x;
            Ay+=A[i].y;
        }
        Ax=Ax/4;	Ay=Ay/4;
        
        for(int i=0;i<B.length;i++){
            Bx+=B[i].x;
            By+=B[i].y;
        }
        Bx=Bx/4;	By=By/4;

        //斜率
        arr[0]=(By-Ay)/(Bx-Ax);
        //截距
        arr[1]=Ay-arr[0]*Ax;
        return arr;
    }
}

2.穿点最多的直线

题目描述

在二维平面上,有一些点,请找出经过点数最多的那条线。

给定一个点集vector<point>p和点集的大小n,没有两个点的横坐标相等的情况,请返回一个vector<double>,代表经过点数最多的那条直线的斜率和截距。</double></point>


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值