1. 交换一次的先前排列
    给你一个正整数的数组 A(其中的元素不一定完全不同),请你返回可在 一次交换(交换两数字 A[i] 和 A[j] 的位置)后得到的、按字典序排列小于 A 的最大可能排列。如果无法这么操作,就请返回原数组。

贪心算法,先从后往前找到第一个可以变的位置,然后在从该位置往后找到最大的值进行调整

class Solution {public:vector<int> prevPermOpt1(vector<int>& arr) {int n = arr.size(), idx = -1;for(int i=n-1; i>=1; i--){if(arr[i] < arr[i-1]){idx = i-1;break;}}if(idx == -1) return arr;int maxv = 0, t = arr[idx], pos = idx;for(int i = idx+1; i<n; i++){if(arr[i] < arr[idx]){if(arr[i] > maxv){maxv = arr[i];pos = i;}}}swap(arr[idx], arr[pos]);return arr;}
};
  1. 距离相等的条形码
    在一个仓库里,有一排条形码,其中第 i 个条形码为 barcodes[i]。请你重新排列这些条形码,使其中任意两个相邻的条形码不能相等。 你可以返回任何满足该要求的答案,此题保证存在答案。

哈希+堆

class Solution {public:vector<int> rearrangeBarcodes(vector<int>& barcodes) {unordered_map<int,int>num2cnt;int n=barcodes.size();for(int i=0;i<n;i++){num2cnt[barcodes[i]]++;}priority_queue<pair<int,int>>maxHeap;for(auto mPair:num2cnt)maxHeap.push({mPair.second,mPair.first});vector<int>ans;while(maxHeap.empty()==false){auto [firstCnt,firstNum]=maxHeap.top();maxHeap.pop();if(ans.empty()||ans.back()!=firstNum){ans.push_back(firstNum);firstCnt--;if(firstCnt==0)continue;maxHeap.push({firstCnt,firstNum});}else {auto [secondCnt,secondNum]=maxHeap.top();maxHeap.pop();maxHeap.push({firstCnt,firstNum});ans.push_back(secondNum);secondCnt--;if(secondCnt==0)continue;maxHeap.push({secondCnt,secondNum});}}return ans;}
};
  1. 字符串的最大公因子
    对于字符串 s 和 t,只有在 s = t + … + t(t 自身连接 1 次或多次)时,我们才认定 “t 能除尽 s”。
    给定两个字符串 str1 和 str2 。返回 最长字符串 x,要求满足 x 能除尽 str1 且 X 能除尽 str2 。

字符串两种顺序拼接后相等,则一定是可以找到公共子串,然后求其长度的公约数,即为最大字串。

