K个最近的点

给定一些 points 和一个 origin,从 points 中找到 k 个离 origin 最近的点。按照距离由小到大返回。如果两个点有相同距离,则按照x值来排序;若x值也相同,就再按照y值排序。


样例
给出 points = [[4,6],[4,7],[4,4],[2,5],[1,1]], origin = [0, 0], k = 3

返回 [[1,1],[2,5],[4,4]]


//Definition for a point.
class Point {
     int x;
     int y;
     Point() { x = 0; y = 0; }
     Point(int a, int b) { x = a; y = b; }
 }
 
public class Solution {
	 /**
     * @param points a list of points
     * @param origin a point
     * @param k an integer
     * @return the k closest points
     */
    @SuppressWarnings("null")
	public static Point[] kClosest(Point[] points, Point origin, int k) {
    	Point[] outputPoints = new Point[k];
    	for(int i=0;i<points.length;i++){
    		for (int j=i;j<points.length;j++){
    			if(length(points[i],origin)>length(points[j],origin)){
    				Point temp=points[i];
    				points[i]=points[j];
    				points[j]=temp;
    			}else if(length(points[i],origin)==length(points[j],origin)){
    				if(points[i].x>points[j].x){
    					Point temp=points[i];
        				points[i]=points[j];
        				points[j]=temp;
    				}else if(points[i].y>points[j].y){
    					Point temp=points[i];
        				points[i]=points[j];
        				points[j]=temp;
    				}
    			}
    		}
    	}
    	for (int i=0;i<k;i++){
    		outputPoints[i]=points[i];
    	}
		return outputPoints;
    }
    
    //小到大
    public void bubbleSort(int[] unsorted){
    	for (int i=0;i<unsorted.length;i++)
    		for (int j=i;j<unsorted.length;i++)
    			if(unsorted[i]>unsorted[j]){
    				int temp=unsorted[i];
    				unsorted[i]=unsorted[j];
    				unsorted[j]=temp;
    			}
    }
    
    
    public static double length(Point start,Point end){
    	int temp_x=Math.abs(start.x-end.x);
    	int temp_y=Math.abs(start.y-end.y);
    	return Math.sqrt(temp_x*temp_x+temp_y*temp_y);        
    }
    
    public static void  print(Point pp){
    	System.out.println("最近的点:("+pp.x+","+pp.y+")");
    }

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Point[] p= {new Point(4,6),new Point(4,7),new Point(4,4),new Point(2,5),new Point(1,1)};
		Point origin = new Point(0,0);
		int k=3;
		Point[] pNew = kClosest(p, origin, k);
		for(int i=0;i<pNew.length;i++){
			print(pNew[i]);
		}
	}

}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值