2015年10月11日,今天做美团数据开发工程师笔试题。其中最后两道编程题如下。
第一题:给X轴上n个点,这n个点可组成n*(n-1)/2条线段,求第k长的线段的长度。
参数
points: 点坐标数组,整形数组
n:点数量,整型
k: 整型
返回值
第k长线段:整形
实例参数:
points:[0,1,3,5]
n:4
k:5
示例返回:
2
解法:这个题目开始还怎么理解,返回k长线段,我的理解假设线段长度数组为:{1,3,5,2,2,2},则第1长的线段为5,第2长的线段为3,第3长的线段为2,第4长为 2,第五长也为2,第6长的我1。那么第k长的线段需要把n*(n-1)/2条线段从大小到小排序。取第线段长度数组第k-1个数即可。
#include<iostream>
using namespace std;
int solve(int *points, int n, int k) {
int sumofline;
int *lengthofline; //用来存取所有线段长度
int i,j,x,l,m=0;
sumofline = n*(n-1)/2; //总的线段数
lengthofline = (int *)malloc(sizeof(int)*sumofline);
//两重循环求取线段长度。
for (i=0;i<n;++i){