intlargestSumAfterKNegations(vector<int>& nums,int k){int n = nums.size(), m =0, minElem = INT_MAX, ret =0;// 求负数个数 & 最小值for(constauto& x : nums){if(x <0){
m++;}
minElem =min(minElem,abs(x));}// 分类讨论if(m > k){sort(nums.begin(), nums.end());for(int i =0; i < k; i++){
ret +=-nums[i];}for(int i = k; i < n; i++){
ret += nums[i];}}else{// 把所有负数变成正数for(constauto& x : nums){
ret +=abs(x);}if((k - m)%2){
ret -=2* minElem;}}return ret;}
2.身高排序
1.题目链接
身高排序
2.算法原理详解
解法一:创建二元组
创建一个新的数组pair<int, string>
对新的数组排序
按照顺序把名字提取出来即可
解法二:利用哈希表存下映射关系
先用哈希表存下映射关系<身高,名字>
对身高数组排序
根据排序后的结果,在哈希表里面找名字即可
缺点:不可存重复的KEY值
解决方法:map<int, string[]>
可以,但仍略显复杂
解法三:对下标排序(很常用的方法)
创建一个下标数组
仅需对下标数组排序
根据下标数组排序后的结果,找到原数组的信息
3.代码实现
vector<string>sortPeople(vector<string>& names, vector<int>& heights){int n = names.size();
vector<int>index(n);// 下标数组for(int i =0; i < n; i++){
index[i]= i;}// 对下标进行排序sort(index.begin(), index.end(),[&](int i,int j){return heights[i]> heights[j];});// 从下标数组取结果
vector<string> ret;for(constauto& x : index){
ret.push_back(names[x]);}return ret;}
3.优势洗牌
1.题目链接
优势洗牌
2.算法思路详解
思路:
排序
nums1直接排序
nums2下标排序 —> 为了不影响原数组的相对顺序
如果比不过,就去拖累对面最强的一个
如果能比过,直接比即可
3.代码实现
vector<int>advantageCount(vector<int>& nums1, vector<int>& nums2){int n = nums1.size();
vector<int>index(n);for(int i =0; i < n; i++){
index[i]= i;}// 排序sort(nums1.begin(), nums1.end());sort(index.begin(), index.end(),[&](int i,int j){return nums2[i]< nums2[j];});// 田忌赛马
vector<int>ret(n);int left =0, right = n -1;for(constauto& x : nums1){if(nums2[index[left]]< x){
ret[index[left++]]= x;}else{
ret[index[right--]]= x;}}return ret;}
4.最长回文串
1.题目链接
最长回文串
2.代码实现
intlongestPalindrome(string s){int hash[128]={0};for(constauto& ch : s){
hash[ch]++;}int ret =0;for(constauto& x : hash){
ret += x /2*2;// 奇偶混合处理}return ret < s.size()? ret +1: ret;}
学习笔记: 【公开课】旷视x北大《深度学习实践》(28课时全) R Talk | 旷视科技目标检测概述:Beyond RetinaNet and Mask R-CNN 文章目录 Lecture 1: Introduction to Computer Vision and Deep Learning(孙剑&#x…