当前位置: 首页 > backend >正文

力扣热题之技巧

最后一个单元了,冲呀

1.只出现一次的数字

(1)这是我的,用集合做了一下

class Solution {
public:int singleNumber(vector<int>& nums) {unordered_set<int> set;for(int num:nums){if(set.find(num)==set.end()) set.insert(num);else set.erase(num);}int ans;for (int num : set) {ans=num;}return ans;}
};

(2)还有邪修?

用异或 太狠了。。

class Solution {
public:int singleNumber(vector<int>& nums) {int ret=0;for(int e:nums){ret^=e;}return ret;}
};

2.多数元素

(1)unordered_map<int,int> 统计频率

class Solution {
public:int majorityElement(vector<int>& nums) {unordered_map<int,int> umap;for(int num:nums) umap[num]++;int target=nums.size()/2;for(auto& p:umap){if(p.second>target) return p.first;}return 0;}
};

(2)优化

优化就是随时判断,别最后加完了再判断

class Solution {
public:int majorityElement(vector<int>& nums) {unordered_map<int,int> mp;for(int i=0; i< nums.size();i++){mp[nums[i]]++;if(mp[nums[i]]>nums.size()/2){return nums[i];}}return 0;}
};

3.颜色分类

荷兰国旗问题,背过!!!

class Solution {
public:void swap(vector<int>& nums,int i,int j){int temp=nums[i];nums[i]=nums[j];nums[j]=temp;return;}void sortColors(vector<int>& nums) {int low=0;int mid=0;int high=nums.size()-1;while(mid<=high){if(nums[mid]==0){swap(nums,mid,low);low++;mid++;}else if(nums[mid]==1) mid++;else {swap(nums,mid,high);high--;//不要mid++,因为可能把0换过来了}}}
};

4.下一个排列

记住这个算法步骤,然后理解一下,最后的反转其实是一个sort,升序的sort

class Solution {
public:void nextPermutation(vector<int>& nums) {int n = nums.size();if (n <= 1) return;// 步骤1:从后向前找到第一个升序的位置int i = n - 2;while (i >= 0 && nums[i] >= nums[i + 1]) {i--;}// 如果找到这样的位置if (i >= 0) {// 步骤2:从后向前找到第一个比nums[i]大的数int j = n - 1;while (j >= 0 && nums[j] <= nums[i]) {j--;}// 步骤3:交换nums[i]和nums[j]swap(nums[i], nums[j]);}// 步骤4:反转i+1到末尾的部分reverse(nums.begin() + i + 1, nums.end());}
};

5.寻找重复数

(1)set。。。

(2)快慢指针

这个相当于环形链表2,就是判断有没有环,同时找到环的起点

必须背过,还有这个i--->nums[i]的算法,也极其精妙,服了这些天赋怪,咋想出来的。

class Solution {
public:int findDuplicate(vector<int>& nums) {int slow=0,fast=0;do{slow=nums[slow];fast=nums[nums[fast]];}while(slow!=fast);slow=0;while(slow!=fast){slow=nums[slow];fast=nums[fast];}return slow;}
};

注意s是类似指针,s=nums[s] 类似  s=s->next,你和下面一类别就行,要返回s,不要返回nums[s]

上面的是之前写的环形链表2的代码,都搞忘记了,必须复习了。

http://www.xdnf.cn/news/18534.html

相关文章:

  • 雷卯针对香橙派Orange Pi 3G-IoT-B开发板防雷防静电方案
  • 云原生、容器及数据中心网络相关名词记录
  • 无人机光伏巡检误检率↓79%!陌讯多模态融合算法在组件缺陷检测的落地优化
  • 为什么存入数据库的中文会变成乱码
  • 浙江龙庭翔新型建筑材料有限公司全屋定制:畅享品质生活新境界!
  • 【小沐学GIS】基于C++绘制三维数字地球Earth(osgEarth、三维瓦片地球)第十期
  • 如何使用和优化SQL Server存储过程:全面指南
  • PETR/PETRv2
  • 从 M4S 到 MP4:用 FFmpeg 轻松合并音视频文件
  • C++矩阵类设计与实现:高效、健壮的线性代数工具
  • 2025年音乐创作大模型有哪些?国内国外模型汇总以及优点分析
  • 5G物联网的现实与未来:CTO视角下的成本、风险与破局点
  • Stm32通过ESP8266 WiFi连接阿里云平台
  • Spring Boot 校验分组(Validation Groups)高级用法全指南
  • 从0到1:数据库进阶之路,解锁SQL与架构的奥秘
  • 32位内部数据通路是什么?
  • 基于llama.cpp的量化版reranker模型调用示例
  • 【golang】制作linux环境+golang的Dockerfile | 如何下载golang镜像源
  • 避开MES实施的“坑”:详解需求、开发、上线决胜点
  • openharmony之启动恢复子系统详解
  • Doxygen是什么?
  • Neural Network with Softmax output|神经网络的Softmax输出
  • 深入剖析Spring Boot应用启动全流程
  • 第七章 利用Direct3D绘制几何体
  • flink常见问题之非法配置异常
  • Hive Metastore和Hiveserver2启停脚本
  • jetson ubuntu 打不开 firefox和chromium浏览器
  • Python 实战:内网渗透中的信息收集自动化脚本(2)
  • 嵌入式LINUX——————网络TCP
  • Mysql InnoDB 底层架构设计、功能、原理、源码系列合集【六、架构全景图与最佳实践】