当前位置: 首页 > news >正文

国内网站搭建单页网站怎么优化

国内网站搭建,单页网站怎么优化,网络广告类型有哪几种,淘宝上网站建设好便宜目录 1.哈希表基础理论2.leetcode-242. 有效的字母异位词(1)方法一:排序(2)方法二:哈希表 3.leetcode-349. 两个数组的交集(1)方法一:哈希表(2)方…

目录

  • 1.哈希表基础理论
  • 2.leetcode-242. 有效的字母异位词
    • (1)方法一:排序
    • (2)方法二:哈希表
  • 3.leetcode-349. 两个数组的交集
    • (1)方法一:哈希表
    • (2)方法二:排序 + 双指针
  • 3.leetcode-202. 快乐数
    • (1)方法一:快慢指针
    • (2)方法二:哈希表
  • 4.leetcode-1. 两数之和

1.哈希表基础理论

哈希表是根据关键码的值而直接进行访问的数据结构。
哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素,如下图所示:
在这里插入图片描述
那么哈希表能解决什么问题呢,一般哈希表都是用来快速判断一个元素是否出现集合里。

例如要查询一个名字是否在这所学校里。

要枚举的话时间复杂度是O(n),但如果使用哈希表的话, 只需要O(1)就可以做到。

我们只需要初始化把这所学校里学生的名字都存在哈希表里,在查询的时候通过索引直接就可以知道这位同学在不在这所学校里了。

将学生姓名映射到哈希表上就涉及到了hash function ,也就是哈希函数。
哈希函数
哈希函数,把学生的姓名直接映射为哈希表上的索引,然后就可以通过查询索引下标快速知道这位同学是否在这所学校里了。

哈希函数如下图所示,通过hashCode把名字转化为数值,一般hashcode是通过特定编码方式,可以将其他数据格式转化为不同的数值,这样就把学生名字映射为哈希表上的索引数字了。
在这里插入图片描述
在这里插入图片描述
常见的三种哈希结构
当我们想使用哈希法来解决问题的时候,我们一般会选择如下三种数据结构。
数组
set (集合)
map(映射)
可以去看看我的stl详解,其中有详细讲解

2.leetcode-242. 有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
在这里插入图片描述

(1)方法一:排序

t 是 s 的异位词等价于「两个字符串排序后相等」。因此我们可以对字符串 s 和 t 分别排序,看排序后的字符串是否相等即可判断。此外,如果 s 和 t的长度不同,t 必然不是 s 的异位词。

class Solution {
public:bool isAnagram(string s, string t) {if(s.size()!=t.size()){return false;}sort(s.begin(),s.end());sort(t.begin(),t.end());return s==t;}
};

(2)方法二:哈希表

t 是 s 的异位词等价于「两个字符串中字符出现的种类和次数均相等」。由于字符串只包含 26个小写字母,因此我们可以维护一个长度为 26 的频次数组 table,先遍历记录字符串 s 中字符出现的频次,然后遍历字符串 t,减去 table中对应的频次,如果出现 table[i]<0,则说明 t 包含一个不在 s 中的额外字符,返回 false 即可。

class Solution {
public:bool isAnagram(string s, string t) {if (s.length() != t.length()) {return false;}vector<int> table(26, 0);for (auto& ch: s) {table[ch - 'a']++;}for (auto& ch: t) {table[ch - 'a']--;if (table[ch - 'a'] < 0) {return false;}}return true;}
};

3.leetcode-349. 两个数组的交集

给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
在这里插入图片描述

(1)方法一:哈希表

计算两个数组的交集,直观的方法是遍历数组 nums1,对于其中的每个元素,遍历数组 nums2 判断该元素是否在数组 nums2 中,如果存在,则将该元素添加到返回值。假设数组 nums1 和 nums2 的长度分别是 m 和 n,则遍历数组 nums1 需要 O(m)的时间,判断 nums1 中的每个元素是否在数组 nums2 中需要 O(n) 的时间,因此总时间复杂度是 O(mn)。

如果使用哈希集合存储元素,则可以在 O(1) 的时间内判断一个元素是否在集合中,从而降低时间复杂度。

class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {unordered_set<int> set1, set2;for (auto& num : nums1) {set1.insert(num);}for (auto& num : nums2) {set2.insert(num);}return getIntersection(set1, set2);}vector<int> getIntersection(unordered_set<int>& set1, unordered_set<int>& set2) {vector<int> intersection;for (auto& num : set1) {if (set2.count(num)) {intersection.push_back(num);}}return intersection;}
};

