C国演义 [第十一章]

第十一章

  • 有效的字母异位词
    • 题目理解
    • 代码
  • 两数之和
    • 题目理解(暴力篇)
    • 代码
    • 题目理解(哈希篇)
    • 代码

有效的字母异位词

力扣链接
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词

示例 1:
输入: s = “anagram”, t = “nagaram”
输出: true

示例 2:
输入: s = “rat”, t = “car”
输出: false

  • 提示:
    1 <= s.length, t.length <= 5 * 104
    s 和 t 仅包含小写字母

题目理解

因为题目的要求是:

  • 两个数组 仅仅包含小写字母 ⇒ 一共才26个英语字母
  • 两个数组的大小是 1 <= length <= 5*10的四次方

⇒ 我们可以采用 哈希的思想
我们可以用一个数组(利用下标)来记录两个数组中每个字母出现的次数
然后通过比较 每个字母出现的次数 和 0 进行比较

🗨️那小写字母如何装换为数组下标?

  • 通过ASCLL码来进行转化 ⇒ 字母 - 'a'

代码

class Solution {
public:bool isAnagram(string s, string t) {int sum[26] = {0};// 如果两个数组的大小都不一样, 那就直接返回 falseif(s.size() != t.size())return false;for(int i = 0; i < s.size(); i++){sum[s[i] - 'a']++; // a数组的此字母对应的下标++sum[t[i] - 'a']--; // b数组的此字母对应的下标--}// 如果两个数组每个字符出现的次数是一样的, 每个下标对应的都是 0for(int i = 0; i < 26; i++){if(sum[i] != 0)return false;}return true;}
};


两数之和

力扣链接
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现

你可以按任意顺序返回答案

示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]

示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:
输入:nums = [3,3], target = 6
输出:[0,1]

  • 提示:
    2 <= nums.length <= 104
    -109 <= nums[i] <= 109
    -109 <= target <= 109
    只会存在一个有效答案

题目理解(暴力篇)

这题一看就是 低配版 ⇒ 2 <= size( ) <= 10^4, 这个数组的大小就是很巴适
暴力解法就是 两个for循环 ⇒ 最大时间也是 10^8, 不会爆时间的

代码

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

题目理解(哈希篇)

我们就会发现, 暴力解法虽然可以, 但是执行时间很长, 那有没有执行时间短的方法呢?

我们的一个思路是:
当我们顺序遍历该数组时, 当我们遍历到一个特定的下标(nums[i])时, 我们需要知道 target - nums[i] 这个数字是否在之前遍历过的数字里面出现过

  1. 如果出现 — — 返回 (target - nums[i]) 的下标 和 nums[i]的下标 (i)
  2. 如果没有出现 — — 不返回,
    • 如果直至数组的结尾, 也没有出现, 那就返回空

当我们查询一个元素是否出现过, 或者一个元素在一个集合中是否存在 — — 那就可以使用哈希

在本题中, 我们不仅需要知道 (target - nums[i])这个数是否遍历过, 也要知道 (target - nums[i]) 的下标

那么我们就不能用数组来进行存储了, 可以采用 map的方式进行存储 (key, value)

⇒ key该存储什么, value又该存储什么呢?
由于本题需要返回的是下标, 所以 key应该存储下标, valu来存储数值

⇒ 那map有三种形式, 我们应该选取哪一种呢? map, unordered_map, multimap

由于unordered_map的查询效率是三个当中最快的, 那么我们就选用 unordered_map

代码

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {// 选用unordered_map这个数据结构std::unordered_map<int, int> map;for(int i = 0; i < nums.size(); i++){// 查询 target - nums[i]是否被遍历过auto cur = map.find(target - nums[i]);// 之前有被遍历过, 那就直接返回if(cur != map.end()){return {cur->second, i};}// 没有遍历过, 那就收入map里面map.insert(pair<int, int> (nums[i], i));}// 最后在map里面都没有找到, 那就返回空return {}; }
};

  • 这个题目要搞懂的四个点:
  1. 为什么要选取哈希的算法
  2. 哈希为啥要用map的数据结构
  3. map是用来干什么的
  4. map中的key是用来存放什么的, value是用来存放什么的

