采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
波波老师好! 我觉得在2-7节中添加元素时需要对data.length为0的情况加判断并单独处理(我觉得直接capacity++就行了),而不是直接扩容resize(2 * data.length);,因为此时扩容data.length还是0。而且这样的话就不用在删除元素时判断data.length / 2 !=0了,允许数组容量为0的情况产生。 下面是我用C++的测试,针对2-7课程老师Java的写法应该也有这种情况,所以有这个疑问
你的实现应该是有问题的。
只要初始化数组的capacity不为零,通过扩容和缩容,capacity不可能为零。
因为在resize中,扩容容量是2*capacity,只要capacity是正数,扩容的容量一定是一个更大的正数;
而对于缩容,缩容的容量是当前的capacity / 2。我们有判断:
if(size == data.length / 4 && data.length / 2 != 0) 所以松茸的容量也不可能是0。
我使用课程的官方代码对你的测试用例进行了测试,没有问题。
在你的环境下使用官方代码进行测试,看看是不是有同样的问题?如果没有问题,请仔细调试比对自己的代码,看哪里有问题。进步就发生在这个过程哦:)
课程课程官方代码传送门:https://github.com/liuyubobobo/Play-with-Data-Structures
本小节课程官方代码传送门:https://github.com/liuyubobobo/Play-with-Data-Structures/tree/master/02-Arrays/09-Amortized-Time-Complexity/src
加油!:)
感谢波波老师! 我一开始的表述可能有些问题,就是我的测试用例不是针对本小节的,正如老师所说,因为有if(size == data.length / 4 && data.length / 2 != 0) 的判断,缩容时容量不会为0。 我是对课程2-7的代码https://github.com/liuyubobobo/Play-with-Data-Structures/tree/master/02-Arrays/07-Dynamic-Array/src 进行的测试,在2-7代码(103行)remove方法中其实是只有if(size == data.length / 2),所以会出现缩容时容量为0的情况。 然后我安装了java环境,对2-7测试了一下,发现数组越界了,下面的回复我给下图。
非常感谢!
感谢波波老师! 我一开始的表述可能有些问题,就是我的测试用例不是针对本小节的,正如老师所说,因为有if(size == data.length / 4 && data.length / 2 != 0) 的判断,缩容时容量不会为0。
我是对课程2-7的代码:https://github.com/liuyubobobo/Play-with-Data-Structures/tree/master/02-Arrays/07-Dynamic-Array/src进行的测试,在2-7代码(103行)remove方法中其实是只有if(size == data.length / 2),所以会出现缩容时容量为0的情况。 然后我安装了java环境,对2-7测试了一下,发现数组越界了,下面的回复我给下图。
第一次addFirst和第一次removeFirst之后会导致size和capacity都为0。第二次addFirst会导致数组越界。
感谢提醒,由于我是在这一小节的讲解中添加的这个条件,所以就不该7小节的代码了。课程代码和视频内容严格一一对应:)
一时激动了!再次感谢波波老师~
看得出你的基础很好:)加油!:)
登录后可查看更多问答,登录/注册
动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…
10.4k 16
1.4k 17
1.4k 14
1.3k 14