三:哈希map day6 哈希表理论基础 ● 242.有效的字母异位词 ● 349. 两个数组的交集 ● 202. 快乐数● 1. 两数之和

news2024/11/24 7:32:41

今日任务 

● 哈希表理论基础 
● 242.有效的字母异位词 
● 349. 两个数组的交集 
● 202. 快乐数
● 1. 两数之和   

今日任务 

  •  242.有效的字母异位词 

  • 题目
        大型概括:map 的使用
  •     1.题目描述-->思路:
  •                 给出两个string s,t;  各自对应的字母数量要一致
  • 思路:     
  •              利用一个map,s对map++;t对map--;

                 遍历map的时候,有非0的,就是假;
  •  2.输入 返回值:bool 01
    • 3.边界情况:风险:必须二者长度相等,否则,直接返回假!
  • class Solution {
    public:
        bool isAnagram(string s, string t) {
           map<char,int>Mymap;
           if (s.length() != t.length())
                return false;
    
           for(int i=0;i<s.size();i++){
            char a= s[i];
            char b = t[i];
                Mymap[a]++;
                Mymap[b]--;
           }
               for(int i=0;i<s.size();i++){
               if( Mymap[s[i]]!=0)
                    return false;    
           }
        return 1;}

349. 两个数组的交集 

题目
    大型概括:辅助map +vector(返回值)

方案一:(错误代码没写)

nums1 贡献为 ++

nums2 贡献为   --

最后用nums1为🗡值,遍历到  <=0的,一律添加到vector

没考虑nums2的新元素加入map,也会造成--!!!;

除非只拿nums1作为🗡值去遍历。

方案二:标记法

                nums1 进入map,将数值设置为 2;

              nums2进入map,先检查这里的🗡值是否为2,是的话,改标记为1


    1.题目描述-->思路:

    2.输入 返回值:

    3.边界情况:

    4.时空复杂度:

    5.进一步优化:

利用迭代器! 

#include <vector>
#include <map>

class Solution {
public:
    std::vector<int> intersection(std::vector<int>& nums1, std::vector<int>& nums2) {
        std::map<int, int> Mymap;
        std::vector<int> qq;
        
        // 标记 nums1 中的元素
        for (int num : nums1) {
            Mymap[num] = 2;
        }
        
        // 找出同时在 nums1 和 nums2 中的元素,并标记为 1
        for (int num : nums2) {
            if (Mymap[num] == 2) {
                Mymap[num] = 1;
            }
        }
        
        // 收集交集结果
        for (auto& pair : Mymap) {
            if (pair.second == 1) {
                qq.push_back(pair.first);
            }
        }
        
        return qq;
    }
};

 202. 快乐数 (个人方法,待验证)

题目
    大型概括:方法

  想到了一个证明方法,即缩小问题的规模,问题描述的是2^31-1范围内的数字,其实第一步的计算中(代码中的each),算得最大的数字是 760(Norigin=2XXXXXXX,但是取1999999.。。),第二步的each最大值(由第一步的假设699得到)198。若要成为快乐数,必须要在某一步的计算中,成为1 10 100(不能为1000,因为第一步得到的最大值只有760)。     将原来的题目改成:1-1000(实际为1-760)内的数字 求全部的快乐数。 具体的证明:先求出1-760内全部的快乐数,再测试7步内能得到这样的结果么? 其实count=7是我 几个数字验证几下出来的,5 6 7; 只要能涵盖1-1000的数字的验证即可。


    1.题目描述-->思路:

    2.输入 返回值:

    3.边界情况:

    4.时空复杂度:

    5.进一步优化:

超时代码:1.虽然考虑无限循环,但是要设置步数

                   思路:内层循环:让每个项都化成 平方累加

                                外层循环,让each = sum,sum=0 进入循环

                                退出:each ==1 

class Solution {
public:
    bool isHappy(int n) {
        int sum =0;
        int each =n;
        int count=0;
        while(each!=1){
            if(count==5)
                return false;
        while(each){
            int a = each%10;
            each = each/10;
            sum+=a*a;
            count++;
        }
        each = sum;
        sum=0;
        }
        return 1;
    }
};

优化方法:

class Solution {
public:
    bool isHappy(int n) {
        int sum;
        int each = n;
        int count = 0;
        
        while (each != 1 && count < 10) { // 修改为 count < 5
            sum = 0; // 重置 sum
            while (each) {
                int a = each % 10;
                each = each / 10;
                sum += a * a;
            }
            each = sum;
            count++;
        }
        
        return each == 1; // 如果 each == 1,返回 true
    }
};

 

1. 两数之和   (暴力法)

题目
    大型概括:方法

    1.题目描述-->思路:

    2.输入 返回值:

    3.边界情况:

    4.时空复杂度:

    5.进一步优化:纯暴力法,双for
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        int size = nums.size();
        vector<int>a;           //辅助
        for(int i=0;i<size-1;i++){
            for(int j=1+i;j<size;j++){
                if(nums[i]+nums[j]==target){
                      a.push_back(i);
                      a.push_back(j);
                      return a;
                }
                    
            }
        }
        return a;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1679109.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开放式运动耳机哪款好用?五款高性能值得信赖产品推荐

身为户外运动的达人&#xff0c;我发现开放式运动耳机简直是咱们运动时的最佳拍档&#xff0c;不管是跑步还是健身&#xff0c;开放式运动耳机最为舒适&#xff0c;它的妙处就在于不用塞进耳朵&#xff0c;这样既安全又卫生&#xff0c;户外动起来更放心。但市面上好坏参半&…

SDL系列(一)—— 小白入门

SDL &#xff08; Simple DirectMedia Layer &#xff09; 是一套开放源代码的 跨平台多媒体开发库 &#xff0c;使用 C 语 言写成。 SDL 提供了数种控制图像、声音、输出入的函数&#xff0c;让开发者只要用相同或是相似的 代码就可以开发出 跨多个平台&#xff08; Linu…

线上3D博物馆搭建简单吗?有何优势?有哪些应用场景?

随着科技的飞速发展&#xff0c;传统的博物馆参观方式正在经历一场前所未有的变革&#xff0c;在科技的“加持”下&#xff0c;不少博物馆凭借强大的技术、创意和美学实践&#xff0c;频频“出圈”&#xff0c;线上3D博物馆逐渐崛起&#xff0c;这不仅丰富了人们的文化体验&…

量子计算机接入欧洲最快超算!芬兰加快混合架构算法开发

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨浪味仙 排版丨沛贤 深度好文&#xff1a;1900字丨7分钟阅读 摘要&#xff1a;芬兰技术研究中心&#xff08;VTT&#xff09;与 CSC 展开合作&#xff0c;基于量子计算机超算架构进行算法开…

年度更新!统信UOS服务器版V20(1070)超越期待

不负广大客户期待&#xff01; 统信UOS服务器版V20&#xff08;1070&#xff09;年度首更 功能更强大、性能更卓越、生态更丰富 助您畅享安全、便捷、高效的产品和服务 新平台&#xff0c;新生态 统信UOS服务器版始终坚持进行生态适配&#xff0c;目前已支持超过百万种兼容…

学习Nginx(五):虚拟主机配置

核心功能 在演示虚拟主机配置之前&#xff0c;来看一下Nginx配置的核心功能说明。 了解配置更多功能&#xff0c;请查看官方说明&#xff1a; http://nginx.org/en/docs/ngx_core_module.html [rootRockyLinux9 conf]# cat nginx.conf # 核心功能&#xff0c;全局配置 # 设置启…

TikTok Shop认知课 打通TK小店全流程

资料 001-先导课.mp4 002-如何用思维导图工具做课程笔记.mp4 003-TTS入驻模式.mp4 004-如何获取店铺.mp4 005-TTS店铺注册全流程,mp4 006-店铺整体运营思路.mp4 007-运营的几个误区.mp4 008-新店起店准备工作,mp4 009-规店铺风控注意事项,mp4 010-店铺基础设置之店铺…

怎么3d立面有些模型不能删除是什么原因怎么解决?---模大狮模型网

在进行3D建模和设计过程中&#xff0c;有时会遇到一些模型无法删除的情况&#xff0c;这可能会导致设计流程受阻&#xff0c;影响工作效率。本文将介绍在3D立面中遇到无法删除模型的原因以及解决方法&#xff0c;帮助您顺利解决这一问题&#xff0c;提高设计效率。 一、模型未正…

第二届视觉语音识别挑战赛 CNVSRC 2024 启动

由 NCMMSC 2024 组委会发起&#xff0c;清华大学、北京邮电大学、海天瑞声、语音之家共同主办的第二届中文连续视觉语音识别挑战赛 CNVSRC 2024 即日启动&#xff0c;诚邀参与报名。 视觉语音识别&#xff0c;也称唇语识别&#xff0c;是一项通过口唇动作来推断发音内容的技术。…

如何在华企盾DSC防泄密系统中设置文件自动加密?

在华企盾DSC系统中设置文件自动加密的过程&#xff0c;简单且用户友好&#xff0c;确保了企业数据的安全&#xff0c;同时不干扰日常工作流程。以下是设置文件自动加密的步骤&#xff1a; 系统安装与配置&#xff1a;确保华企盾DSC数据防泄密系统已经在企业的网络中正确安装和配…

【刷题(3)】双指针

一、双指针问题基础 二、283. 移动零 1 题目 2 解题思路 &#xff08;1&#xff09;遍历数组&#xff0c;把不是零的放到一个新容器中 &#xff08;2&#xff09;遍历结束后&#xff0c;在新容器末尾插入0 &#xff08;3&#xff09;注意&#xff0c;必须在不复制数组的情况…

mobarxtem应用与华为设备端口绑定技术

交换机端口绑定 华为交换机的基础配置与MOBAXTERM终端连接 实验步骤&#xff1a; 一、给每个交换机划分vlan并添加端口 1.单个vlan的划分 2.批量划分vlan 在高端交换机CE6800上批量划分连续编号的VLAN&#xff0c;本例中连续的vlan20到vlan25 [~CE6800]vlan b 20 to 25 3…

使用websocket和服务建立链接慢的原因分析

1、java 项目使用websocketHandler创建websocket服务&#xff0c;在拦截器HttpSessionHandshakeInterceptor中&#xff0c;beforeHandshake日志到的很快&#xff0c;afterHandshake很慢 建立链接一直在连接中 2、原因分析&#xff1a; 找到服务器上的进程名 jps -l 3、使用…

Java开发大厂面试第01讲:String 的特点及其重要的方法都有哪些?

几乎所有的 Java 面试都是以 String 开始的&#xff0c;如果第一个问题没有回答好&#xff0c;则会给面试官留下非常不好的第一印象&#xff0c;而糟糕的第一印象则会直接影响到自己的面试结果&#xff0c;就好像刚破壳的小鹅一样&#xff0c;会把第一眼看到的动物当成自己的母…

处理Mini-ImageNet数据集,用于分类任务

一、Mini-ImageNet数据集介绍 ImageNet 1000类的数据太大了&#xff0c;全部下载大概有100GB左右。 2016年google DeepMind团队从ImagNet数据集中抽取的一小部分&#xff08;大小约3GB&#xff09;制作了Mini-ImageNet数据集&#xff0c;共有100个类别&#xff0c;每个类别有…

人物介绍模板 PSD 源文件免费获取

免费获取 下载链接在最后&#xff01; 下载链接在最后&#xff01; 下载链接在最后&#xff01; 下载链接在最后&#xff01; 下载链接在最后&#xff01; 链接&#xff1a;https://pan.baidu.com/s/1sq3e6djMdZt76Sh_uqVxWg 提取码&#xff1a;naun

Cache基本原理--以TC3xx为例(1)

目录 1.为什么要使用Cache 2.Memory与Cache如何映射 2.1 地址映射概设 3.小结 为什么要使用Cache&#xff1f;为什么在多核工程里要谨慎使用DCache&#xff1f;Cache里的数据、指令是如何与Memory映射&#xff1f; 灵魂三连后&#xff0c;软件工程师应该都会有模糊的回答&…

数字集成电路物理设计[陈春章]——知识总结与精炼02

第二章 物理设计建库与验证 2.1 集成电路工艺与版图 自行了解&#xff0c;关于闩锁效应可查阅小编之前的文章。 2.2 设计规则检查&#xff08;DRC&#xff09; 定义&#xff1a;晶圆代工厂对各自不同工艺参数制定出满足芯片制造良率的同一工艺层及不同工艺层之间几何尺寸的…

【论文阅读 | 三维重建】3D Gaussian Splatting for Real-Time Radiance Field Rendering(3DGS)

Abstract 辐射场方法最近彻底改变了用多张照片或视频捕获的新颖视图合成&#xff0c;然而实现高视觉质量仍然需要训练和渲染成本高昂的神经网络&#xff0c;而最近更快的方法不可避免地要牺牲速度来换取质量。对于无边界和完整的场景和1080P分辨率的渲染&#xff0c;目前没有任…

【练习】分治--快排思想

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;算法(Java)&#x1f4d5;格言&#xff1a;吾愚多不敏&#xff0c;而愿加学欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 颜色分类 题目描述 题解 代码实现 排序数组 题目描述 题解 代码…