代码随想录算法训练营第五天

news2024/10/6 10:37:08

● 自己看到题目的第一想法

242. 有效的字母异位词

  1. 方法:
    方法一: 暴力法

    1. 分别对s, t排序
    2. 遍历s与t  判断s[i]!=t[i]  返回 false  否则 返回true
    
  2. 思路:

  3. 注意:

  4. 代码:

    bool cmp(char a, char b){
       return a<b;
   }

class Solution {
public:

   bool isAnagram(string s, string t) {
       int slen = s.size();
       int tlen = t.size();
       if(slen != tlen){
           return false;
       }
       sort(t.begin(), t.end(),cmp);
       sort(s.begin(), s.end(), cmp);
       for(int i= 0; i<slen; i++){
           cout<< s[i] <<endl   ;
       }
       for(int j= 0; j<tlen; j++){
           cout<< t[j] <<endl   ;
       }        
       
       for(int i= 0,j=0; i<slen,j<tlen; i++,j++){          
               if(s[i] != t[j]){
                   cout<< s[0] <<" "<<t[0]<<endl   ;
                   cout<< s[1] <<" "<<t[1]<<endl   ;
                   return false;                                
               }
           
       }return true;
       
   }
};
  1. 运行结果:
    在这里插入图片描述

  2. 方法二:哈希表

  3. 思路:

    定义一个nums数组大小为26,初始值为0;
    利用nums记分别录,s中字符出现的频次, t中字符出现的频次
    若二者频次相同 则 return true  否则  return false;
    
  4. 注意:

  5. 代码:

class Solution {
public:
   bool isAnagram(string s, string t) {
       int record[26]={0};
       int slen = s.size();
       int tlen = t.size();

       for(int i = 0; i<slen; i++){
           record[s[i] -'a']++;
       }

       for(int i =0; i<tlen; i++){
           record[t[i]-'a']--;
       }

       for(int i=0; i<26; i++){
           if(record[i] != 0){
               return false;
           }
       }
       return true;
   }
};
class Solution {
public:
    bool isAnagram(string s, string t) {
        map<char, int>m;
        for(int i =0; i<s.size(); i++){
            m[s[i]]++;
        }
        for(int i=0; i<t.size(); i++){
            m[t[i]]--;
        }
        
        for (auto it = m.begin(); it != m.end(); ++it) {
            if (it->second != 0) {
                return false;
            }
        }

        //等价于
    //   for(auto it:map){
    //         if(it.second !=0){
    //             return false;
    //         }
    //     }        


        return true;
    }
};

349. 两个数组的交集

  1. 方法:哈希表

  2. 思路:

     该题的结果是去重的,  所以  确定使用  set  或  unordered_set
     定义  集合 res  与  s   set<int>s, res;
     将nums1  放在 set中,  set<int>s(nums1.begin(), nums2.end());
     在s中查找 nums2  是否出现在  s中,  出现则将nums2插入res中  s.find(nums2) !=s.end();
     返回  vector<int>(res.begin(), res.end())
    
  3. 注意:

  4. 代码:

class Solution {
public:
   vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        set<int>s(nums1.begin(), nums1.end());  
        set<int>res;
        for(auto nums: nums2){
            if(s.find(nums) != s.end()){
                res.insert(nums);
            }
        }
        return vector<int>(res.begin(),res.end());

       
   }
};
  1. 运行结果:
    在这里插入图片描述

第202题. 快乐数

  1. 方法二:快慢指针

  2. 思路:

    可能会出现的情况有两种,
    1. 一个数最终会变成1
    2. 一个数最终会陷入循环
    3. 一个数最终会变得无限大(排除这种,不可能出现这种情况)
    
    定义两个指针  fast (每次走两步)  slow(每次走一步)
    若fast  与slow  相遇   则  陷入循环  
      判断    fast==1  若是 则返回 true   否则返回false;
     若不相遇 则 fast (每次走两步)  slow(每次走一步)
    
  3. 注意:

  4. 代码:

class Solution {
public:
   int getsum(int n){
       int sum =0;
       while(n){
           sum += (n%10)*(n%10);
           n = n/10;
       }
       return sum;
   }
   bool isHappy(int n) {
       int slow = n;
       int fast = getsum(n);
       while(slow != fast){
           slow = getsum(slow);
           fast = getsum(getsum(fast));

       }
       if(slow==1){
           return true;
       }
       return false;

   }
};

在这里插入图片描述

  1. 方法二:哈希表

  2. 思路:

    可能会出现的情况有两种,
    1. 一个数最终会变成1
    2. 一个数最终会陷入循环
    3. 一个数最终会变得无限大(排除这种,不可能出现这种情况)
    
    定义哈希表unordered_set<int>set
    若 set中出现sum  则返回false, 否则将sum加入到set中;
    将n赋值到下一个计算的结果    n=sum  
    
  3. 注意: n要更新成下个计算的结果 即n=sum

  4. 代码:

