描述
给你一个二维整数数组 stockPrices ,其中 stockPrices[i] = [dayi, pricei] 表示股票在 dayi 的价格为 pricei 。折线图 是一个二维平面上的若干个点组成的图,横坐标表示日期,纵坐标表示价格,折线图由相邻的点连接而成。
分析
思路不难,难点在于计算斜率的精度。
用除法直接结算斜率有错误。比如原本两条直线的斜率不相等,因为精度不够,结果一除导致斜率变的相等了,由此出现了错误。采用乘法来判断两端直线的斜率是否一致。
class Solution {
public int minimumLines(int[][] stockPrices) {
int n = stockPrices.length;
if (n == 1) {
return 0;
}
Arrays.sort(stockPrices,new Comparator<>(){
public int compare(int[] a,int[] b) {
return b[0] - a[0];
}
});
int times = 1;
for (int i = 2; i < n; i++) {
long a = (stockPrices[i][1] - stockPrices[i-1][1]) * (stockPrices[i-1][0] - stockPrices[i-2][0]);
long b = (stockPrices[i-1][1] - stockPrices[i-2][1]) * (stockPrices[i][0] - stockPrices[i-1][0]);
if (a != b) {
times++;
}
}
return times;
}
}