class Solution {public:string gcdOfStrings(string str1, string str2) {if (str1 + str2 != str2 + str1) return "";return str1.substr(0, __gcd((int)str1.length(), (int)str2.length())); // __gcd() 为c++自带的求最大公约数的函数}
};
  1. 按列翻转得到最大值等行数
    给定 m x n 矩阵 matrix 。你可以从中选出任意数量的列并翻转其上的 每个 单元格。(即翻转后,单元格的值从 0 变成 1,或者从 1 变为 0 。)返回 经过一些翻转后,行与行之间所有值都相等的最大行数 。

1、每一行都是一个0-1串,计算各行的特征,特征可以用字符串形式表示
2、建立哈希表,key为特征值,value为特征是key的行的个数
3、最大的value即为所求

class Solution {public:int maxEqualRowsAfterFlips(vector<vector<int>>& matrix) {int m=matrix.size(), n=matrix[0].size();unordered_map<string, int> map; // 统计具有某特征的行的个数for(int i=0;i<m;++i){string feature; // 特征以字符串表示for(int j=0;j<n;++j)feature.push_back(matrix[i][j]);// 若当前行的首位为0,需要进行翻转if(feature[0]==0){for(int j=0;j<n;++j)feature[j]=1-feature[j];}++map[feature]; // 计数}int ans=0;for(auto p:map)ans=max(ans, p.second);// 取最大值return ans;}
};
  1. 负二进制数相加
    给出基数为 -2 的两个数 arr1 和 arr2,返回两数相加的结果。

class Solution {public:vector<int> addNegabinary(vector<int>& arr1, vector<int>& arr2) {int n1 = arr1.size();int n2 = arr2.size();int n = max(n1,n2)+4;vector<int> res(n, 0);// 和arr1和arr2 倒序的计算,低位在前面for (int i = n1-1; i >= 0; --i){res[n1-1-i] += arr1[i];}for (int i = n2-1; i >= 0; --i){res[n2-1-i] += arr2[i];}// 从低位开始计算for (int i = 0; i +2 < n; ++i){// 进位int carry = res[i] >> 1;res[i] &= 1;res[i+1] += carry;res[i+2] += carry;}// 观察最高位连续零需要移除int k = n-3;// 这里结束是0,来避免0,0->空的情况while (k > 0 && res[k] == 0){--k;}reverse(res.begin(), res.begin()+k+1);// 移除末尾的为0的部分int i = n-k-1;while(i > 0){--i;res.pop_back();}return res;}
};
  1. 元素和为目标值的子矩阵数量
    给出矩阵 matrix 和目标值 target,返回元素总和等于目标值的非空子矩阵的数量。

前缀和的二维应用

class Solution {private:int subarraySum(vector<int> &nums, int k) {unordered_map<int, int> mp;mp[0] = 1;int count = 0, pre = 0;for (auto &x:nums) {pre += x;if (mp.find(pre - k) != mp.end()) {count += mp[pre - k];}mp[pre]++;}return count;}public:int numSubmatrixSumTarget(vector<vector<int>> &matrix, int target) {int ans = 0;int m = matrix.size(), n = matrix[0].size();for (int i = 0; i < m; ++i) { // 枚举上边界vector<int> sum(n);for (int j = i; j < m; ++j) { // 枚举下边界for (int c = 0; c < n; ++c) {sum[c] += matrix[j][c]; // 更新每列的元素和}ans += subarraySum(sum, target);}}return ans;}
};
  1. Bigram 分词
    给出第一个词 first 和第二个词 second,考虑在某些文本 text 中可能以 “first second third” 形式出现的情况,其中 second 紧随 first 出现,third 紧随 second 出现。对于每种这样的情况,将第三个词 “third” 添加到答案中,并返回答案。

先按空格分组单词,然后遍历即可

class Solution {public:vector<string> findOcurrences(string text, string first, string second) {vector<string> words;int s = 0, e = 0, len = text.length();while (true) {while (s < len && text[s] == ' ') {s++;}if (s >= len) {break;}e = s + 1;while (e < len && text[e] != ' ') {e++;}words.push_back(text.substr(s, e - s));s = e + 1;}vector<string> ret;for (int i = 2; i < words.size(); i++) {if (words[i - 2] == first && words[i - 1] == second) {ret.push_back(words[i]);}}return ret;}
};

leetcode解题思路分析(一百二十八)1053 - 1078 题相关推荐

  1. 教你一百二十八个说话的技巧(气质很内涵)(有霸气不霸道)

    教你一百二十八个说话的技巧(气质很内涵)(有霸气不霸道) 1.说话不要有攻击性,不要有杀伤力,不夸已能,不扬人恶,自然能化敌为友.  2.一个常常看别人缺点的人,自己本身就不够好,因为他没有时间检讨他 ...

  2. leetcode解题思路分析(一百三十四)1131 - 1143 题

    1131.绝对值表达式的最大值 给你两个长度相等的整数数组,返回下面表达式的最大值: |arr1[i] - arr1[j]| + |arr2[i] - arr2[j]| + |i - j| 其中下标 ...

  3. leetcode解题思路分析(一百三十)1093 - 1096 题

    大样本统计 我们对 0 到 255 之间的整数进行采样,并将结果存储在数组 count 中:count[k] 就是整数 k 在样本中出现的次数. 计算以下统计数据: minimum :样本中的最小元素 ...