class Solution {
public:
   bool isHappy(int n) {

       unordered_set<int>set;
       while(1){
        int x= getsum(n);
           if(set.find(x) !=set.end()){
               return false;
           }else{
               set.insert(x);
           }
           n=x;
           if(x==1){
               return true;
           }
       }
   }
       int getsum(int n){
       int sum=0;
       while(n){
 
           sum += (n%10) * (n%10);
           n=n/10;
       }
       return sum;
   }
};

在这里插入图片描述

1. 两数之和

  1. 方法一:哈希表

  2. 思路:

    定义一个unordered_map<int, int>map, 第一个是数  第二个是下标;
    在map中查找 target-nums[i]  若存在  则返回 it->second  和下标  ,否则 将nums[i]  和 i  插入map中
    
  3. 注意:

  4. 代码:

class Solution {
public:
   vector<int> twoSum(vector<int>& nums, int target) {
       unordered_map<int, int>map;
       for(int i=0; i<nums.size(); i++){
           auto it = map.find(target-nums[i]);
           if(it != map.end()){
               return {it->second, i};
           }
           map.insert(pair<int, int>(nums[i], i));
       }
       return {};

   }
};

在这里插入图片描述

  1. 方法二:暴力法

  2. 思路:

  3. 注意:

  4. 代码:

class Solution {
public:
   vector<int> twoSum(vector<int>& nums, int target) {
       vector<int>res;
       for(int i=0; i<nums.size(); i++){
           for(int j=i+1; j<nums.size(); j++){
               if(nums[i]+nums[j]==target){
                   // res.push_back(i);
                   // res.push_back(j);
                   res.insert(res.end(),{i,j});
                   return res;
               }
           }
       }
       return { };
       
   }
};

在这里插入图片描述

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

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

相关文章

RK3568 Android12 适配抖音 各大APP

RK3568 Android12 适配抖音 各大APP SOC RK3568 system:Android 12 平台要适配抖音和各大APP 平台首先打开抖音发现摄像头预览尺寸不对只存在右上角,我将抖音APP装在手机上预览,发现是全屏 一开始浏览各大博客 给出的解决方法是修改framework 设置为全屏显示: framewo…

Jenkins自动化部署之流水线模式部署

文章目录 任务类型Pipeline流水线项目声明式的Pipeline脚本式Pipeline 示例脚本生成Tools配置示例 高级Pipeline Script from SCM 任务类型 在Jenkins中&#xff0c;有不同类型的任务&#xff08;项目&#xff09;适用于不同的构建需求。以下是一些常见的Jenkins任务类型&…

(vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)

(vue)el-checkbox 实现展示区分 label 和 value&#xff08;展示值与选中获取值需不同&#xff09; 后端数据 解决方法 在 el-checkbox 标签中间传入要展示的文本即可&#xff0c;代码如下&#xff1a; <el-checkbox-groupv-model"formInline.processFieldList"…

章鱼网络 Community Call #18|Omnity 将首先支持 Runes 协议资产跨链

香港时间2024年2月8日12点&#xff0c;章鱼网络举行第18期 Community Call。 2024年&#xff0c;我们打开一个良好的局面&#xff1a;$NEAR Restaking 已经完成第三方审计&#xff0c;并且经过几次迭代&#xff0c;进入了正式稳定运行的阶段。更重要的是&#xff0c;我们宣布了…

基于移动端的食堂助餐在线点餐配送系统 uniapp微信小程序

本文从管理员、老人、配送员、食堂商家的功能要求出发&#xff0c;养老助餐管理系统小程序中的功能模块主要是实现老人、配送员、食堂商家、食堂大厅、预约选座、餐号信息、美食信息、美食订单、订单信息、订单配送、订单评价、老人食堂、下单信息、饮食分析。经过认真细致的研…

免费下载《金融行业数据安全交换解决方案白皮书》

金融行业包括商业银行业务、证券业务、保险业务、基金业务、信托业务等&#xff0c;因此数据类型多种多样&#xff0c;并且数据涉及主体众多&#xff0c;应用场景上较为多样复杂&#xff0c;在数据交换上存在安全、合规、可控、可靠、高效等需求。 金融行业会面临哪些数据安全…

【FPGA/IC】RAM-Based Shift Register Xilinx IP核的使用

前言 一般来讲&#xff0c;如果要实现移位寄存器的话&#xff0c;通常都是写RTL用reg来构造&#xff0c;比如1bit变量移位一个时钟周期就用1个reg&#xff0c;也就是一个寄存器FF资源&#xff0c;而移位16个时钟周期就需要16个FF&#xff0c;这种方法无疑非常浪费资源。 Xili…

Goose:Golang中的数据库迁移工具

