Problem: 1471. The k Strongest Values in an Array 数组中的 k 个最强值两种方案的方案1: 排序以后拿到中位数此时两侧最强双指针每次拿到最强的然后指针向中间靠拢方案2: 求出每个数字的abs(arr[i] - m)然后按照题意排序的拿到最前面的k的最强数字Codeusing pr pairint, int; class Solution { public: vectorint getStrongest(vectorint arr, int k) { sort(arr.begin(), arr.end()); int n arr.size(), a; if(n1) return arr; int m arr[(n-1)/2], l 0, r n - 1, ll, rr; vectorint ret; ll abs(arr[l] - m); rr abs(arr[r] - m); for(int i 0; i k; i) { if(ll rr) { if(arr[l] arr[r]) { ret.push_back(arr[l]); l; ll abs(arr[l] - m); } else { ret.push_back(arr[r]); r--; rr abs(arr[r] - m); } } else if(ll rr) { ret.push_back(arr[l]); l; ll abs(arr[l] - m); } else { ret.push_back(arr[r]); r--; rr abs(arr[r] - m); } } return ret; } };Codeclass Solution { public: vectorint getStrongest(vectorint arr, int k) { sort(arr.begin(), arr.end()); int n arr.size(), a; int m arr[(n-1)/2]; vectorpairint, int tr; for(int i : arr) tr.push_back({ i, abs(i - m) }); functionbool(pairint, int, pairint, int) func [](pairint, int a, pairint, int c) { if(a.second c.second) return a.first c.first; else return a.second c.second; }; sort(tr.begin(), tr.end(), func); vectorint ret; for(int i 0; i k; i) ret.push_back(tr[i].first); return ret; } };
leetcode 1471. The k Strongest Values in an Array 数组中的 k 个最强值
Problem: 1471. The k Strongest Values in an Array 数组中的 k 个最强值两种方案的方案1: 排序以后拿到中位数此时两侧最强双指针每次拿到最强的然后指针向中间靠拢方案2: 求出每个数字的abs(arr[i] - m)然后按照题意排序的拿到最前面的k的最强数字Codeusing pr pairint, int; class Solution { public: vectorint getStrongest(vectorint arr, int k) { sort(arr.begin(), arr.end()); int n arr.size(), a; if(n1) return arr; int m arr[(n-1)/2], l 0, r n - 1, ll, rr; vectorint ret; ll abs(arr[l] - m); rr abs(arr[r] - m); for(int i 0; i k; i) { if(ll rr) { if(arr[l] arr[r]) { ret.push_back(arr[l]); l; ll abs(arr[l] - m); } else { ret.push_back(arr[r]); r--; rr abs(arr[r] - m); } } else if(ll rr) { ret.push_back(arr[l]); l; ll abs(arr[l] - m); } else { ret.push_back(arr[r]); r--; rr abs(arr[r] - m); } } return ret; } };Codeclass Solution { public: vectorint getStrongest(vectorint arr, int k) { sort(arr.begin(), arr.end()); int n arr.size(), a; int m arr[(n-1)/2]; vectorpairint, int tr; for(int i : arr) tr.push_back({ i, abs(i - m) }); functionbool(pairint, int, pairint, int) func [](pairint, int a, pairint, int c) { if(a.second c.second) return a.first c.first; else return a.second c.second; }; sort(tr.begin(), tr.end(), func); vectorint ret; for(int i 0; i k; i) ret.push_back(tr[i].first); return ret; } };