Leetcode 可能挑战:检查它是否是一条直线
Leetcode May Challenge : Check If It Is a Straight Line
这是我的问题代码:检查它是否是一条直线
bool checkStraightLine(vector<vector<int>>& a) {
double m = (((double)a[1][1]-a[0][1])/(a[1][0]-a[0][0]));
for(int i=1;i<a.size()-1;i++)
{
double slope=(((double)a[i][1]-a[i+1][1])/(a[i][0]-a[i+1][0]));
if( m!=slope)
return false;
}
return true;
}
我的疑问是为什么我的代码在替换时会产生错误:
double m = (((double)a[1][1]-a[0][1])/(a[1][0]-a[0][0]));
和
double m = (double)((a[1][1]-a[0][1])/(a[1][0]-a[0][0]));
和
double slope=(((double)a[i][1]-a[i+1][1])/(a[i][0]-a[i+1][0]));
和
double slope=(double)((a[i][1]-a[i+1][1])/(a[i][0]-a[i+1][0]));
鉴于:
int a = 1 , b = 2;
这行代码:
double d = (double)(a/b); // d is 0.
与不相同:
double d = ((double)a/b); // d is 0.5
在第一种情况下,您在转换结果之前进行整数除法。
在第二种情况下,您将分子转换为 double
,然后 然后 除法,即进行浮点除法。
在你的例子中,错误可能是因为代码期望一个非零斜率,但整数除法给你一个零。
注意这个对比:
if( m!=slope)
存在根本性缺陷。您永远不应该比较浮点数是否相等。改为使用阈值进行比较。
这是我的问题代码:检查它是否是一条直线
bool checkStraightLine(vector<vector<int>>& a) {
double m = (((double)a[1][1]-a[0][1])/(a[1][0]-a[0][0]));
for(int i=1;i<a.size()-1;i++)
{
double slope=(((double)a[i][1]-a[i+1][1])/(a[i][0]-a[i+1][0]));
if( m!=slope)
return false;
}
return true;
}
我的疑问是为什么我的代码在替换时会产生错误:
double m = (((double)a[1][1]-a[0][1])/(a[1][0]-a[0][0]));
和
double m = (double)((a[1][1]-a[0][1])/(a[1][0]-a[0][0]));
和
double slope=(((double)a[i][1]-a[i+1][1])/(a[i][0]-a[i+1][0]));
和
double slope=(double)((a[i][1]-a[i+1][1])/(a[i][0]-a[i+1][0]));
鉴于:
int a = 1 , b = 2;
这行代码:
double d = (double)(a/b); // d is 0.
与不相同:
double d = ((double)a/b); // d is 0.5
在第一种情况下,您在转换结果之前进行整数除法。
在第二种情况下,您将分子转换为 double
,然后 然后 除法,即进行浮点除法。
在你的例子中,错误可能是因为代码期望一个非零斜率,但整数除法给你一个零。
注意这个对比:
if( m!=slope)
存在根本性缺陷。您永远不应该比较浮点数是否相等。改为使用阈值进行比较。