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

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

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 { };
       
   }
};

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决GitHub无法访问的问题:手动修改hosts文件与使用SwitchHosts工具

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua&#xff0c;在这里我会分享我的知识和经验。&#x…

Node.js+Express后端,自定义接口

6分钟学会Express 后端 API 开发 Node.js 2020最新版_哔哩哔哩_bilibili 要使用Node.js和Express搭建一个简单的后台服务器&#xff0c;用于接收带有token的请求头&#xff0c;你可以按照以下步骤进行操作&#xff1a; 首先&#xff0c;确保你已经安装了Node.js和npm&#xff0…

OpenAI员工自曝996作息表,网友:真正的卷不需要强迫

鱼羊 发自 凹非寺 量子位 | 公众号 QbitAI OpenAI也996&#xff0c;实锤了&#xff08;doge&#xff09;。 思维链作者、从谷歌跳槽OpenAI的Jason Wei刚刚分享了自己在OpenAI的一天&#xff1a; [9:00am] 起床 [9:30am] 搭乘Waymo前往Mission SF&#xff0c;途中在Tartine买…

一篇文章带你搞定企业级完整性能测试流程

大部分公司在最初试的阶段只会关心项目的基本功能&#xff0c;能用就可以。但是随着项目的成熟&#xff0c;用户量逐步的增大&#xff0c;线上经常就会出现一些系统崩溃&#xff0c;用户反映系统太慢等性能问题的爆发。所以&#xff0c;性能测试的需求就逐步变得迫切了。所以&a…

【笔记】深度学习入门:基于Python的理论与实现(六)

深度学习 深度学习是加深了层的深度神经网络 加深网络 本节我们将这些已经学过的技术汇总起来&#xff0c;创建一个深度网络&#xff0c;挑战 MNIST 数据集的手写数字识别 向更深的网络出发 基于33的小型滤波器的卷积层。激活函数是ReLU。全连接层的后面使用Dropout层。基…

varFormatter 数据格式化库 以性能优先的 快速的 内存对象格式转换

varFormatter 数据格式化 技术 开源技术栏 对象/变量格式化工具库&#xff0c;其支持将一个对象进行按照 JSON XML HTML 等格式进行转换&#xff0c;并获取到结果字符串&#xff01; 目录 文章目录 varFormatter 数据格式化 技术目录介绍获取方式 使用实例格式化组件的基本使…

【C++初阶】内存管理

目录 一.C语言中的动态内存管理方式 二.C中的内存管理方式 1.new/delete操作内置类型 2.new和delete操作自定义类型 3.浅识抛异常 &#xff08;内存申请失败&#xff09; 4.new和delete操作自定义类型 三.new和delete的实现原理 1.内置类型 2.自定义类型 一.C语…

电机应用-正点原子直流有刷电机例程笔记

目录 基础驱动实验&#xff1a;调速和换向 初始化工作 电机基础驱动API 电压、电流、温度检测实验 初始化工作 采集工作 编码器测速实验 编码器接口计数原理 初始化工作 编码器测速工作 速度环控制实现 PID相关函数 PID运算 电流环控制实现 PID相关函数 PID运算…

代码随想录算法训练营第三十三天|1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果

1005.K次取反后最大化的数组和 刷题https://leetcode.cn/problems/maximize-sum-of-array-after-k-negations/description/文章讲解https://programmercarl.com/1005.K%E6%AC%A1%E5%8F%96%E5%8F%8D%E5%90%8E%E6%9C%80%E5%A4%A7%E5%8C%96%E7%9A%84%E6%95%B0%E7%BB%84%E5%92%8C.…

iOS-设置指定边圆角(左上、左下等)

以UILabel举例&#xff0c;效果图如下&#xff1a; 代码如下&#xff1a; //设置左上与右下圆角&#xff08;可自行编辑指定圆角位置&#xff09; UIBezierPath *maskPath [UIBezierPath bezierPathWithRoundedRect:_sleepStateLabel.bounds byRoundingCorners:UIRectCornerT…

