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

力扣hot100刷题day1

1两数之和

方法一:暴力穷举

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

双层循环遍历数组,当两个元素之和等于target,直接放入结果数组中 On^2

    vector<int> twoSum(vector<int>& nums, int target) {vector<int>res;for(int i=0;i<nums.size()-1;i++){for(int j=i+1;j<nums.size();j++){if(nums[i]+nums[j]==target){res.push_back(i);res.push_back(j);return res;}}}return res;}

方法二:使用哈希表存储

哈希表结构 元素值--下标(方便根据元素值去寻找下标)

遍历数组,如果对于当前数组,其target-值存在哈希表中,那么就直接返回当前数据的下标以及在哈希表中另一半的下标。如果不在,就将这个值直接插入insert到哈希表中,方便后续检验。

    vector<int> twoSum(vector<int>& nums, int target) {vector<int>res;unordered_map<int,int>mm;for(int i=0;i<nums.size();i++){if(mm.count(target-nums[i])==0){mm.insert({nums[i],i});}else{res.push_back(i);res.push_back(mm[target-nums[i]]);return res;}}return res;}

一些哈希表常用操作

ordered_map<int,int>mm;

①插入元素

mm.insert({nums[i],i});

②查找某个元素在哈希表中是否存在

mm.count(target-nums[i])==0/!=0

49字母异位词分组

给定一系列字符串数组,如何从其中找到顺序不一样但含有元素以及每个元素个数一样的字符串组并输出呢?

遍历数组,对于当前字符串排序,以排序后的字符串作为键,原始的字符串加入到值中。重复这样的操作,之后,直接遍历哈希表,输出其中所有的value即可。

    vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string,vector<string>>mm;for(int i=0;i<strs.size();i++){string str=strs[i];// 就相当于sort(str.begin(), str.end()) 对字符串从头到我排序。ranges::sort(str);//将str原始元素排序,得到最终的mm[str].push_back(strs[i]);}//得到最终的键值对情况vector<vector<string>>res;for(auto& [_,value]:mm){res.push_back(value);}return res;}

128最长连续序列

给定一个数字数组,希望找到其中的最长数字连续序列

方法一(mine)

先对数组进行从小到大的排序,在遍历数组时,判断依据是比较相邻两个数据的插值是否等于1,等于等于1,序列数加一。

但是注意,可能会出现重复的数字,因此更全面的思考是如果差值等于0,接着遍历,不同之处在于序列数不变。(但时间复杂度不满足要求)

    int longestConsecutive(vector<int>& nums) {//将数组排序 排序后遍历得到最大的连续数字序列长度sort(nums.begin(),nums.end());int i=0;int max=0;if(nums.size()==0)return 0;if(nums.size()==1 )return 1;while(i<nums.size()-1){int count =1;while( i<nums.size()-1&& (nums[i]==nums[i+1]-1 || nums[i]==nums[i+1])){if(nums[i]==nums[i+1]-1)count++;i++;}max=(max>count)?max:count;i++;}return max;}

方法二:

    int longestConsecutive(vector<int>& nums) {unordered_set<int> us(nums.begin(),nums.end());int res=0;for(int x:us){if(us.contains(x-1)){continue;}int y=x+1;while(us.contains(y)){y++;}res=max(res,y-x);}return res;}

283 移动零

给定一个数组,如何将其中的0都移动到数组的后端而不影响其他数据的顺序

例如[1,2,0,3,0,12] [1,2,3,12,0,0] 但同时不能使用额外的空间进行

使用双指针

指针a b均是在数组的最初位置。比较(近似于a是慢指针,b是快指针)

如果a b均不为零 则两者都往后移动

如果a b均为零 则a不动 b向后移动

如果a为0 但b不为零 则b的值移动到a处,b处的值变成0 接着都往后移动

    void moveZeroes(vector<int>& nums) {//双指针int i=0;int j=0;while(i!=nums.size()){if (nums[j]!=0&& nums[i]!=0){i++;j++;}else if(nums[j]==0 && nums[i]==0){i++;}else if (nums[j]==0 && nums[i]!=0){nums[j]=nums[i];nums[i]=0;i++;j++;}}}

是否会出现a不为0但b为0的情况呢?不会因为首先慢指针一定在快指针后方,另外,慢指针后面要么是快指针,要么就是0,就不会出现这样的情况。


文章转载自:

http://muj3bHpG.zbnkt.cn
http://e4g2qql2.zbnkt.cn
http://FRTHh5F1.zbnkt.cn
http://RjszZGa6.zbnkt.cn
http://6WAnqj7i.zbnkt.cn
http://5DesMlc9.zbnkt.cn
http://xxm8taxs.zbnkt.cn
http://JVhhZH7V.zbnkt.cn
http://XzO5Yjpf.zbnkt.cn
http://K1qzFuKq.zbnkt.cn
http://wyW1IRsj.zbnkt.cn
http://rRJtbhGn.zbnkt.cn
http://onQwWbW2.zbnkt.cn
http://h3BWUXCP.zbnkt.cn
http://Lg8Xo7zP.zbnkt.cn
http://2Ljm4eaR.zbnkt.cn
http://Bb16iRPk.zbnkt.cn
http://hDq9Bcyr.zbnkt.cn
http://iCS5MOjk.zbnkt.cn
http://IaFMGsgj.zbnkt.cn
http://wTfvY7aS.zbnkt.cn
http://O3fbGxB0.zbnkt.cn
http://SrVs0seL.zbnkt.cn
http://fHmlGPu9.zbnkt.cn
http://9uuNU62f.zbnkt.cn
http://ETgQHeNC.zbnkt.cn
http://17B4tbnj.zbnkt.cn
http://cNkV1onf.zbnkt.cn
http://y0cG9SRm.zbnkt.cn
http://aItPNJtN.zbnkt.cn
http://www.dtcms.com/a/388532.html

相关文章:

  • 什么是跨站脚本攻击
  • 团队对 DevOps 理解不统一会带来哪些问题
  • I²C 总线通信原理与时序
  • C#关键字record介绍
  • 试验台铁地板的设计与应用
  • 原子操作:多线程编程
  • 项目:寻虫记日志系统(三)
  • 在Arduino上模拟和电子I/O工作
  • Windows 命令行:相对路径
  • 线程、进程、协程
  • Java/注解Annotation/反射/元数据
  • C++学习:哈希表的底层思路及其实现
  • 机器学习python库-Gradio
  • 创作一个简单的编程语言,首先生成custom_arc_lexer.g4文件
  • 湖北燃气瓶装送气工证考哪些科目?
  • MySQL死锁回滚导致数据丢失,如何用备份完美恢复?
  • Zustand入门及使用教程(二--更新状态)
  • Matplotlib统计图:绘制精美的直方图、条形图与箱线图
  • 在el-table-column上过滤数据,进行格式化处理
  • 记一次golang结合前端的axios、uniapp进行预签名分片上传遇到403签名错误踩坑
  • 十一章 无界面压测
  • 多色印刷机的高精度同步控制:EtherCAT与EtherNet/IP的集成应用
  • 【随笔】【蓝屏】DMA错误
  • Coze源码分析-资源库-创建工作流-后端源码-IDL/API/应用/领域层
  • 5 分钟将网站打包成 APP:高效实现方案
  • 物联网智能网关核心功能实现:解析西门子1500 PLC的MQTT通信配置全流程
  • 新国标电动自行车实施,BMS 静电浪涌风险与对策
  • 【Python】Python文件操作
  • C#如何使用ApiPost接口,将数据显示在unity面板
  • 零基础从头教学Linux(Day 36)