由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - C++定义数组长度可以写成int a[n]吗?
相关主题
为什么板上这么多人还是抱着C++不学Java呢?[板上牛人多]问个算法题
C++ template问道G题(2)
大牛推荐计算机面试的书吧关于leetcode上那个买卖股票II的问题
bloomberg 问题: C++ construct 时用 new 没"()"Best Time to Buy and Sell Stock II这么简单?
A problem about Heap and Stack.有个很简单的程序但是有segmentation fault是问啥
问一个C的简单问题bloomberg 电面
问一个C++ set和unordered_set iterator的问题Char x[] = "abc"; 是在heap还是stack上? (转载)
一个电面请教个C++编程思路
相关话题的讨论汇总
话题: int话题: prices话题: vector话题: days话题: global
进入JobHunting版参与讨论
1 (共1页)
t*********3
发帖数: 87
1
Leetcode的Best Time to Buy and Sell Stock IV 那道题,我看到网上的答案就改了
下来:
请注意看定义数组local和global的那两行。如果按照int a[n]的方式定义,leetcode
能编译但是输出错误。请问这是为什么?
class Solution {
public:
int maxProfit(int k, vector& prices) {
int days = prices.size();
if(days == 0) return 0;
if(k >= days/2) return maxProfitUnlimitedTimes(prices);
//int local[days][k+1] = {0}; //-> Compile OK but run error, if I
define the array in this way. Why?
//int global[days][k+1] = {0};
vector > local(days, vector(k+1)); // -> Run OK.
vector > global(days, vector(k+1));

int diff;

for(int i=1; i diff = prices[i] - prices[i-1];
for(int j=1; j<=k; j++) {
local[i][j] = max(global[i-1][j-1] + diff, local[i-1][j] +
diff);
global[i][j] = max(local[i][j], global[i-1][j]);
}
}

return global[days-1][k];
}

int maxProfitUnlimitedTimes(vector &prices)
{
int profit = 0;
for(int i=1; i {
if(prices[i] > prices[i-1])
{
profit += prices[i] - prices[i-1];
}
}
return profit;
}
};
=============================
输出错误的case是这个:
Input: 2, [3,2,6,5,0,3]
Output: 20292312
Expected: 7
n*****n
发帖数: 5277
2
c/c++里数组长度只能是常数,不能是变量
n******n
发帖数: 12088
3
可以是变量。C99

【在 n*****n 的大作中提到】
: c/c++里数组长度只能是常数,不能是变量
s********n
发帖数: 62
4
还是用vector resize下安稳吧
m*****n
发帖数: 204
5
int a[][] is allocated entirely on stack, while vector's data array is in
heap. So the problem probably lies in the call frame size. I've seen a C++
compiler that overlays two call frames because the actual call frame size
exceeds the internal max. Does the code fail all cases or just those where
k * days seem large?

leetcode

【在 t*********3 的大作中提到】
: Leetcode的Best Time to Buy and Sell Stock IV 那道题,我看到网上的答案就改了
: 下来:
: 请注意看定义数组local和global的那两行。如果按照int a[n]的方式定义,leetcode
: 能编译但是输出错误。请问这是为什么?
: class Solution {
: public:
: int maxProfit(int k, vector& prices) {
: int days = prices.size();
: if(days == 0) return 0;
: if(k >= days/2) return maxProfitUnlimitedTimes(prices);

t*********3
发帖数: 87
6
输出错误的case是这个:
Input: 2, [3,2,6,5,0,3]
Output: 20292312
Expected: 7

+
where

【在 m*****n 的大作中提到】
: int a[][] is allocated entirely on stack, while vector's data array is in
: heap. So the problem probably lies in the call frame size. I've seen a C++
: compiler that overlays two call frames because the actual call frame size
: exceeds the internal max. Does the code fail all cases or just those where
: k * days seem large?
:
: leetcode

n******n
发帖数: 12088
7
gdb看一下。

【在 t*********3 的大作中提到】
: 输出错误的case是这个:
: Input: 2, [3,2,6,5,0,3]
: Output: 20292312
: Expected: 7
:
: +
: where

j********g
发帖数: 80
8
我觉得是初始化问题,你加个memset(local,0,sizeof(local));试试
n******n
发帖数: 12088
9
直接拿C写吧!

【在 j********g 的大作中提到】
: 我觉得是初始化问题,你加个memset(local,0,sizeof(local));试试
m*****n
发帖数: 204
10
Then what I said is unlikely to be the problem. This case is small. Perhaps
you can trace it in gdb.

【在 t*********3 的大作中提到】
: 输出错误的case是这个:
: Input: 2, [3,2,6,5,0,3]
: Output: 20292312
: Expected: 7
:
: +
: where

相关主题
问一个C的简单问题[板上牛人多]问个算法题
问一个C++ set和unordered_set iterator的问题问道G题(2)
一个电面关于leetcode上那个买卖股票II的问题
进入JobHunting版参与讨论
n********e
发帖数: 1655
11
用vector或者动态分配,用new和delete
c****g
发帖数: 3893
12
天啦。。。现在的CS是不是只学算法,连static allocate, dynamic allocate 这些基
本概念都不学了?

leetcode

【在 t*********3 的大作中提到】
: Leetcode的Best Time to Buy and Sell Stock IV 那道题,我看到网上的答案就改了
: 下来:
: 请注意看定义数组local和global的那两行。如果按照int a[n]的方式定义,leetcode
: 能编译但是输出错误。请问这是为什么?
: class Solution {
: public:
: int maxProfit(int k, vector& prices) {
: int days = prices.size();
: if(days == 0) return 0;
: if(k >= days/2) return maxProfitUnlimitedTimes(prices);

r*g
发帖数: 186
13
问这种问题看了的确觉得无奈
不过lz可能是转行的啦 包容点吧

【在 c****g 的大作中提到】
: 天啦。。。现在的CS是不是只学算法,连static allocate, dynamic allocate 这些基
: 本概念都不学了?
:
: leetcode

t*********3
发帖数: 87
14
确实是初始化的问题,加了memset就行了。我原以为 int local[days][k+1] = {0}
就可以把数组初始化为0,但是GDB之后发现不行。

【在 j********g 的大作中提到】
: 我觉得是初始化问题,你加个memset(local,0,sizeof(local));试试
t*********3
发帖数: 87
15
这个为什么是和static allocate, danamic allocate相关呢?这两种allocate对初始
化要求不同吗?

【在 c****g 的大作中提到】
: 天啦。。。现在的CS是不是只学算法,连static allocate, dynamic allocate 这些基
: 本概念都不学了?
:
: leetcode

c****g
发帖数: 3893
16
更无奈的是好多回答,几乎没一个答在点子上的,这年头
刷题刷成这样。。。

【在 r*g 的大作中提到】
: 问这种问题看了的确觉得无奈
: 不过lz可能是转行的啦 包容点吧

t*********3
发帖数: 87
17
请问“点子”应该是什么?谢谢

【在 c****g 的大作中提到】
: 更无奈的是好多回答,几乎没一个答在点子上的,这年头
: 刷题刷成这样。。。

c****g
发帖数: 3893
18
知道static 和dynamic allocation 的区别不?学过compiler 没有?

【在 t*********3 的大作中提到】
: 请问“点子”应该是什么?谢谢
t*********3
发帖数: 87
19
我只知道一个是固定的,一个可以是变长的。C不能写int a[n],但是新一些的C++编译
器可以这么写。

【在 c****g 的大作中提到】
: 知道static 和dynamic allocation 的区别不?学过compiler 没有?
c****g
发帖数: 3893
20
Google automatic, dynamic, staitic variable 的区别,它们啥时候allocate的,
allocate 在哪种memory,你
就知道为啥以前的C/C++ compiler 不能用a〔n〕. 再看看这个就知道C99是怎么处理它的
http://www.drdobbs.com/the-new-cwhy-variable-length-arrays/1844
你要真去面C/C++, 犯这种错误,刷再多的题都没用了。

【在 t*********3 的大作中提到】
: 我只知道一个是固定的,一个可以是变长的。C不能写int a[n],但是新一些的C++编译
: 器可以这么写。

相关主题
Best Time to Buy and Sell Stock II这么简单?Char x[] = "abc"; 是在heap还是stack上? (转载)
有个很简单的程序但是有segmentation fault是问啥请教个C++编程思路
bloomberg 电面为什么C++的constructor出错可以抛出异常,而destructor出错
进入JobHunting版参与讨论
A*******e
发帖数: 2419
21
现在都是Java/Python,没人关心内存分配了。
就算是C++,也该用堆变量、STL容器、智能指针,用到new/delete的时候很少,除非写
系统软件。

它的

【在 c****g 的大作中提到】
: Google automatic, dynamic, staitic variable 的区别,它们啥时候allocate的,
: allocate 在哪种memory,你
: 就知道为啥以前的C/C++ compiler 不能用a〔n〕. 再看看这个就知道C99是怎么处理它的
: http://www.drdobbs.com/the-new-cwhy-variable-length-arrays/1844
: 你要真去面C/C++, 犯这种错误,刷再多的题都没用了。

t*********3
发帖数: 87
22
你发的网页里的东西我能读懂,我自己也写过*p那种动态数组resize,就是满了就乘以
2。
但是我还是不理解为什么你的回答和我的问题相关:
int local[days][k+1] = {0}; //-> Compile OK but run error, if I
define the array in this way. Why?

它的

【在 c****g 的大作中提到】
: Google automatic, dynamic, staitic variable 的区别,它们啥时候allocate的,
: allocate 在哪种memory,你
: 就知道为啥以前的C/C++ compiler 不能用a〔n〕. 再看看这个就知道C99是怎么处理它的
: http://www.drdobbs.com/the-new-cwhy-variable-length-arrays/1844
: 你要真去面C/C++, 犯这种错误,刷再多的题都没用了。

t*********3
发帖数: 87
23
你说的“这种错误”,具体是指哪个错误?

它的

【在 c****g 的大作中提到】
: Google automatic, dynamic, staitic variable 的区别,它们啥时候allocate的,
: allocate 在哪种memory,你
: 就知道为啥以前的C/C++ compiler 不能用a〔n〕. 再看看这个就知道C99是怎么处理它的
: http://www.drdobbs.com/the-new-cwhy-variable-length-arrays/1844
: 你要真去面C/C++, 犯这种错误,刷再多的题都没用了。

c****g
发帖数: 3893
24
你读懂了个P,run time allocate 的memory,你在compile time 初始化,还说读懂
了。compiler 又不知道你的size,怎么知道该给你整几个0 ?
不管你是不是暴力转行的,真要面C/C++,还是先系统学点基础知识,光闷头刷题也不
行。

【在 t*********3 的大作中提到】
: 你发的网页里的东西我能读懂,我自己也写过*p那种动态数组resize,就是满了就乘以
: 2。
: 但是我还是不理解为什么你的回答和我的问题相关:
: int local[days][k+1] = {0}; //-> Compile OK but run error, if I
: define the array in this way. Why?
:
: 它的

s*********e
发帖数: 7
25
楼上的态度还是好点吧。。。
h**********e
发帖数: 4328
26
现在是不是真没人学c/c++了啊

【在 t*********3 的大作中提到】
: Leetcode的Best Time to Buy and Sell Stock IV 那道题,我看到网上的答案就改了
: 下来:
: 请注意看定义数组local和global的那两行。如果按照int a[n]的方式定义,leetcode
: 能编译但是输出错误。请问这是为什么?
: class Solution {
: public:
: int maxProfit(int k, vector& prices) {
: int days = prices.size();
: if(days == 0) return 0;
: if(k >= days/2) return maxProfitUnlimitedTimes(prices);

c****g
发帖数: 3893
27
现在除了刷题,写几个function, 估计啥都
没人愿意学了。G的刷题文化最后搞出这么
个结果。

【在 h**********e 的大作中提到】
: 现在是不是真没人学c/c++了啊
h**********e
发帖数: 4328
28
looks like c/c++ is almost useless in SD nowadays
i know multiple experienced SDEs (who worked in MS, G ... for years) do not
know what namespace is

【在 c****g 的大作中提到】
: 现在除了刷题,写几个function, 估计啥都
: 没人愿意学了。G的刷题文化最后搞出这么
: 个结果。

n******n
发帖数: 12088
29
语言高级化,大势所趋。跟刷题关系不大。

【在 c****g 的大作中提到】
: 现在除了刷题,写几个function, 估计啥都
: 没人愿意学了。G的刷题文化最后搞出这么
: 个结果。

c****g
发帖数: 3893
30
干脆直接说不会C/C++也行。但说会又用了,
却连最毛皮的东西都不懂,这个在面试的时候
是最大的忌讳,人家会以为你整体就这水平。
如果简历中写了,面试时可能被问到的东西,
最起码要花点时间把基本知识搞懂,这个懒
偷不得。

not

【在 h**********e 的大作中提到】
: looks like c/c++ is almost useless in SD nowadays
: i know multiple experienced SDEs (who worked in MS, G ... for years) do not
: know what namespace is

相关主题
C++ Q42: (C22)C++ template
A malloc/free question using C/C++大牛推荐计算机面试的书吧
为什么板上这么多人还是抱着C++不学Java呢?bloomberg 问题: C++ construct 时用 new 没"()"
进入JobHunting版参与讨论
c****g
发帖数: 3893
31

现在的CS学不学系统编程? 俺的映像中
以前好像是必修课。

【在 n******n 的大作中提到】
: 语言高级化,大势所趋。跟刷题关系不大。
h**********e
发帖数: 4328
32
but now you do not need any CS class taken to have a FLG offer

【在 c****g 的大作中提到】
:
: 现在的CS学不学系统编程? 俺的映像中
: 以前好像是必修课。

c****g
发帖数: 3893
33
没学过的不会没关系,只要有能力,需要的时候
可以补。学过的,有CS学位的,还要犯一些低
级错误就麻烦了。

【在 h**********e 的大作中提到】
: but now you do not need any CS class taken to have a FLG offer
r*g
发帖数: 186
34
莫生气
ps:看你说话口气很牛
给推荐个工作吧lz这个我都会
本科通读过effective c++, c++ primer 4
c的陷阱与缺陷
c与指针
c专家编程
会凸优化 机器学习理论 讲过泛函分析
会统计推断
new grad master
做过几年research写过air force的项目
做过bioinformatics
但无工作经验
开张太难找不到工作

【在 c****g 的大作中提到】
: 现在除了刷题,写几个function, 估计啥都
: 没人愿意学了。G的刷题文化最后搞出这么
: 个结果。

r*g
发帖数: 186
35
感叹找个工作真难
5月份来加州看看
感觉各种搬砖技能学的再多
也不如刷题刷到手酸
可能这就是为啥现在大家都刷题吧

【在 r*g 的大作中提到】
: 莫生气
: ps:看你说话口气很牛
: 给推荐个工作吧lz这个我都会
: 本科通读过effective c++, c++ primer 4
: c的陷阱与缺陷
: c与指针
: c专家编程
: 会凸优化 机器学习理论 讲过泛函分析
: 会统计推断
: new grad master

t*********3
发帖数: 87
36
多谢评论,我确实在“学点基础知识”,没有“光闷头刷题”,所以我才来问问题。如
果我只想刷题,我就没必要来问了。你的态度虽傲慢但并不重要,因为我只是想问问题
而已。
我看有人说variable length array cannot be initialized by any form of
initialization syntax. 因为C11里面说The type of the entity to be initialized
shall be an array of unknown size or a complete object type that is not a
variable length array type.
总之他的意思就是说int a[n] = {0} 其中的 “={0}” 这种写法不能用到变长数组。
但是他这只是告诉我结论,我还是不明白问什么不能这么写。
你说变长数组不能“在compile time 初始化”。你的意思是“={0}” 其实就是在
compile time初始化吗?为什么run time不可以这么做呢?run time时已经知道了数组
的size,然后就把这里面都写成0就可以了啊。为什么run time就不行呢?是不是因为
“={0}”的意思就是“在compile time初始化”?如果是的话,那为什么不可以对于变
长数组就故意在run time初始化呢?不好意思说得这么啰嗦不知道我有没有说明白。

【在 c****g 的大作中提到】
: 你读懂了个P,run time allocate 的memory,你在compile time 初始化,还说读懂
: 了。compiler 又不知道你的size,怎么知道该给你整几个0 ?
: 不管你是不是暴力转行的,真要面C/C++,还是先系统学点基础知识,光闷头刷题也不
: 行。

c****g
发帖数: 3893
37
你是不是CS专业的呀?

initialized

【在 t*********3 的大作中提到】
: 多谢评论,我确实在“学点基础知识”,没有“光闷头刷题”,所以我才来问问题。如
: 果我只想刷题,我就没必要来问了。你的态度虽傲慢但并不重要,因为我只是想问问题
: 而已。
: 我看有人说variable length array cannot be initialized by any form of
: initialization syntax. 因为C11里面说The type of the entity to be initialized
: shall be an array of unknown size or a complete object type that is not a
: variable length array type.
: 总之他的意思就是说int a[n] = {0} 其中的 “={0}” 这种写法不能用到变长数组。
: 但是他这只是告诉我结论,我还是不明白问什么不能这么写。
: 你说变长数组不能“在compile time 初始化”。你的意思是“={0}” 其实就是在

n******n
发帖数: 12088
38
你为何要坚持用变长数组呢?用向量简单有效。

initialized

【在 t*********3 的大作中提到】
: 多谢评论,我确实在“学点基础知识”,没有“光闷头刷题”,所以我才来问问题。如
: 果我只想刷题,我就没必要来问了。你的态度虽傲慢但并不重要,因为我只是想问问题
: 而已。
: 我看有人说variable length array cannot be initialized by any form of
: initialization syntax. 因为C11里面说The type of the entity to be initialized
: shall be an array of unknown size or a complete object type that is not a
: variable length array type.
: 总之他的意思就是说int a[n] = {0} 其中的 “={0}” 这种写法不能用到变长数组。
: 但是他这只是告诉我结论,我还是不明白问什么不能这么写。
: 你说变长数组不能“在compile time 初始化”。你的意思是“={0}” 其实就是在

n******n
发帖数: 12088
39
显然不是。你何必问呢?

【在 c****g 的大作中提到】
: 你是不是CS专业的呀?
:
: initialized

b**********5
发帖数: 7881
40
什么是系统编程? 我美国正规学校出来的, 也没学过什么系统编程。。。

【在 c****g 的大作中提到】
: 你是不是CS专业的呀?
:
: initialized

相关主题
bloomberg 问题: C++ construct 时用 new 没"()"问一个C++ set和unordered_set iterator的问题
A problem about Heap and Stack.一个电面
问一个C的简单问题[板上牛人多]问个算法题
进入JobHunting版参与讨论
t*********3
发帖数: 87
41
我知道int a[n] = {0}无法在compile time初始化。但是为什么不能在run time初始化
呢?run time时已经知道n的值了。难道说“initialization”这个词就是指compile
time?
我又找了找,确实是C99不允许int a[n] = {0}当中的“={0}”。原因是standard
commettee认为如果是compile time无法初始化的东西,那就不能这么写。理论上确实
可以允许这么写,然后在run time初始化吧?但是他们就是不允许。

【在 c****g 的大作中提到】
: 你读懂了个P,run time allocate 的memory,你在compile time 初始化,还说读懂
: 了。compiler 又不知道你的size,怎么知道该给你整几个0 ?
: 不管你是不是暴力转行的,真要面C/C++,还是先系统学点基础知识,光闷头刷题也不
: 行。

c****g
发帖数: 3893
42
我服了你。

【在 t*********3 的大作中提到】
: 我知道int a[n] = {0}无法在compile time初始化。但是为什么不能在run time初始化
: 呢?run time时已经知道n的值了。难道说“initialization”这个词就是指compile
: time?
: 我又找了找,确实是C99不允许int a[n] = {0}当中的“={0}”。原因是standard
: commettee认为如果是compile time无法初始化的东西,那就不能这么写。理论上确实
: 可以允许这么写,然后在run time初始化吧?但是他们就是不允许。

l*********i
发帖数: 28
43
@cutegg
你能给一个详细的解释吗?
ttownal2013 也已经努力做了很多功课,也一直很谦虚呀.
o*******e
发帖数: 149
44
checkout this
http://stackoverflow.com/questions/1887097/variable-length-arra
有些人自已没有constructive suggestion的,是因为从来没有人能教育他做人的道理。

【在 l*********i 的大作中提到】
: @cutegg
: 你能给一个详细的解释吗?
: ttownal2013 也已经努力做了很多功课,也一直很谦虚呀.

n******n
发帖数: 12088
45
建议从教科书看起。显然他知识背景上缺口很多,这种问答方式用处不大。

【在 l*********i 的大作中提到】
: @cutegg
: 你能给一个详细的解释吗?
: ttownal2013 也已经努力做了很多功课,也一直很谦虚呀.

c****g
发帖数: 3893
46
大费劲了。我就是敲三千字,他都未必觉得详细。
要是一个老外,连你好吗,你妈好,妈你好都还
闹不明白,你非得跟他讲唐诗宋词,停车做爱枫林晚双月红于二月花啥的,
既是自虐也是折磨别人。
系统学习不能太浮躁。花点时间,找本书看,再带着问题来讨论,
大家都好受点。

【在 l*********i 的大作中提到】
: @cutegg
: 你能给一个详细的解释吗?
: ttownal2013 也已经努力做了很多功课,也一直很谦虚呀.

l*********8
发帖数: 4642
47
可以的。
你的local,global数组要用memset初始化为0.
试试行不行。

leetcode

【在 t*********3 的大作中提到】
: Leetcode的Best Time to Buy and Sell Stock IV 那道题,我看到网上的答案就改了
: 下来:
: 请注意看定义数组local和global的那两行。如果按照int a[n]的方式定义,leetcode
: 能编译但是输出错误。请问这是为什么?
: class Solution {
: public:
: int maxProfit(int k, vector& prices) {
: int days = prices.size();
: if(days == 0) return 0;
: if(k >= days/2) return maxProfitUnlimitedTimes(prices);

c****g
发帖数: 3893
48

这儿有一段讲得比较清楚的,要人家还是不明白,我
真没办法了。
http://www.geeksforgeeks.org/memory-layout-of-c-program/
简尔言之,dynamic (runtime) allocation 用的时heap
static (compile time) allocation 用的是 stack 和 data segment
其中data segment 是用来存static 和 global variable 的。
从语法来说,用叉叉alloc function 和 new 的,是
Runtime allocation, 其它(C99 的 a[n]除外) 是compile time allocation.

【在 l*********i 的大作中提到】
: @cutegg
: 你能给一个详细的解释吗?
: ttownal2013 也已经努力做了很多功课,也一直很谦虚呀.

1 (共1页)
进入JobHunting版参与讨论
相关主题
请教个C++编程思路A problem about Heap and Stack.
为什么C++的constructor出错可以抛出异常,而destructor出错问一个C的简单问题
C++ Q42: (C22)问一个C++ set和unordered_set iterator的问题
A malloc/free question using C/C++一个电面
为什么板上这么多人还是抱着C++不学Java呢?[板上牛人多]问个算法题
C++ template问道G题(2)
大牛推荐计算机面试的书吧关于leetcode上那个买卖股票II的问题
bloomberg 问题: C++ construct 时用 new 没"()"Best Time to Buy and Sell Stock II这么简单?
相关话题的讨论汇总
话题: int话题: prices话题: vector话题: days话题: global