个人感觉, 搞懂这四个点, 那么此题目就理得条条顺顺喽!!!


人是有惰性属性的动物,一旦过多地沉湎于温柔之乡,就更削弱了重新投入风暴的勇气和力量. — — 路遥<早晨从中午开始>

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

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

相关文章

git常用命令

git安装后-指定名称和邮箱 $ git config --global user.name “Your Name” $ git config --global user.email “emailexample.com” 本地初始化GIT 仓库: #基于远程仓库克隆至本地 git clone <remote_url> #当前目录初始化为git 本地仓库 git init “directory” 把文…

JVM-类加载器

主要分为4大步&#xff1a; #mermaid-svg-XlM6AyiZ7c3enqnX {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-XlM6AyiZ7c3enqnX .error-icon{fill:#552222;}#mermaid-svg-XlM6AyiZ7c3enqnX .error-text{fill:#552222;…

Linux:多进程和多线程回环socket服务器和客户端

多进程socket服务器代码&#xff1a; #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <string.h> #include <ctype.h> #include <sys/wait.h> #i…

Facebook Messenger市场营销,跨境电商不可忽略的营销手段

营销始于广告。广告仍然是不可或缺的&#xff0c;但广告的方式正在发生变化。以前商家会使用广告邮件或者直接转到网站上的产品页面&#xff0c;但是这两种方法都存在很大问题。虽然企业可以通过电子邮件与潜在客户保持联系&#xff0c;但不能保证这些潜在客户会真正看广告邮件…

Gitee 上传项目到仓库(上传文件夹)

一、将仓库下载到本地 1.首先打开仓库&#xff0c;点击下载压缩包 2.将下载的压缩包解压&#xff0c;并打开&#xff0c;在当前目录下打开 二、git操作 1.在文件当前目录打开git bash 2.初始化git git init 该命令会生成一个隐藏的.git文件夹 如果不是第一次使用&#…

try catch不能捕获promise的错误

参考链接 try catch不是万能的&#xff0c;不能捕获promise的错误。但可以promise接catch来捕获错误&#xff0c;如果有多层的promise&#xff0c;每层都要加catch。 代码示例 // 捕获失败 try {new Promise((resolve,reject)>{throw Error(1)}) } catch (e) {console.erro…

精通正则表达式 - 打造高效正则表达式

目录 一、典型示例 1. 稍加修改——先迈最好使的腿 2. 效率 vs 准确性 3. 继续前进——限制匹配优先的作用范围 4. “指数级”匹配 二、全面考察回溯 1. 传统 NFA 的匹配过程 2. POSIX NFA 需要更多处理 3. 无法匹配时必须进行的工作 4. 看清楚一点 5. 多选结构的代…

测试用例实战

测试用例实战 三角形判断 三角形测试用例设计 测试用例编写 先做正向数据&#xff0c;再做反向数据。 只要有一条边长为0&#xff0c;那就是不符合要求&#xff0c;不需要再进行判断&#xff0c;重复。 四边形 四边形测试用例

安装交叉编译工具链aarch64-linux-gnu-g++ 以及cmake测试

&#xff08;一&#xff09;交叉编译工具链安装 # 查看可以安装的版本 apt-cache search aarch64 # 选择可以安装的版本进行安装 # 此处选择gcc-5-aarch64-linux-gnu以及g-5-aarch64-linux-gnu进行安装 sudo apt-get install gcc-5-aarch64-linux-gnu  sudo apt-get install …

HDFS的文件块大小(重点)

HDFS 中的文件在物理上是分块存储 &#xff08;Block &#xff09; &#xff0c; 块的大小可以通过配置参数( dfs.blocksize&#xff09;来规定&#xff0c;默认大小在Hadoop2.x/3.x版本中是128M&#xff0c;1.x版本中是64M。 如果一个文件文件小于128M&#xff0c;该文件会占…

