代码随想录训练营第五天 242有效的字母异位词 349两个数组的交集 202快乐数 1两数之和

本文主要是介绍代码随想录训练营第五天 242有效的字母异位词 349两个数组的交集 202快乐数 1两数之和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第一题:

原题链接:242. 有效的字母异位词 - 力扣(LeetCode)

思路:

首先定义一个unordered_map<char, int> map,它存放的key,value格式的数据,而且key不能重复。
然后我们遍历第一个字符串s,将统计每个字符出现的次数,接着遍历第二个字符串t,一旦遇到相同的字符我们将出现次数-1;

最后遍历map中的每个元素,只要有元素的第二个值不为0,证明有字符不相同,返回false,否则返回true;

代码如下:

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

第二题:

原题链接:349. 两个数组的交集 - 力扣(LeetCode)

思路:

首先先定义一个unordered_map<int, int> map,用于统计每个数字出现的个数。

遍历num1数组,将出现的元素进行统计。然后遍历第二个数组num2,当发现num2中出现的值在map中出现过,并且返回结果的数组res中没有这个值,就将这个值添加进res中,

最后返回数组。

这个思路是一开始的思路,数据结构没想好,导致需要各种补救操作,直接用unordered_set就好了。

一开始思路代码如下:

class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {unordered_map<int, int> map;vector<int> res;for(int i = 0; i < nums1.size(); i++){map[nums1[i]] += 1;}for(int i = 0; i < nums2.size(); i++){if(map[nums2[i]] != 0 && find(res.begin(), res.end(), nums2[i]) == res.end()){res.push_back(nums2[i]);}}return res;}
};

之后代码如下:

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

第三题:

原题链接:202. 快乐数 - 力扣(LeetCode)

思路:

首先定义数据结构unordered_set<int> set用来存放每次循环中的n值,一旦n值与set中的数值相同证明陷入死循环,返回false;

循环条件:

while(n != 1 && set.find(n) == set.end()),只有n不等于1才需要进行循环,等于1就直接返回true了,条件二只有set中没出现过n值,证明还没陷入死循环,接着执行循环中的内容。只要n不为1,则将n插入set中并且重新计算n值。

最后返回n是否为1.

代码如下:

class Solution {
public:bool isHappy(int n) {unordered_set<int> set;while(n != 1 && set.find(n) == set.end()){set.insert(n);n = GetNum(n);}return n == 1;}
private:int GetNum(int n){int res = 0;while(n){int a = n % 10;res += a * a;n /= 10;}return res;}
};

第四题:

原题链接:1. 两数之和 - 力扣(LeetCode)

思路:

定义unordered_map<int, int> map用于存放数组中每个元素的值及对应的下标。遍历整个数组,当发现当前遍历的数值和target相减之后的值出现在map中,说明这两个数值的下标为返回结果,将两个数值的下标添加进vector<int> res中。如果没有出现则将值和下标添加进map中。

最后返回res;

代码如下:

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

这篇关于代码随想录训练营第五天 242有效的字母异位词 349两个数组的交集 202快乐数 1两数之和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1052928

相关文章

随想录 Day 69 并查集 107. 寻找存在的路径

随想录 Day 69 并查集 107. 寻找存在的路径 理论基础 int n = 1005; // n根据题目中节点数量而定,一般比节点数量大一点就好vector<int> father = vector<int> (n, 0); // C++里的一种数组结构// 并查集初始化void init() {for (int i = 0; i < n; ++i) {father[i] = i;}

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

公共筛选组件(二次封装antd)支持代码提示

如果项目是基于antd组件库为基础搭建,可使用此公共筛选组件 使用到的库 npm i antdnpm i lodash-esnpm i @types/lodash-es -D /components/CommonSearch index.tsx import React from 'react';import { Button, Card, Form } from 'antd'

17.用300行代码手写初体验Spring V1.0版本

1.1.课程目标 1、了解看源码最有效的方式,先猜测后验证,不要一开始就去调试代码。 2、浓缩就是精华,用 300行最简洁的代码 提炼Spring的基本设计思想。 3、掌握Spring框架的基本脉络。 1.2.内容定位 1、 具有1年以上的SpringMVC使用经验。 2、 希望深入了解Spring源码的人群,对 Spring有一个整体的宏观感受。 3、 全程手写实现SpringM

有效利用MRP能为中小企业带来什么?

在离散制造企业,主流的生产模式主要为面向订单生产和面向库存生产(又称为预测生产),在中小企业中,一般为面向订单生产,也有部分面向库存和面向订单混合的生产方式(以面向订单为主,面向库存为辅),主要是应对市场需求的波动,对生产稳定性造成影响。 制定资源计划至关重要,但很多中小企业目前依赖人工、Excel表格等传统方式做各种记录、统计分析。时常会遇到: 生产任务无法统筹安排, 采购不及时, 订单

代码随想录算法训练营:12/60

非科班学习算法day12 | LeetCode150:逆波兰表达式 ,Leetcode239: 滑动窗口最大值  目录 介绍 一、基础概念补充: 1.c++字符串转为数字 1. std::stoi, std::stol, std::stoll, std::stoul, std::stoull(最常用) 2. std::stringstream 3. std::atoi, std

记录AS混淆代码模板

开启混淆得先在build.gradle文件中把 minifyEnabled false改成true,以及shrinkResources true//去除无用的resource文件 这些是写在proguard-rules.pro文件内的 指定代码的压缩级别 -optimizationpasses 5 包明不混合大小写 -dontusemixedcaseclassnames 不去忽略非公共

麻了!一觉醒来,代码全挂了。。

作为⼀名程序员,相信大家平时都有代码托管的需求。 相信有不少同学或者团队都习惯把自己的代码托管到GitHub平台上。 但是GitHub大家知道,经常在访问速度这方面并不是很快,有时候因为网络问题甚至根本连网站都打不开了,所以导致使用体验并不友好。 经常一觉醒来,居然发现我竟然看不到我自己上传的代码了。。 那在国内,除了GitHub,另外还有一个比较常用的Gitee平台也可以用于

剑指offer(C++)--和为S的两个数字

题目 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 class Solution {public:vector<int> FindNumbersWithSum(vector<int> array,int sum) {vector<int> result;int len = array.size();if(

剑指offer(C++)--数组中只出现一次的数字

题目 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 class Solution {public:void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {int len = data.size();if(len<2)return;int one = 0;for(int i