题目
2280
给你一个二维整数数组 stockPrices ,其中 stockPrices[i] = [dayi, pricei] 表示股票在 dayi 的价格为 pricei 。折线图 是一个二维平面上的若干个点组成的图,横坐标表示日期,纵坐标表示价格,折线图由相邻的点连接而成。比方说下图是一个例子:
解
class Solution {
public int minimumLines(int[][] stockPrices) {
if(stockPrices.length==1) return 0;
int res=1;
for(int i=1;i<stockPrices.length-1;i++){
int[] a=stockPrices[i];
int[] b=stockPrices[i+1];
int[] c=stockPrices[i-1];
if((a[1]-c[1])*(b[0]-a[0])==(a[0]-c[0])*(b[1]-a[1])){
continue;
}else{
res++;
}
}
return res;
}
}
其实本题并不难,思想很简单,就是判断斜率是否相等。但是,请注意,这里有一个坑,题目中并没有说明(我踩过),因为给出的数组没用说是有序的,我们需要先将二维数组转换成有序数组,然后进行斜率的计算。因此,我们需要在程序开始前加入数组排序的步骤:
class Solution {
public int minimumLines(int[][] stockPrices) {
Arrays.sort(stockPrices, (o1, o2) -> o1[0] - o2[0]);
if(stockPrices.length==1) return 0;
int res=1;
for(int i=1;i<stockPrices.length-1;i++){
int[] a=stockPrices[i];
int[] b=stockPrices[i+1];
int[] c=stockPrices[i-1];
if((a[1]-c[1])*(b[0]-a[0])==(a[0]-c[0])*(b[1]-a[1])){
continue;
}else{
res++;
}
}
return res;
}
}