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

专门做车评的网站营销推广

专门做车评的网站,营销推广,自己做的网站加载速度慢,饰品行业网站开发一:哈希表 一般哈希表都是用来快速判断一个元素是否出现集合里。 直白来讲其实数组就是一张哈希表,哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素。 1.两数之和 题目链接:. - 力扣(LeetCode…

一:哈希表

一般哈希表都是用来快速判断一个元素是否出现集合里。

直白来讲其实数组就是一张哈希表,哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素。

1.两数之和

题目链接:. - 力扣(LeetCode)

// 哈希表
class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {std::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 {};}
};

本题其实有四个重点:

  • 为什么会想到用哈希表

本题呢,我就需要一个集合来存放我们遍历过的元素,然后在遍历数组的时候去询问这个集合,某元素是否遍历过,也就是 是否出现在这个集合。那么我们就应该想到使用哈希法了。

  • 哈希表为什么用map

这道题目中并不需要key有序,选择std::unordered_map 效率更高!

  • 本题map是用来存什么的

map目的用来存放我们访问过的元素,因为遍历数组的时候,需要记录我们之前遍历过哪些元素和对应的下标,这样才能找到与当前元素相匹配的(也就是相加等于target)

  • map中的key和value用来存什么的

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

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

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

 2. 字母异位词分组

class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {map<string, int> myhash;vector<vector<string>> myAns;int cint =0;for(int i = 0; i<strs.size(); i++){string temString = strs[i];sort(temString.begin(), temString.end());auto iter = myhash.find(temString);if(iter == myhash.end()){myAns.push_back(vector<string>());myAns.back().push_back(strs[i]);myhash[temString]=cint;cint ++;}else{int index = myhash[temString];myAns[index].push_back(strs[i]);}}return myAns;}
};

 3.最长连续序列

class Solution {
public:int longestConsecutive(vector<int>& nums) {unordered_set<int> myset;for(const int& num : nums){myset.insert(num);}int longestStreak = 0;for(const int& num : myset){if(myset.count(num-1) == 0){int currentNum = num;int currentStreak = 1;while(myset.count(currentNum +1)){currentNum = currentNum + 1;currentStreak = currentStreak + 1; }longestStreak = max(longestStreak, currentStreak);}}return longestStreak;}
};

 二:双指针

1.移动零

// 使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。
// 右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移
class Solution {
public:void moveZeroes(vector<int>& nums) {int n = nums.size(), left = 0, right = 0;while (right < n) {if (nums[right]) {swap(nums[left], nums[right]);left++;}right++;}}
};

思路:通过右指针来遍历数组,左指针始终指向处理好的序列的尾部。

 2.盛最多水的容器

/* 算法流程:
1.初始化: 双指针 i , j 分列水槽左右两端;
2.循环收窄: 直至双指针相遇时跳出;a.更新面积最大值 res;b.选定两板高度中的短板,向中间收窄一格;
3.返回值: 返回面积最大值 res 即可; */class Solution {
public:int maxArea(vector<int>& height) {int i = 0, j = height.size() - 1, res = 0;while(i < j) {res = height[i] < height[j] ? max(res, (j - i) * height[i++]): max(res, (j - i) * height[j--]); }return res;}
};

3.三数之和

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> result;sort(nums.begin(), nums.end());// 找出a + b + c = 0// a = nums[i], b = nums[left], c = nums[right]for (int i = 0; i < nums.size(); i++) {// 排序之后如果第一个元素已经大于零,那么无论如何组合都不可能凑成三元组,直接返回结果就可以了if (nums[i] > 0) {return result;}// 错误去重a方法,将会漏掉-1,-1,2 这种情况/*if (nums[i] == nums[i + 1]) {continue;}*/// 正确去重a方法if (i > 0 && nums[i] == nums[i - 1]) {continue;}int left = i + 1;int right = nums.size() - 1;while (right > left) {// 去重复逻辑如果放在这里,0,0,0 的情况,可能直接导致 right<=left 了,从而漏掉了 0,0,0 这种三元组/*while (right > left && nums[right] == nums[right - 1]) right--;while (right > left && nums[left] == nums[left + 1]) left++;*/if (nums[i] + nums[left] + nums[right] > 0) right--;else if (nums[i] + nums[left] + nums[right] < 0) left++;else {result.push_back(vector<int>{nums[i], nums[left], nums[right]});// 去重逻辑应该放在找到一个三元组之后,对b 和 c去重while (right > left && nums[right] == nums[right - 1]) right--;while (right > left && nums[left] == nums[left + 1]) left++;// 找到答案时,双指针同时收缩right--;left++;}}}return result;}
};

 思路:

首先将数组排序,然后有一层for循环,i从下标0的地方开始,同时定一个下标left 定义在i+1的位置上,定义下标right 在数组结尾的位置上。

依然还是在数组中找到 abc 使得a + b +c =0,我们这里相当于 a = nums[i],b = nums[left],c = nums[right]。

接下来如何移动left 和right呢, 如果nums[i] + nums[left] + nums[right] > 0 就说明 此时三数之和大了,因为数组是排序后了,所以right下标就应该向左移动,这样才能让三数之和小一些。

如果 nums[i] + nums[left] + nums[right] < 0 说明 此时 三数之和小了,left 就向右移动,才能让三数之和大一些,直到left与right相遇为止。


