目录
一般我在刷leetcode题的时候既不喜欢在Playground也不喜欢在本地编译器里面打代码,而是直接在题目后的窗口里写代码。
于是对于我这种氪不起金的玩家来说,经常就会出现奇怪的bug,找了半天也找不到。
这里就对以前遇到过的问题进行总结。

我找了老半天问题在哪里。发现不管在for循环后面加什么语句都会出错。 最后放到visual studio里面才发现了错误。。。


错误原因:c++注释行尾的反斜杠会将下一行也注释掉(即连接本行与下一行)!
解决办法:避免注释行末尾出现\(除非故意的)
总结:不得不承认有时不屑一顾的小基础能够在偶然的时候把自己死死卡住。但是这个问题如果在我的本地编译器里面写代码的话是很容易看出来的(因为字体变绿了)。
不过在leetcode这里面却没有任何显示!

。。。。。。

错误代码是:
Line 1584: rapidjson::SizeType rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator>>::Size() const [Encoding = rapidjson::UTF8<char>, Allocator = rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator>]: Assertion `IsArray()' failed. (document.h)
错误原因:测试用例里面输入的不对!!!(因为当前的测试用例是我自己输入进去的)
解决办法:执行测试用例

总结:
所以说输入测试用例的时候要小心点。。。。
这种错误位置行数很大的错误一般不是简单的语法错误之类的,这时候思维就要扩展一下,想想别的地方有没有问题。
我找这个错误的原因找得都快把错误码背下来了。。。

代码:
class UnionFind{
private:
vector<int> height;
vector<int> parent;
vector<int> count;
int N;
public:
UnionFind(int n){
for(int i =0;i<n;++i){
parent.push_back(i);
height.push_back(1);
}
count.resize(n,1);
N = n;
}
int Find(int a){//路径合并
int pa = parent[a];
if(pa==a) return pa;
while(pa!=parent[pa]){
pa = parent[pa];
}
if(pa!=parent[a])
parent[a]=pa;
return pa;
}
int Union(int a,int b){ //这里有返回值是对并查集模板的修改以适应要求
int pa = Find(a);
int pb = Find(b);
if(pa!=pb){
if(height[pa]>height[pb]){ //按秩合并
parent[pb]=pa;
count[pa]+=count[pb];
}else if(height[pa]<height[pb]){
parent[pa]=pb;
count[pb]+=count[pa];
}else{
parent[pa]=pb;
height[pb]++;
count[pb]+=count[pa];
}
return 1;
}
return 0;
}
};
struct Edge{
int from,to,weight;
Edge(int form,int to ,int weight):from(from),to(to),weight(weight){}
};
class Solution {
public:
int minCostConnectPoints(vector<vector<int>>& points) {
vector<Edge> edges;
int N = points.size();
UnionFind uf(points.size());
for(int i =0;i<points.size();++i){
for(int j =i+1;j<points.size();++j){
int dist = abs(points[i][0]-points[j][0])+abs(points[i][1]-points[j][1]);
edges.emplace_back(dist,i,j);
edges.emplace_back(dist,j,i);
}
}
sort(edges.begin(),edges.end(),[&](Edge a,Edge b){
return a.weight<b.weight;
});
int len=0,n=1;
for(auto& e:edges){
if(uf.Union(e.from,e.to)){
len += e.weight;
n++;
if(n==N) return len;
}
cout<<e.weight<<endl;
}
return 0;
}
};
然后报错:

错误原因:
我在程序里面加入cout语句,发现是可以输出部分的,说明程序在编译阶段没有出问题。
然后我把代码移植到visual studio里面执行,报错说是vector的数组下标越界了,于是我仔细看了几遍程序终于找到了问题所在:

这个地方的 参数顺序放错了 应该是i,j,dist;错误的参数导致这个并查集类里面操作的时候使vector的下标越界。
(呵呵,后来改完后发现还是这个错误,我找了老半天发现我struct Edge里面的参数from写成了form···················································)
解决办法:
找到使数组越界的原因并修改代码。


代码:
class Solution {
public:
vector<int> addToArrayForm(vector<int>& A, int K) {
vector<int>B;
do{
B.insert(B.begin(),K%10);
K = K/10;
}while(K); //之所以用do while是为了考虑到K==0的情况
int i =1;
vector<int>res;
int temp = 0;
while((A.size()-i>=0)&&(B.size()-i>=0)){
temp+=A[A.size()-i]+B[B.size()-i];
res.insert(res.begin(),temp%10);
temp/=10;
i++;
}
while(A.size()>=i){
temp+=A[A.size()-i];
res.insert(res.begin(),temp%10);
temp/=10;
i++;
}
while(B.size()>=i){
temp+=B[B.size()-i];
res.insert(res.begin(),temp%10);
temp/=10;
i++;
}
if(temp)
res.insert(res.begin(),temp);
return res;
}
};
错误原因:
经过我无数次的调试终于找到了问题所在:

当B.size()=2,i=3的时候 B.size()-i是一个非常大而奇怪的数字,不是负数。
出现这种情况的原因是因为vector.size()是一个无符号整型。。。。
解决办法:

这样写即可。
总结:
学一门编程语言的时候要打实了基础!
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c
我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file
我克隆了一个rails仓库,我现在正尝试捆绑安装背景:OSXElCapitanruby2.2.3p173(2015-08-18修订版51636)[x86_64-darwin15]rails-v在您的Gemfile中列出的或native可用的任何gem源中找不到gem'pg(>=0)ruby'。运行bundleinstall以安装缺少的gem。bundleinstallFetchinggemmetadatafromhttps://rubygems.org/............Fetchingversionmetadatafromhttps://rubygems.org/...Fe
在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee
我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie
我有两个Rails模型,即Invoice和Invoice_details。一个Invoice_details属于Invoice,一个Invoice有多个Invoice_details。我无法使用accepts_nested_attributes_forinInvoice通过Invoice模型保存Invoice_details。我收到以下错误:(0.2ms)BEGIN(0.2ms)ROLLBACKCompleted422UnprocessableEntityin25ms(ActiveRecord:4.0ms)ActiveRecord::RecordInvalid(Validationfa
这个问题在这里已经有了答案:Arraysmisbehaving(1个回答)关闭6年前。是否应该这样,即我误解了,还是错误?a=Array.new(3,Array.new(3))a[1].fill('g')=>[["g","g","g"],["g","g","g"],["g","g","g"]]它不应该导致:=>[[nil,nil,nil],["g","g","g"],[nil,nil,nil]]
尝试在我的RoR应用程序中实现计数器缓存列时出现错误Unknownkey(s):counter_cache。我在这个问题中实现了模型关联:Modelassociationquestion这是我的迁移:classAddVideoVotesCountToVideos0Video.reset_column_informationVideo.find(:all).eachdo|p|p.update_attributes:videos_votes_count,p.video_votes.lengthendenddefself.downremove_column:videos,:video_vot