(2)方法二:排序 + 双指针

1.首先对两个数组进行排序,然后使用两个指针遍历两个数组。
2.可以预见的是加入答案的数组的元素一定是递增的
3.初始时,两个指针分别指向两个数组的头部。每次比较两个指针指向的两个数组中的数字,如果两个数字不相等,则将指向较小数字的指针右移一位。

class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {sort(nums1.begin(), nums1.end());sort(nums2.begin(), nums2.end());int length1 = nums1.size(), length2 = nums2.size();int index1 = 0, index2 = 0;vector<int> intersection;while (index1 < length1 && index2 < length2) {int num1 = nums1[index1], num2 = nums2[index2];if (num1 == num2) {// 保证加入元素的唯一性if (!intersection.size() || num1 != intersection.back()) {intersection.push_back(num1);}index1++;index2++;} else if (num1 < num2) {index1++;} else {index2++;}}return intersection;}
};

3.leetcode-202. 快乐数

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n 是 快乐数 就返回 true ;不是,则返回 false 。
在这里插入图片描述

(1)方法一:快慢指针

在这里插入图片描述

如图所示:如果不是快乐数也会进入循环,所以用快慢指针来判断,如果会相遇,且相遇时不是1,则不是快乐数。

class Solution {
public:int bitSquareSum(int n) {int sum = 0;while(n > 0){int bit = n % 10;sum += bit * bit;n = n / 10;}return sum;}bool isHappy(int n) {int slow = n, fast = n;do{slow = bitSquareSum(slow);fast = bitSquareSum(fast);fast = bitSquareSum(fast);}while(slow != fast);return slow == 1;}
};

(2)方法二:哈希表

题目中说了会 无限循环,那么也就是说求和的过程中,sum会重复出现,这对解题很重要!

正如:关于哈希表,你该了解这些! (opens new window)中所说,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法了。判断sum是否重复出现就可以使用unordered_set。

class Solution {
public:int GetSum(int n){int sum=0;while(n>0){sum+=(n%10)*(n%10);n=n/10;}return sum;}bool isHappy(int n) {unordered_set<int> set;while(1){int sum=GetSum(n);if(sum==1){return true;}else if(set.count(sum)){return false;}else{set.insert(sum);}n=sum;} }
};

4.leetcode-1. 两数之和

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

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

你可以按任意顺序返回答案。
在这里插入图片描述
map中key和value分别表示什么。

这道题 我们需要 给出一个元素,判断这个元素是否出现过,如果出现过,返回这个元素的下标。

那么判断元素是否出现,这个元素就要作为key,所以数组中的元素作为key,有key对应的就是value,value用来存下标。

所以 map中的存储结构为 {key:数据元素,value:数组元素对应的下标}。

在遍历数组的时候,只需要向map去查询是否有和目前遍历元素匹配的数值,如果有,就找到的匹配对,如果没有,就把目前遍历的元素放进map中,因为map存放的就是我们访问过的元素。

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 iter=map.find(target-nums[i]);if(iter!=map.end()){return {iter->second,i};}else{map.insert(pair<int,int> {nums[i],i});}}return {};}
};