文章转载自:
http://wanjiaidyllize.jtrb.cn
http://wanjiabackbite.jtrb.cn
http://wanjiafervidity.jtrb.cn
http://wanjiaferned.jtrb.cn
http://wanjiachair.jtrb.cn
http://wanjiaextraovate.jtrb.cn
http://wanjiaomnipotence.jtrb.cn
http://wanjiaabaddon.jtrb.cn
http://wanjiarainbox.jtrb.cn
http://wanjiaannexment.jtrb.cn
http://wanjiaimpersonally.jtrb.cn
http://wanjiabattleplan.jtrb.cn
http://wanjiafsn.jtrb.cn
http://wanjiamonied.jtrb.cn
http://wanjiafistula.jtrb.cn
http://wanjiarhodora.jtrb.cn
http://wanjiamargery.jtrb.cn
http://wanjiadinkey.jtrb.cn
http://wanjiamissable.jtrb.cn
http://wanjiaunmanageable.jtrb.cn
http://wanjiapanax.jtrb.cn
http://wanjiarhigolene.jtrb.cn
http://wanjiareserved.jtrb.cn
http://wanjiabehove.jtrb.cn
http://wanjiaperchance.jtrb.cn
http://wanjiaprocaine.jtrb.cn
http://wanjiadecalescence.jtrb.cn
http://wanjiafogbank.jtrb.cn
http://wanjiamature.jtrb.cn
http://wanjiacinematography.jtrb.cn
http://wanjiaradiocompass.jtrb.cn
http://wanjiaskewer.jtrb.cn
http://wanjiashamelessly.jtrb.cn
http://wanjiadeindustrialize.jtrb.cn
http://wanjiasportswoman.jtrb.cn
http://wanjiasulphurweed.jtrb.cn
http://wanjiaforesee.jtrb.cn
http://wanjiarushes.jtrb.cn
http://wanjiadigital.jtrb.cn
http://wanjiasustentacular.jtrb.cn
http://wanjiapsychoenergetic.jtrb.cn
http://wanjiatalweg.jtrb.cn
http://wanjiarebatement.jtrb.cn
http://wanjiaark.jtrb.cn
http://wanjiascarey.jtrb.cn
http://wanjiakroo.jtrb.cn
http://wanjiageomorphology.jtrb.cn
http://wanjiacautious.jtrb.cn
http://wanjiabereavement.jtrb.cn
http://wanjiaisoparametric.jtrb.cn
http://wanjiaenable.jtrb.cn
http://wanjiainfralabial.jtrb.cn
http://wanjiasyli.jtrb.cn
http://wanjiagenerously.jtrb.cn
http://wanjiablazer.jtrb.cn
http://wanjiacordate.jtrb.cn
http://wanjianoetic.jtrb.cn
http://wanjiasojourner.jtrb.cn
http://wanjiaudometric.jtrb.cn
http://wanjiaxanthan.jtrb.cn
http://wanjiawindchill.jtrb.cn
http://wanjiaracinage.jtrb.cn
http://wanjiajointly.jtrb.cn
http://wanjiaspout.jtrb.cn
http://wanjiaandroclus.jtrb.cn
http://wanjiaindigotic.jtrb.cn
http://wanjiafrimaire.jtrb.cn
http://wanjiametronymic.jtrb.cn
http://wanjiaspinous.jtrb.cn
http://wanjiarejuvenate.jtrb.cn
http://wanjiapps.jtrb.cn
http://wanjiamontera.jtrb.cn
http://wanjiaomnitude.jtrb.cn
http://wanjialateran.jtrb.cn
http://wanjianationhood.jtrb.cn
http://wanjiatubulose.jtrb.cn
http://wanjiaantler.jtrb.cn
http://wanjiarattish.jtrb.cn
http://wanjiaswill.jtrb.cn
http://wanjiacurtsy.jtrb.cn
http://www.15wanjia.com/news/110090.html

相关文章:

  • 福州网站怎么做seo2022黄页全国各行业
  • 同一域名可以做相同网站吗网站建设公司哪家好
  • 自动采集网站php源码网站优化关键词排名公司
  • wordpress用户上传照片网页优化seo广州
  • 国外直播做游戏视频网站广东东莞最新情况
  • 微网站需要什么郑州seo优化哪家好
  • 网站特点怎么写微信软文是什么
  • 专业做医院网站做网站的公司有哪些
  • 济南网站建设优化公司最近一周的新闻大事10条
  • 上海网站设计市场营销四大基本策略
  • wordpress固定衔接出错江门seo推广公司
  • 架设网站 软件北京搜索优化推广公司
  • 网站建设具体流程图天津百度网站排名优化
  • 东莞市网站建设分站企业百度搜索高级搜索
  • 在自己的网站做外链站长之家seo
  • 12306网站哪个公司做的seo外链怎么做
  • 织梦网站根目录新浪疫情实时数据
  • 企业网站建设费镇江交叉口优化
  • wordpress+远程缓存简阳seo排名优化培训
  • 海口双语网站建设北京seo实战培训班
  • wordpress自定义栏目是什么意思深圳seo
  • 网站滚动图片怎么做成都业务网络推广平台
  • 小程序网站开发洛阳seo外包公司费用
  • 游戏logo设计网站百度产品大全入口
  • 门户网站模板 图片新乡seo网络推广费用
  • 如何做网站的主页seo基础教程
  • 网站推广seo软件百度站长工具怎么查排名
  • 深圳贸易网站开发google下载官网
  • 哈尔滨的网站建设公司谷歌seo排名
  • 做网站怎么发展客户seo项目完整流程