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

力扣热题之技巧

最后一个单元了,冲呀

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.dtcms.com/a/346739.html

相关文章:

  • 云计算核心技术之云网络技术
  • Agentic AI 知识框架整理
  • 08.23总结
  • FFMPEG相关解密,打水印,合并,推流,
  • 基于Python对酷狗音乐排行榜数据分析可视化【源码+LW+部署】
  • 安卓开发实战:从零构建一个天气应用
  • 【Android】使用FragmentManager动态添加片段
  • C# 项目“交互式展厅管理客户端“针对的是“.NETFramework,Version=v4.8”,但此计算机上没有安装它。
  • week4-[字符数组]字符统计
  • STAR-CCM+|K-epsilon湍流模型溯源
  • c语言学习_数组使用_扫雷1
  • 【小沐学GIS】基于Godot绘制三维数字地球Earth(Godot)
  • HTTP的状态码有哪些,并用例子说明一下
  • 人工智能之数学基础:离散随机变量和连续随机变量
  • react中多个页面,数据相互依赖reducer解决方案
  • 变频器实习DAY35
  • 深入理解Java多线程:状态、安全、同步与通信
  • Day12 数据统计-Excel报表
  • 基于llama.cpp的量化版reranker模型调用示例
  • 目标跟踪 YOLO11 单目标跟踪
  • Uipath查找元素 查找子元素 获取属性活动组合使用示例
  • 【数据结构】线性表——链表
  • 基于springboot购物商城系统源码
  • 灵动AI:工业级商品图AI生成工具
  • 【剖析高并发秒杀】从流量削峰到数据一致性的架构演进与实践
  • GaussDB 数据库架构师修炼(十八) SQL引擎-解析器
  • 慢查询该怎么优化
  • 【文献阅读】Lossless data compression by large models
  • 【卷积神经网络详解与实例】2——卷积计算详解
  • Hive中的join优化