c*******n 发帖数: 112 | 1 但是如果把while (i < (prices.size() - 1)) 改成两行 int k = (prices.size() -
1); while (i < k)就没有问. 题编译器的问题吗
int maxProfit(vector &prices) {
int sum = 0;
int i = 0;
while (i < (prices.size() - 1))
{
if (prices[i] < prices[i + 1])
{
sum += prices[i + 1] - prices[i];
}
++i;
}
return sum;
}
int _tmain(int argc, _TCHAR* argv[])
{
int a = maxProfit(vector());
return 0;
} |
A*****i 发帖数: 3587 | 2 你这题解法有错误
第一个runtime error是因为没有考虑vector为空的时候情况
然后逻辑错误是你只是计算每一天和前一天差的和,并不是最大值。 |
h*******e 发帖数: 1377 | 3 price.size()是 unsigned int 类型。。。加加减减的时候要注意类型转换你自己
trace进去就发现 price.size() -1 当price.size() == 0的时候 结果并不等于 -1
我一般都 int(price.size()) -1 |
y*****1 发帖数: 76 | 4 不只这样,所有STL容器的size()都是返回size_t这个非负整数类型,这个类型和你的
OS以及32位64位有关,并不一定总是定义成unsigned int,
sizeof(size_t)可能是4或是8,和系统有关。
这些正整数、非负整数还有可能大小不一样,全部混在一起时可坑得很,得小心各种
overflow。 |
h*******e 发帖数: 1377 | 5 好的,又长知识了, 就是有可能是和int相同位数有可能和long 相同位数哦。
【在 y*****1 的大作中提到】 : 不只这样,所有STL容器的size()都是返回size_t这个非负整数类型,这个类型和你的 : OS以及32位64位有关,并不一定总是定义成unsigned int, : sizeof(size_t)可能是4或是8,和系统有关。 : 这些正整数、非负整数还有可能大小不一样,全部混在一起时可坑得很,得小心各种 : overflow。
|