  4. leetcode解题思路分析(一百零二)874 - 880 题

    模拟行走机器人 机器人在一个无限大小的 XY 网格平面上行走,从点 (0, 0) 处开始出发,面向北方.该机器人可以接收以下三种类型的命令 commands : -2 :向左转 90 度 -1 :向右 ...

  5. leetcode解题思路分析(一百零七)909 - 915 题

    蛇梯棋 给你一个大小为 n x n 的整数矩阵 board ,方格按从 1 到 n2 编号,编号遵循 转行交替方式 ,从左下角开始 (即,从 board[n - 1][0] 开始)每一行交替方向.返回 ...

  6. Android开发笔记(一百二十八)手机制式适配

    查看运营商与网络类型 虽然现在4G网络很普及了,但是我国幅员辽阔,4G信号在某些地方接收不良,手机连接很容易掉到3G甚至2G网络.为了让用户在低速环境也能使用App的基础功能,而不至于还在老牛破车地缓 ...

  7. mediasoup 源码分析(二十八)rtx 重传包

    文章目录 rtx 协议格式 字段细节 上行rtx处理 下行rtx处理 rtx 主要用来进行封装重传包 rtx 协议格式 The format of a retransmission packet is ...

  8. 2021年安全生产工作总结及2022年思路计划(二十八篇)PPTX(附下载)

    摘要:2021年安全生产工作总结及2022年思路计划(二十八篇) 公众号:安全生产星球

  9. leetcode解题思路(无代码) 归类汇总版,面试笔试经典例题

    我将舍弃没有巧妙解法的简单题.部分题干.代码实现.非关键步骤,目的是做成一篇每次面试前都能过一遍的思路问答题. 在我仅有的面试经验中,面试官似乎会按知识点提问.因此我认为归类极其重要. 简单的题不一定 ...

  10. 深度学习之图像分类(二十八)-- Sparse-MLP(MoE)网络详解

    深度学习之图像分类(二十八)Sparse-MLP(MoE)网络详解 目录 深度学习之图像分类(二十八)Sparse-MLP(MoE)网络详解 1. 前言 2. Mixture of Experts 2 ...

最新文章

  1. 确定安全威胁与漏洞-A
  2. 腾讯发布95页重磅报告:全面预测中国互联网未来5年趋势
  3. 汇编--条件跳转指令
  4. 安装debian的zabbix-agent客户端
  5. 线程 sleep 取消_C/C++ 多线程机制
  6. java generic new_java中generic实例详解
  7. mysql循环map_java Map 遍历速度最优解
  8. LDAPimplementation
  9. 【报告分享】2020年抖音美妆直播报告.pdf(附下载链接)
  10. python%20是什么东西
  11. MySql 存储大量长字节 Text报错处理办法
  12. python 输出list到txt_python脚本生成caffe train_list.txt的方法
  13. 科技创新 可持续发展 论坛_可持续发展时间
  14. MySQL数据库学习资料(六)
  15. linux ubuntu安装svn,在Ubuntu下安装SVN工具RabbitVCS
  16. java orb 是什么_什么是ORB
  17. 教师对php作品评语通用,期末教师给学生的评语
  18. linux chmod 777 dev,ubuntu – 撤消chmod 777
  19. NASA研制3D食物打印机:原料或取自昆虫
  20. iPhone开发 - 3D - 建立3D界面(下)

热门文章

  1. python批量修改图片尺寸
  2. linux添加字体库
  3. msxml6_x64 下载
  4. 自制H5页面工具盘点 宣传/相册/邀请函
  5. 3次根号计算机在线应用,根号计算器,三次根号计算器
  6. 传智健康(黑马项目)
  7. redis实现队列的几种方式(LPUSH/BRPOP,发布/订阅模式,stream)
  8. html中复选框如何添加,Word 怎么添加复选框 怎么在word文档中插入复选框
  9. hairline!ios实现边框0.5px
  10. java微信公众号授权登录