誰能解釋一下如何處理運行時錯誤?
第 1034 行:字符 34:運行時錯誤:將無符號偏移添加到 0x607000000020 溢位到 0x607000000018 (stl_vector.h) 總結:UndefinedBehaviorSanitizer:undefined-behavior /usr/bin/../lib/gcc/x86-gnu/64 ../../../../include/c /9/bits/stl_vector.h:1043:34
代碼小提琴
class Solution {
public:
static bool cmp(pair<int,int> a, pair<int,int> b){
if(a.first<b.first) return true;
if(a.first==b.first && a.second>b.second) return true;
return false;
}
vector<int> frequencySort(vector<int>& nums) {
int n = nums.size();
vector<int> res;
vector<pair<int,int>> v(n);
for(int i = 0;i<n;i ){
v[nums[i]].first ;
v[nums[i]].second = nums[i];
}
sort(v.begin(),v.end(),cmp);
for(int i =0;i<n;i ){
for(int j =0;j<v[i].first;j ){
res.push_back(v[i].second);
}
}
return res;
}
};
uj5u.com熱心網友回復:
有2個問題:
nums[i]介于-100和之間100。向量v無法處理這種情況。這可以通過偏移量為 100 輕松修復。vector<pair<int,int>> v(n);. 請記住,這是一個頻率向量。例如,它無法處理大小寫,n = 5但num[i]可以達到50或100。這也可以通過不同的常量調整大小來解決。
新代碼:
static bool cmp(pair<int,int> a, pair<int,int> b){
if(a.first<b.first) return true;
if(a.first==b.first && a.second>b.second) return true;
return false;
}
const int offset = 100;
const int sz = 201; //because with an offset of 100, nums[i] could reach max 100 100=200
vector<int> frequencySort(vector<int>& nums)
{
int n = nums.size();
vector<int> res;
vector<pair<int,int>> v(sz);
for(int i = 0;i<n;i ){
v[nums[i] offset].first ;
v[nums[i] offset].second = nums[i] offset;
}
sort(v.begin(),v.end(),cmp);
for(int i =0;i<sz;i ){
for(int j =0;j<v[i].first;j ){
res.push_back(v[i].second-offset);
}
}
return res;
}
PS:在做編程題的時候,應該檢查一下約束:
1 <= nums.length <= 100
-100 <= nums[i] <= 100
和測驗用例。在這個問題中,案例:
Input: nums = [-1,1,-6,4,5,-6,1,4,1]
Output: [5,-1,4,4,-6,-6,1,1,1]
Leetcode 提供的可以幫助您更快地除錯。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/331757.html
上一篇:如何找到“弱”記憶體泄漏
