Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List python声明大型二维数组的方式是否比c++;?_List_Runtime - Fatal编程技术网

List python声明大型二维数组的方式是否比c++;?

List python声明大型二维数组的方式是否比c++;?,list,runtime,List,Runtime,最初的leetcode问题是: 最长回文子串 给定一个字符串S,查找S中最长的回文子串。您可以假设S的最大长度为1000,并且存在一个唯一的最长回文子串 我用python编程,使用2d DP方式,总是超过时间限制。虽然用Cpp实现了相同的想法,但很容易就通过了 我花了几个小时在这上面,python中的响应部分是什么 与Cpp相比,成本较高 我搜索了一下,确信reversed()是安全的,它不会复制。我正在考虑这是否是由python声明dp矩阵的方式引起的? 任何人都能看出python版本中的错误

最初的leetcode问题是: 最长回文子串

给定一个字符串S,查找S中最长的回文子串。您可以假设S的最大长度为1000,并且存在一个唯一的最长回文子串

我用python编程,使用2d DP方式,总是超过时间限制。虽然用Cpp实现了相同的想法,但很容易就通过了

我花了几个小时在这上面,python中的响应部分是什么 与Cpp相比,成本较高

我搜索了一下,确信reversed()是安全的,它不会复制。我正在考虑这是否是由python声明dp矩阵的方式引起的?

任何人都能看出python版本中的错误

蟒蛇

class Solution:
# @param s, a string
# @return a string
def longestPalindrome(self, s):
    st = 0
    maxl = 0
    dp = [[False]*1000 for i in xrange(1000)]
    for i in reversed(xrange(len(s))):
        for j in xrange(i,len(s)):
            if s[i] == s[j] and (i+1>j-1 or dp[i+1][j-1] ):
                dp[i][j] = True
                if j-i+1 > maxl:
                    st = i
                    maxl = j-i+1

    return s[st:st+maxl]
C++

类解决方案{
公众:
字符串最长回文(字符串s){
int start=0,maxLen=1,n=s.size();
bool isPal[1000][1000]={false};
对于(int i=n-1;i>=0;i--){
对于(int j=i;jj-1 | isPal[i+1][j-1])和&s[i]==s[j]){
isPal[i][j]=真;
如果(j-i+1>maxLen){
maxLen=j-i+1;
开始=i;
}
}
}
}
返回s.substr(开始,最大值);
}};
来自scipy邮件列表

“比较操作对于一般Python对象来说可能非常昂贵,而对于数值数组来说,比较操作相对来说非常便宜”

如果您想要更好的性能,请使用专用的数字库,如/

如果您想要一个关于Python性能的更深入的答案,而不是一种编译语言,那么您可能需要一个关于Python内部或其解释器的单独问题

顺便说一句,你不需要在你的文件中的def函数之前缩进吗

这回答了完整代码的性能问题。如果您想确切地了解Python中内存分配的性能,那么只测试代码中的专用部分,并编写它是否工作


另一种提高性能的方法是使用Cython。是对Python开销与C相比的详细描述。

感谢您的回答。基本上我的问题应该是:下面的代码行:“Pd= [[Falc] 1000,i在xLead(1000)]中,Python是一个昂贵的方式来定义一个2维列表,与C++或java中的2维数组声明相比较。因为我看到很多人在抄袭there@shiyuDong-我想你保留名单的权利。主要缺点是在您的周期内(应该使用其他方法解决,而不是直接使用语言的方法)。对不起,如果我的回答不够直截了当。另外,是的,Python中的几乎所有东西都比C++更昂贵,因为它们是非常不同的语言W.R.T性能。
class Solution {
public:
string longestPalindrome(string s) {
    int start = 0, maxLen = 1, n = s.size();
    bool isPal[1000][1000] = {false};
    for(int i=n-1; i>=0; i--) {
        for(int j=i; j<n; j++) {
            if((i+1>j-1 || isPal[i+1][j-1]) && s[i]==s[j]) {
                isPal[i][j] = true;
                if(j-i+1>maxLen) {
                    maxLen = j-i+1;
                    start = i;
                }
            }
        }
    }
    return s.substr(start,maxLen);
}};