【发布时间】:2020-11-07 00:16:09
【问题描述】:
谁能帮我修复从 C++ 到 Python 的重写代码: 初始代码是这样的:
vector<int> b = a;
unordered_map<int,int> m;
sort(a.begin(),a.end());
for(int i = 0; i < a.size(); i++){
m[a[i]] = i + 1;
}
vector<int> ans;
for(int i = 0; i < b.size(); i++){
ans.push_back(m[b[i]]);
}
return ans;
}
例如:
Input: [100, 5, 70, 2]
Output: [4, 2, 3, 1]
我的 Python 版本在这里,但答案不正确:
def compress(arr):
b = []
b = arr
m = {}
for i in range(len(arr)):
m[arr[i]] = i + 1
ans = []
for i in range(len(b)):
ans.append(m[b[i]])
return ans
我的输出:
Input: [100, 5, 70, 2]
Output: [1, 2, 3, 4]
请帮我看看哪里出错了?
【问题讨论】:
-
我的建议是根本不要尝试“翻译”代码,而是从与语言无关的算法描述开始尝试以您选择的语言从头开始实现它。
-
我什至无法猜测代码应该做什么。请首先清楚地解释这一点。
-
这段代码只是给出了列表中唯一元素的最新索引
-
当然,我们的想法是压缩给定的唯一元素数组并返回元素的索引,方法是保持元素的顺序,如示例中所示。