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

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

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.hqwc.cn/news/501224.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【设计模式】(二、)设计模式六大设计原则

一、 设计原则概述 设计模式中主要有六大设计原则&#xff0c;简称为SOLID &#xff0c;是由于各个原则的首字母简称合并的来(两个L算一个,solid 稳定的)&#xff0c;六大设计原则分别如下&#xff1a; ​ 1、单一职责原则&#xff08;Single Responsibitity Principle&#…

【数仓】Hadoop软件安装及使用(集群配置)

一、环境准备 1、准备3台虚拟机 Hadoop131&#xff1a;192.168.56.131Hadoop132&#xff1a;192.168.56.132Hadoop133&#xff1a;192.168.56.133 本例系统版本 CentOS-7.8&#xff0c;已安装jdk1.8 2、hosts配置&#xff0c;关闭防火墙 vi /etc/hosts添加如下内容&#x…

调试工具vue,react,redux

React Developer Tools Redux DevTools Vue devtools 使用浏览器官方组件扩展搜索安装

RTMP播放器和推送端支持enhanced RTMP H265(enhanced RTMP HEVC)

Enhancing RTMP, FLV 2023年7月31号正式发布&#xff0c;主要支持了HEVC(H.265)、VP9、AV1视频编码&#xff0c;很多开源项目已支持&#xff0c;我的播放器和推送端也改改&#xff0c;支持下enhanced rtmp H.265(HEVC). 播放端和推送端connect RTMP server时&#xff0c;要在co…

数据结构与算法之美学习笔记:56 | 算法实战(五):如何用学过的数据结构和算法实现一个短网址系统?

目录 前言短网址服务整体介绍如何通过哈希算法生成短网址&#xff1f;如何通过 ID 生成器生成短网址&#xff1f;总结引申 前言 本节课程思维导图&#xff1a; 短网址服务你用过吗&#xff1f;如果我们在微博里发布一条带网址的信息&#xff0c;微博会把里面的网址转化成一个更…

TensorBoard的使用,add_image()的使用。

在TensorBoard中&#xff0c;add_image()函数用于将图像数据添加到可视化中。它可以用于显示模型输入、输出、中间特征图等图像数据&#xff0c;以帮助开发者理解模型的运行情况。 add_image()的用法&#xff1a; 使用ctrl点击add_image() 注意&#xff1a;图片类型要求为 t…

怎么挑选立体式学习灯?五款大路灯分享,选对台灯很重要!

相较于传统台灯&#xff0c;大路灯能够提供更加宽广舒适的照明&#xff0c;更有效地解决光线不足以及光线刺眼带来的问题&#xff0c;以至于成为目前照明电器的新宠。但我们在选购产品时&#xff0c;仍不能掉以轻心&#xff0c;毕竟市面上劣质产品众多&#xff0c;特别是某些网…

2024pytest自动化测试框架学习(三)

在自动化测试中我们经常会针对某些测试方法编写前置测试数据&#xff0c;当测试方法执行完毕后再清理这些测试数据。之前我们接触的unittest框架中&#xff0c;使用setUp、tearDown方法来解决前置数据、后置数据销毁的问题。pytest为我们提供了更加强大灵活的fixtrue来完成该实…

连接未来:光路科技FR-TSN系列交换机驱动5G工业互联网进化

从最早的无线电话&#xff0c;到现在的5G&#xff0c;移动通信已经经历了巨大的变化。这些变化不仅仅是速度的提升&#xff0c;更是对我们生活方式的彻底改变。从最开始的语音通话&#xff0c;到现在的视频、游戏、社交媒体&#xff0c;移动通信让一切变得触手可及。 5G不仅仅…

【算法设计与分析】和相等的子数组

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;算法分析与设计 ⛺️稳中求进&#xff0c;晒太阳 题目 给你一个下标从 0 开始的整数数组 nums &#xff0c;判断是否存在 两个 长度为 2 的子数组且它们的 和 相等。注意&#xff0c;这两个…

InfiniBand 200Gbps QSFP56 高速线缆/光缆和光模块解决方案

随着数据中心和人工智能迅速发展&#xff0c;对高速、低延迟和低功耗的数据传输需求变得至关重要。飞速&#xff08;FS&#xff09;提供针对各种高性能计算场景量身定制的各种InfiniBand线缆和光模块产品。本文旨在概述飞速&#xff08;FS&#xff09;200G InfiniBand HDR 光缆…

开源项目oshi-core介绍

oshi-core 是一个用 Java 编写的开源库&#xff0c;它允许开发人员轻松地获取有关操作系统的详细信息&#xff0c;包括硬件和系统资源。它是一个跨平台的库&#xff0c;可以在 Windows、Linux 和 macOS 上运行。oshi-core 提供了广泛的 API&#xff0c;用于检索有关 CPU、内存、…