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

数据结构与算法学习日志7

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
    • 力扣69:x的平方根
    • 力扣34:在排序数组中查找元素的第一个和最后一个位置
    • 哈希表:
      • 哈希表使用:
      • 常见哈希表:
        • ● 数组
        • ● set (集合)包含在<set>头文件中
        • ● map(映射)
    • 算法一本通1117:使用数组
    • 算法一本通1117:使用set
    • 算法一本通1117:使用map
    • 力扣242:有效的字母异位词
    • 力扣349:两个数组的交集
    • 力扣202:快乐数
  • 总结

前言

提示:这里可以添加本文要记录的大概内容:
各位晚上好啊,笔者今天真是不知道写什么了,最近没有学太多的知识点,.主要还是在刷题,所以今天干脆就把我一天学到的内容以及做的题全部分享给大家,希望能带给大家一点收获


提示:以下是本篇文章正文内容,下面案例可供参考

力扣69:x的平方根

classSolution{public:intmySqrt(intx){intl=0;intr=x;intmid=0;while(l<=r){mid=(r-l)/2+l;if((longlong)mid*mid==x)returnmid;elseif((longlong)mid*mid<x)l=mid+1;elser=mid-1;}returnr;}};

力扣34:在排序数组中查找元素的第一个和最后一个位置