Goose&#xff1a;Golang中的数据库迁移工具 在Golang开发中&#xff0c;数据库迁移是一个常见的任务&#xff0c;用于管理数据库模式的演化和版本控制。Goose是一个轻量级的、易于使用的数据库迁移工具&#xff0c;专为Golang开发者设计。本文将介绍Goose的基本概念、用法和优…

LeetCode 刷题 [C++] 第236题.二叉树的最近公共祖先

题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以…

C++基础知识(八:STL标准库(Vectors和list))

C STL (Standard Template Library标准模板库) 是通用类模板和算法的集合&#xff0c;它提供给程序员一些标准的数据结构的实现如 queues(队列), lists(链表), 和 stacks(栈)等. STL容器的提供是为了让开发者可以更高效率的去开发&#xff0c;同时我们应该也需要知道他们的底层…

Vue——携带参数跳转路由

Vue学习之——跳转路由 前情回顾 当我们进行点击修改时&#xff0c;会进行跳转到修改页面&#xff0c;为了完成回显数据&#xff08;根据对应id查找&#xff09;&#xff0c;我们需要携带对应选择中的id跳转到修改页面&#xff0c;让其进行查找回显 学习useRoute和useRoute…

【Redis】深入理解 Redis 常用数据类型源码及底层实现(6.详解Set和ZSet数据结构)

本文是深入理解 Redis 常用数据类型源码及底层实现系列的第6篇&#xff5e;前5篇可移步(&#xffe3;∇&#xffe3;)/ 【Redis】深入理解 Redis 常用数据类型源码及底层实现&#xff08;1.结构与源码概述&#xff09;-CSDN博客 【Redis】深入理解 Redis 常用数据类型源码及底…

CCDP.01.寄主机SSH连接虚拟机的QA

V0.0 初始版本-2024.2.29 检查VM的网卡配置 如上图&#xff0c;如果enp0s3网卡没有出现形如10.0.0.??/24的ip配置&#xff0c;说明该网卡配置存在错误&#xff0c;或者没有“使能”该网卡。在RockyLinux8.X中可检查“ifcfg-enp0s&#xff1f;” vi /etc/sysconfig/network-…

51-n皇后(回溯算法)

题目 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的解决方案。 每一…

C# Post数据或文件到指定的服务器进行接收

目录 应用场景 实现原理 实现代码 PostAnyWhere类 ashx文件部署 小结 应用场景 不同的接口服务器处理不同的应用&#xff0c;我们会在实际应用中将A服务器的数据提交给B服务器进行数据接收并处理业务。 比如我们想要处理一个OFFICE文件&#xff0c;由用户上传到A服务器…

【CesiumJS-3】加载倾斜模型数据(3DTilest)以及修改位置

引入倾斜模型数据 // 加载3DTiles数据let tileset;try {tileset await Cesium.Cesium3DTileset.fromUrl("/api/3DTiles/b3dm_qx/tileset.json");viewer.value.scene.primitives.add(tileset); // 倾斜模型添加到场景中viewer.value.zoomTo(tileset); // 视角定位到倾…

外汇天眼:2月客诉TOP10榜单公布,快来看看你用的平台有没有上榜!

作为外汇投资者了解每个月登上客诉榜单的交易平台很重要&#xff0c;只有这样才能有效的预防自己遭遇外汇黑平台&#xff0c;也能警觉的提前发现平台的异常&#xff0c;对于自己的外汇交易道路只有利无弊&#xff01; 快来看看有哪些平台上榜&#xff0c;你所使用的平台是否在…

3 局域网基础(1)

1.局域网 早期的局域网主要是令牌环网。20世纪80年代&#xff0c;局域网领域出现 Ethernet与Token Bus、Token Ring三足鼎立的局面&#xff0c;并且各自都形成了相应的国际标准。21 世纪&#xff0c;Ethernet 已成为局域网领域的主流技术。介质访问控制&#xff08;MAC&#xf…

破局数据分析滞后难题,赋能企业高速增长的指标管理解决方案

指标是什么&#xff1f; 业务发展过程中&#xff0c;企业内外部都会产生很多的业务数据&#xff0c;对这些数据进行采集、计算、落库、分析后&#xff0c;形成的统计结果称为指标。简单来说&#xff0c;指标是业务被拆解、量化后形成的数量特征&#xff0c;企业利用数据指标对…

如何使用Portainer创建Nginx容器并搭建web网站发布至公网可访问【内网穿透】

文章目录 前言1. 安装Portainer1.1 访问Portainer Web界面 2. 使用Portainer创建Nginx容器3. 将Web静态站点实现公网访问4. 配置Web站点公网访问地址4.1公网访问Web站点 5. 固定Web静态站点公网地址6. 固定公网地址访问Web静态站点 前言 Portainer是一个开源的Docker轻量级可视…