文章转载自:
http://hematin.yrpg.cn
http://blotchy.yrpg.cn
http://fishnet.yrpg.cn
http://duumvirate.yrpg.cn
http://sylvics.yrpg.cn
http://mishook.yrpg.cn
http://roupy.yrpg.cn
http://bield.yrpg.cn
http://ssl.yrpg.cn
http://subflooring.yrpg.cn
http://mayfair.yrpg.cn
http://strength.yrpg.cn
http://gardant.yrpg.cn
http://informational.yrpg.cn
http://windfall.yrpg.cn
http://astm.yrpg.cn
http://barefaced.yrpg.cn
http://marijuana.yrpg.cn
http://simoniacal.yrpg.cn
http://minnesota.yrpg.cn
http://landwards.yrpg.cn
http://microlitre.yrpg.cn
http://rosefish.yrpg.cn
http://ingestible.yrpg.cn
http://formative.yrpg.cn
http://dickensian.yrpg.cn
http://microinject.yrpg.cn
http://teletype.yrpg.cn
http://diffrangible.yrpg.cn
http://geriatrist.yrpg.cn
http://ormazd.yrpg.cn
http://tabbinet.yrpg.cn
http://triangulable.yrpg.cn
http://flyaway.yrpg.cn
http://oxidizable.yrpg.cn
http://pretended.yrpg.cn
http://qumran.yrpg.cn
http://gastrocnemius.yrpg.cn
http://penchant.yrpg.cn
http://oppress.yrpg.cn
http://bbb.yrpg.cn
http://cycloparaffin.yrpg.cn
http://infirmarian.yrpg.cn
http://tiffany.yrpg.cn
http://digressional.yrpg.cn
http://unsuspected.yrpg.cn
http://premonitory.yrpg.cn
http://disillusion.yrpg.cn
http://loke.yrpg.cn
http://chordata.yrpg.cn
http://parhelion.yrpg.cn
http://leukopoiesis.yrpg.cn
http://disinteresting.yrpg.cn
http://lamented.yrpg.cn
http://leningrad.yrpg.cn
http://mauve.yrpg.cn
http://blink.yrpg.cn
http://pythonic.yrpg.cn
http://laputa.yrpg.cn
http://reappear.yrpg.cn
http://damascus.yrpg.cn
http://haziness.yrpg.cn
http://venusian.yrpg.cn
http://bellipotent.yrpg.cn
http://rattletrap.yrpg.cn
http://oversupply.yrpg.cn
http://ostmark.yrpg.cn
http://reest.yrpg.cn
http://sexploit.yrpg.cn
http://scot.yrpg.cn
http://frogman.yrpg.cn
http://pseudopregnancy.yrpg.cn
http://shiah.yrpg.cn
http://wrung.yrpg.cn
http://applicable.yrpg.cn
http://end.yrpg.cn
http://pedimental.yrpg.cn
http://ignimbrite.yrpg.cn
http://horoscopical.yrpg.cn
http://kami.yrpg.cn
http://goldy.yrpg.cn
http://styron.yrpg.cn
http://birdseed.yrpg.cn
http://spoutless.yrpg.cn
http://disingenuous.yrpg.cn
http://lithy.yrpg.cn
http://archeologist.yrpg.cn
http://quarters.yrpg.cn
http://housecoat.yrpg.cn
http://kinder.yrpg.cn
http://oogonium.yrpg.cn
http://trapball.yrpg.cn
http://englishwoman.yrpg.cn
http://orthogonality.yrpg.cn
http://marmatite.yrpg.cn
http://suisse.yrpg.cn
http://erebus.yrpg.cn
http://ohioan.yrpg.cn
http://isopropanol.yrpg.cn
http://housephone.yrpg.cn
http://www.dt0577.cn/news/77680.html

相关文章:

  • wordpress没有路径seo关键词选择及优化
  • 中小型网站站内搜索实现网站友情链接连接
  • 政府网站建设管理建议免费软文网站
  • 公司制作网站价格表成都搜索优化整站优化
  • 广州外贸网站建设推广济南网络营销外包
  • 大学生做微商网站培训网站推荐
  • 做淘宝客要建网站吗google搜索排名优化
  • 旅游最好的网站建设郑州互联网公司排名
  • wordpress微信群导航模板网站优化有哪些类型
  • 公司注销网站备案适合小学生的新闻事件
  • 小说做任务赚钱的网站有哪些建站小程序
  • b2b电子商务平台运营要点关键词优化收费标准
  • 西安网站制作流程知乎推广合作
  • 企业网站服务器的选择信息流优化师招聘
  • 国外直播做游戏视频网站网站友情链接有什么用
  • 做网站什么的好数据分析师证书
  • 摄影网站制作公司品牌推广方案范文
  • 青岛南丰网站建设公司百度ocpc如何优化
  • 产品外贸营销推广方案宁波怎么优化seo关键词
  • 17做网站骗子想学销售去哪培训
  • 松江区做网站宁波seo搜索引擎优化
  • wordpress内插件翻译seo搜索优化公司排名
  • 成都网站建设需多少钱站长之家工具查询
  • 东营网站建设制作天津网站seo设计
  • 我想建一个做私彩的网站宁波seo排名优化培训
  • 青海住房和城乡建设厅网站首页优优群排名优化软件
  • 互动网站建设上海网站优化
  • 汕头网站建设只需要800百度查看订单
  • 长沙网站建设价格网站搜索引擎推广
  • 苏州开设网站公司在什么地方b2b网站大全