classSolution{public://找左边第一个比目标值小的元素(找左边界)intsearchLeft(vector<int>&nums,inttarget){intl=0;intr=nums.size()-1;intmid=0;while(l<=r){mid=(r-l)/2+l;if(nums[mid]<target)l=mid+1;elser=mid-1;}returnl;}//找右边第一个比目标值大的元素(找右边界)intsearchRight(vector<int>&nums,inttarget){intl=0;intr=nums.size()-1;intmid=0;while(l<=r){mid=(r-l)/2+l;if(nums[mid]>target)r=mid-1;elsel=mid+1;}returnr;}vector<int>searchRange(vector<int>&nums,inttarget){intleft=searchLeft(nums,target);intright=searchRight(nums,target);//只要left>right就说明target一定不存在 无论数组是空还是单元素//如果数组为空 right=-1;left=0 没有left=right这种情况 left=right时无法退出循环if(left>right)return{-1,-1};elsereturn{left,right};}};

哈希表:

通过哈希函数将键映射到数组的特定位置,支持O(1)时间复杂度的随机访问。

最简单满足哈希原理的容器是数组。

哈希表使用:

通常用于查找某个元素是否在某个集合中出现过

常见哈希表:

● 数组

元素访问 O(1) ,遍历O(n),插入删除O(n)

● set (集合)包含在头文件中

unordered_set:元素访问O(1),插入删除O(1)

#include<iostream>#include<set>usingnamespacestd;intmain(){//创建set容器 set会自动排序(从小到大)以及去重set<int>st;//插入元素st.insert(1);st.insert(5);st.insert(3);for(autoi:st){cout<<i<<' ';}//find查找 如果没找到会返回尾部迭代器if(st.find(0)==st.end())cout<<"没找到";elsecout<<0;return0;}
● map(映射)

unordered_map:元素访问O(1),插入删除O(1)

#include<iostream>#include<map>usingnamespacestd;intmain(){//创建一个map容器map<int,int>mp;//通过key值进行排序(从小到大)和去重//插入元素mp[1];//value自动初始化为0 key-value:1-0mp[2]=1;//key=2 value=1//通过insert进行插入mp.insert({3,2});cout<<mp[3]<<endl;//c++中有键值对类型pairpair<int,int>pair={4,3};mp.insert(pair);//键值对访问cout<<pair.first<<",";//keycout<<pair.second<<endl;//valuecout<<mp[4]<<endl;//通过增强for循环遍历for(autoi:mp){cout<<i.first<<"-"<<i.second<<' ';}//修改valuemp[1]=1;return0;}

算法一本通1117:使用数组

#include<iostream>usingnamespacestd;constintN=2e4+10;intarr[N];intmain(){//核心思路:将数组的下标与值对应 下标与值相同 若值不为零则说明重复 不放入数组intn;cin>>n;for(inti=0;i<n;i++){intx;cin>>x;if(arr[x]==0){cout<<x<<" ";arr[x]=x;}}return0;

算法一本通1117:使用set

set<int>st;intn;cin>>n;for(inti=0;i<n;i++){intx;cin>>x;if(st.find(x)==st.end()){st.insert(x);cout<<x<<' ';}}

算法一本通1117:使用map

map<int,int>mp;intn;cin>>n;for(inti=0;i<n;i++){intx;cin>>x;if(mp[x]==0){cout<<x<<" ";mp[x]=x;}}

力扣242:有效的字母异位词

classSolution{public:boolisAnagram(string s,string t){if(s.size()!=t.size())returnfalse;//键用来记录字母 值用来记录字母的个数unordered_map<char,int>mp;for(autoi:s){//对每个字母进行计数mp[i]++;}for(autoi:t){//如果这个字母的个数已经为0 说明t中的字母多了if(mp[i]==0){returnfalse;}else{//t中每找到一个字母对应的字母个数就减一mp[i]--;}}for(autoi:mp){//如果是字母异位词那么此时所有的字母个数都应该为0if(i.second!=0)returnfalse;}returntrue;}};

力扣349:两个数组的交集

classSolution{public:vector<int>intersection(vector<int>&nums1,vector<int>&nums2){map<int,int>mp;vector<int>vec;for(autoi:nums1){//记录在nums1是否存在 存在为1mp[i]=1;}for(autoi:nums2){//mp[i]==1说明在nums1和nums2中都存在if(mp[i]==1){vec.push_back(i);//置为0 防止重复mp[i]=0;}}returnvec;}};

力扣202:快乐数

classSolution{public:boolisHappy(intn){map<int,int>mp;while(n!=1){intcnt=0;while(n){cnt+=(n%10)*(n%10);n=n/10;}n=cnt;if(mp[cnt]==1)returnfalse;mp[cnt]=1;}returntrue;}};

总结

以上就是我今天所学到的全部内容了,最后,还是感谢各位的阅读,我们明天见!

http://www.jsqmd.com/news/719648/

相关文章:

  • KH Coder:无需编程的文本挖掘与内容分析完整指南
  • React 状态管理与性能优化方法
  • 杭州余杭永鸿再生资源回收:余杭区厂房拆除回收推荐哪几家 - LYL仔仔
  • 2026年最新岳池伴手礼米粉优选:深度解析四川省粉大师食品有限责任公司 - 2026年企业推荐榜
  • XGBoost早停超快
  • 2026年K12教育机构深度测评榜:避开“虚假师资”与“合同陷阱”的实用指南
  • 2026年昆明、曲靖企业财税一站式服务深度横评——如何找到靠谱的代理记账与工商变更合伙人 - 优质企业观察收录
  • [AI]DeepSeek-R1的GRPO算法
  • 2026年4月福州外墙/干挂/家具/别墅外墙/石材家具厂家选购指南:认准福建省峰群建筑装饰有限公司 - 2026年企业推荐榜
  • 2026年昆明代理记账与工商变更一站式财税服务深度横评指南 - 优质企业观察收录
  • Windows系统优化神器Winhance:告别卡顿的终极解决方案
  • 多维度图表:带自定义入场动画的折线图|Highcharts 代码示列
  • 2026年遵义央国企笔试面试培训机构优选 专注本土考情且服务有保障 - 深度智识库
  • 三步构建企业级开源CRM系统:EspoCRM全栈部署实战
  • QLVideo:深度解析macOS非原生视频格式的终极预览解决方案
  • 别再为mxnet安装报错头疼了!手把手教你用conda虚拟环境搞定版本兼容
  • 魔兽争霸3终极优化工具:WarcraftHelper 5分钟快速上手指南
  • 什么泥膜清洁毛孔效果好?12天解锁素颜柔光感干净肤质 - 全网最美
  • 南昌好的医疗纠纷代理律师推荐:为何律师的医法双背景更受信赖 - 品牌2025
  • 猫抓Cat-Catch:浏览器资源嗅探扩展的终极免费解决方案
  • 清洁毛孔泥膜哪个牌子好?12天告别面部灰蒙蒙打造原生透光肌 - 全网最美
  • 中国信通院启动“模数共振”行动:构建“高质量数据—高效能模型—高价值应用”良性循环,赋能新型工业化
  • 2026年AI毕业论文工具深度实测|7款AI毕业论文写作工具横评,这款AI领衔毕业安全线 - 逢君学术-AI论文写作
  • 前端性能优化:移动端优化详解
  • Highcharts的不规则间隔的时间数据图表示例|制作时间序列积雪深度对比图
  • 2026年装甲门厂家怎么选?从行业痛点看高端入户门的真正差异 - 企师傅推荐官
  • Barrier终极指南:如何用一套键鼠无缝控制Windows、macOS和Linux三台电脑?[特殊字符]
  • 2026年福田区靠谱GEO优化公司推荐技术实力与服务价值拆解 - 奔跑123
  • 生信总监,为何高薪裸辞?
  • 2026南昌医疗纠纷律师怎么选?医法双背景的律师提供专业代理方案 - 品牌2025