Python实战案例:轻松采集微博评论,揭示网络舆论热点!

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 开发环境: python 3.8: 解释器 pycharm: 代码编辑器 模块使用: requests: 发送请求 parsel: 解析数据 jieba pandas stylecloud 第三方模块安装&#xff1a; win R 输入cmd 输入安装命令 pip install 模块名 (如果你…

uniapp 条件编译失败,跑不起来

因为这行代码整个uniapp都跑不起来&#xff0c;谁懂救命。再说uniapp的异常提示也太反人类了<!-- <image :src"require(/ baseListItem.url)" /> -->

没有accept还能建立tcp连接吗?

首先什么是accept&#xff1f;以下是常见的接收网络请求的伪代码 int main() {/*Step 1: 创建服务器端监听socket描述符listen_fd*/ listen_fd socket(AF_INET, SOCK_STREAM, 0);/*Step 2: bind绑定服务器端的IP和端口&#xff0c;所有客户端都向这个IP和端口发送和请求数…

[工具|软件使用] VSCode查看正在运行查询插件

在VSCode中&#xff0c;你可以使用"Developer: Show Running Extensions"命令来查看当前运行的所有插件。 以下是在VSCode中查看插件CPU占用的步骤&#xff1a; 打开VSCode&#xff0c;确保你的编辑器正常运行。 按下Ctrl Shift P&#xff08;在Mac上是Cmd Shif…

高精度地图服务引擎项目

技术栈&#xff1a;使用vue3TypeScriptElement PlusPiniaaxios 项目描述&#xff1a;高精度地图服务引擎项目&#xff0c;提供轻量化处理3D瓦片切片分布式处理分发服务的一站式解决方案 工作内容&#xff1a;1、项目60%已上的页面开发 2、部分模块的功能实现&#xff0c; 3、封…

LT6911C 是一款HDMI 1.4到双端口MIPIDSI/CSI或者LVDS加音频的一款高性能芯片

LT6911C 1.描述&#xff1a; LT6911C是一款高性能的HDMI1.4到MIPIDSI/CSI/LVDS芯片&#xff0c;用于VR/智能手机/显示器应用程序。对于MIPIDSI/CSI输出&#xff0c;LT6911C具有可配置的单端口或双端口MIPIDSI/CSI&#xff0c;具有1个高速时钟通道和1个~4个高速数据通道&#…

Flask 笔记

Flask 笔记 一、Flask介绍 1、学习Flask框架的原因 2020 Python 开发者调查结果显示Flask和Django是Python Web开发使用的最主要的两个框架。 2、Flask介绍 ​ Flask诞生于2010年&#xff0c;是Armin ronacher用Python 语言基于Werkzeug工具箱编写的轻量级Web开发框架。 ​…

24 ==比较的是地址在.equals比较的是内容

public class Demo1 {public static void main(String[] args) {byte[] arr {97,98,99};String s1 new String(arr);String s2 new String(arr);System.out.println(s1s2);System.out.println(s1.equals(s2));} }

【云原生】Kubernetes之ConfigMap

ConfigMap ConfigMap 是一种 API 对象&#xff0c;用来将非机密性的数据保存到键值对中。使用时&#xff0c; Pods 可以将其用作环境变量、命令行参数或者存储卷中的配置文件 ConfigMap 将你的环境配置信息和 容器镜像 解耦&#xff0c;便于应用配置的修改 说明&#xff1a;…

Ubuntu16.04LTS安装ROS测试小海龟样例

一、参考资料 在Ubuntu中安装ROS Kinetic ROS安装ubuntu16.04 无需科学上网解决sudo rosdep init初始化问题 二、安装ROS关键步骤 1. 选择ROS版本 ROS安装选择 Ubuntu版本不同&#xff0c;对应安装的ROS版本也不同&#xff0c;务必版本对齐。 本文以Ubuntu16.04LTS系统为例…