Java 提交解决方案和运行代码对LeetCode的不同结果
我正在研究LeetCode问题。但在运行代码和提交解决方案之间,我得到了两个不同的结果。我的C++代码是< /p>Java 提交解决方案和运行代码对LeetCode的不同结果,java,c++,Java,C++,我正在研究LeetCode问题。但在运行代码和提交解决方案之间,我得到了两个不同的结果。我的C++代码是< /p> class Solution { public: int lengthOfLongestSubstring(string s) { int* a = new int[257]; int ans = 0; int n = s.size(); for (int j = 0, i = 0; j < n; j++
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int* a = new int[257];
int ans = 0;
int n = s.size();
for (int j = 0, i = 0; j < n; j++) {
i = i > a[s[j]] ? i : a[s[j]];
ans = ans > j - i +1 ? ans : j - i + 1;
a[s[j]] = j + 1;
}
return ans;
}
};
类解决方案{
公众:
int lengthOfLongestSubstring(字符串s){
int*a=新的int[257];
int ans=0;
int n=s.size();
对于(int j=0,i=0;ja[s[j]]?i:a[s[j]];
ans=ans>j-i+1?ans:j-i+1;
a[s[j]=j+1;
}
返回ans;
}
};
两个输出是
我不知道我的代码出了什么问题。此外,我的C++代码是通过学习他的网站java回答< /p>编写的。
public class Solution {
public int lengthOfLongestSubstring(String s) {
int n = s.length(), ans = 0;
int[] index = new int[128]; // current index of character
// try to extend the range [i, j]
for (int j = 0, i = 0; j < n; j++) {
i = Math.max(index[s.charAt(j)], i);
ans = Math.max(ans, j - i + 1);
index[s.charAt(j)] = j + 1;
}
return ans;
}
}
公共类解决方案{
public int lengthOfLongestSubstring(字符串s){
int n=s.length(),ans=0;
int[]index=new int[128];//字符的当前索引
//尝试扩大范围[i,j]
对于(int j=0,i=0;j
或者最好是向量
vector<int> a(257,0);
向量a(257,0);
> p>不像java,C++没有为你零堆内存。
int* a = new int[257];
数组a
中的数据是什么
在Java中,a[0],a[1]。。。[256]
都等于零。但是在C++中,<代码> a〔0〕,a〔1〕,…[256]
包含来自该内存地址以前的任何数据的随机垃圾
您必须先将内存归零:
std::fill_n(a, 257, 0);
或者,如果您更喜欢memset
:
std::memset(a, 0, sizeof(int) * 257);
编辑:正如@It'scominghome所指出的,值初始化(C++11)也是可能的:
int* a = new int[257](); // will zero the array
与java不同,C++不为你零堆内存。<代码>返回ANS + 1;<代码>看看你是否能欺骗它;)它不是未定义的行为,它只包含先前存在的内容。@Bernard读取未初始化内存是非常未定义的行为。@It's'sminghome After
int*a=new int[257]代码>,a[0]。。。。[256]
是有效的可访问内存,但它们可能包含int
可以保存的任何值。访问a[s[j]]
是安全的,只是一个不确定的整数值(这可能有助于优化某些算法)。@Bernard Undefined行为不仅仅是关于安全访问。@Bernard引用ISO C++14标准声明i=i>a[s[j]?i:a[s[j]
ub在这个wiki页面的顶部,还有int*a=newint[257]()代码>
std::memset(a, 0, sizeof(int) * 257);
int* a = new int[257](); // will zero the array