提问。新人求教。

shabby0104 2016-05-17 08:46:18
题目是Leetcode上的第一题twosum
我的代码是

int* twoSum(int* nums, int numsSize, int target) {
int i;
int x1, x2, tmp;
memset( visit, 0, sizeof( visit ) );
int *ans = ( int *) malloc( sizeof( int ) * 2 );
if( ans == NULL ) {
return NULL;
}
ans[ 1 ] = 0;
ans[ 0 ] = 0;
for ( i = 0; i < numsSize; i++ ) {
visit[ nums[ i ] ]++;
}
for ( i = 0, x1 = -1, x2 = -1; i < numsSize; i++ ) {
if( visit[ target - nums[ i ] ] > 0 ){
if( ( nums[ i ] * 2 ) == target ) {
if( visit[ target - nums[ i ] ] < 2 ) {
continue;
}
}
x1 = i;
x2 = target - nums[ i ];
break;
}
}
if( x1 == -1 ) {
return NULL;
}
else {
for ( i = 0; i < numsSize; i++ ) {
if( x2 == nums[ i ] && x1 != i ) {
x2 = i;
break;
}
}
ans[ 0 ] = x1;
ans[ 1 ] = x2;
return ans;
}
}


对于
[2,1,9,4,4,56,90,3]
8
我本地是输出3,4
但是网教我的输出的2,-1;
为什么?
...全文
146 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2016-05-17
  • 打赏
  • 举报
回复
那就说明可能代码逻辑有问题,解决这种问题最好的办法就单步跟踪程序运行,观察分析原因
月凉西厢 2016-05-17
  • 打赏
  • 举报
回复
我也遇到过这种问题,后来重写了一下算法就好了。可能是编译和运行的环境不一样造成的(?),也可能是lc的测试程序写的有问题,但这两种可能性个人觉得都比较小。很有可能是你的算法写的有毛病,有毛病的程序才会被运行环境左右结果。
赵4老师 2016-05-17
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