Python 全栈系列227 部署chatglm3-API接口

说明 上一篇介绍了基于算力租用的方式部署chatglm3, 见文章&#xff1b;本篇接着看如何使用API方式进行使用。 内容 1 官方接口 详情可见接口调用文档 调用有两种方式&#xff0c;SDK包和Http。一般来说&#xff0c;用SDK会省事一些。 以下是Python SDK包的git项目地址 安…

“环波罗的海”包围圈将正式形成

据“直新闻”的消息称&#xff0c;近日匈牙利国会同意了瑞典加入北约的申请&#xff0c;在走完相关后续程序后&#xff0c;瑞典就将成为北约第三十二个成员国&#xff0c;而北约对俄罗斯打造的“环波罗的海”包围圈也将正式形成&#xff0c;即除俄方外&#xff0c;波罗的海周边…

JEECG_ExcelExportServer批量数据导出超过60000条

项目上线了,结果导出数据时发现只能导出6w条,好奇怪啊... 本地试了试结果每次都卡在10w条. orz 开始扒拉批量导出 ExcelBatchExportServer server new ExcelBatchExportServer();server.init(exportParams,TTransLine.class);server.write(exportList);Workbook workbook s…

github如果给第三方项目提PR(Pull Request)

参考&#xff1a; https://blog.csdn.net/Leventcoco/article/details/135871779 1&#xff09;第一步 先fork第三方项目 点击fork然后就同步一份到自己名下了&#xff0c;后续修改在自己名下这项目上先修改&#xff1a; 2&#xff09;修改项目&#xff08;要提交的新功能或…

阿里云幻兽帕鲁服务器怎么续费?阿里云服务器租用价格优惠有哪些?

阿里云幻兽帕鲁服务器的续费可以通过登录阿里云账户&#xff0c;访问ECS控制台页面来进行。首先&#xff0c;需要在控制台中找到想要续费的幻兽帕鲁服务器实例。接着&#xff0c;在控制台页面左侧导航栏中找到“费用中心”&#xff0c;点击进入&#xff0c;在费用中心页面中找到…

一个Web3项目的收官之作,必然是友好的用户界面(Web3项目三实战之四)

正如标题所述,一个对用户体验友好的应用,总是会赢得用户大加赞赏,这是毋庸置疑的。 甭管是web2,亦或是已悄然而至的Web3,能有一个外观优美、用户体验效果佳的的界面,那么,这个应用无疑是个成功的案例。 诚然,Web3项目虽然核心是智能合约攥写,但用户界面也是一个DApp不…

WSL2外部网络设置

1 关闭所有WSL系统 wsl --shutdown 2 打开Hyper-V管理器 3 将“虚拟交换机管理器”-> ”WSL连接类型“设置为“外部网络” 4 启动WSL系统&#xff0c;手动修改WSL网络 将WSL网络IP修改为192.168.1.9 sudo ip addr del $(ip addr show eth0 | grep inet\b | awk {print $2} |…

前端monorepo大仓共享复杂业务组件最佳实践

一、背景 在 Monorepo 大仓模式中&#xff0c;我们把组件放在共享目录下&#xff0c;就能通过源码引入的方式实现组件共享。越来越多的应用愿意走进大仓&#xff0c;正是为了享受这种组件复用模式带来的开发便利。这种方式可以满足大部分代码复用的诉求&#xff0c;但对于复杂…

C++基于多设计模式下的同步异步日志系统day2

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C基于多设计模式下的同步&异步日志系统 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 主要内容实现了日志代码设计的实…

【详识JAVA语言】方法签名

方法签名 在同一个作用域中不能定义两个相同名称的标识符。比如&#xff1a;方法中不能定义两个名字一样的变量&#xff0c;那为什么类中就可以定义方法名相同的方法呢&#xff1f; 方法签名即&#xff1a;经过编译器编译修改过之后方法最终的名字。具体方式&#xff1a; 方…