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

成都的教育品牌网站建设wordpress使用难不难

成都的教育品牌网站建设,wordpress使用难不难,京东的电子网站建设,做电商需要什么目的:快速判断一个元素是否出现在集合中 操作集合: 字符串:string s 和 string t 是可以直接比较是否相同的:if(s t){} 242:有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s …

目的:快速判断一个元素是否出现在集合中

操作集合:

字符串:string s 和 string t 是可以直接比较是否相同的:if(s == t){}

242:有效的字母异位词

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

示例 1:

输入: s = "anagram", t = "nagaram"
输出: true
class Solution {
public:bool isAnagram(string s, string t) {// 判断依据:两个字符串中出现的所有字符种类数量必须一致int count[26] = {0};for(int i = 0; i < s.size(); i++){int tmp = s[i] - 'a';count[tmp]++;}for(int i = 0; i < t.size(); i++){int tmp = t[i] - 'a';count[tmp]--;}bool res = true;for(int i = 0; i < 26; i++){if(count[i] != 0){res = false;break;}}return res;}
};

哈希表:使用set实现 

349:两个数组的交集

由于c++98版本不能使用unordered_set所以使用set:

class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {set<int> res_set;set<int> nums1_set(nums1.begin(), nums1.end());for(vector<int>::iterator it = nums2.begin(); it != nums2.end(); it++){if(nums1_set.find(*it) != nums1_set.end()){res_set.insert(*it);}}return vector<int>(res_set.begin(), res_set.end());}
};

有关于迭代器的使用:

202:快乐数

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

「快乐数」 定义为:

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
  • 如果这个过程 结果为 1,那么这个数就是快乐数。

如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

示例 1:

输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

此题在运算各位和的情况下还暗示了无限循环的条件也就是各位平方和重复出现,这样我们可以使用set来减少查找平方和的时间,使用set来存储平方和:

class Solution { 
public:bool isHappy(int n) {int sum = n;set<int> sum_set;while (sum != 1) {int tmp = sum;sum = 0;while (tmp > 0) {sum += pow(tmp % 10, 2);tmp = tmp / 10;}if (sum_set.find(sum) != sum_set.end()) {// cout << sum << endl;return false;}else{sum_set.insert(sum);}}return true;}
};

 这的注意的是对细节的处理:如取各位的值是while(tmp > 0)即可不需要判断是否等于0了,因为各位的样例再整除后也为0,会略过这些样例。

哈希表map的使用:

1:两数之和

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

你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。

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

示例 1:

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

每遍历到一个元素就检查是否与map中的已经被遍历过的元素相加为target的元素,如果有就加入res数组,没用就将当前遍历的元素及其对应的下标存入map。

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

 454:四数相加II

给你四个整数数组 nums1nums2nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:

  • 0 <= i, j, k, l < n
  • nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0

示例 1:

输入:nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]
输出:2
解释:
两个元组如下:
1. (0, 0, 0, 1) -> nums1[0] + nums2[0] + nums3[0] + nums4[1] = 1 + (-2) + (-1) + 2 = 0
2. (1, 1, 0, 0) -> nums1[1] + nums2[1] + nums3[0] + nums4[0] = 2 + (-1) + (-1) + 0 = 0

利用二分的思想,将四个数组两两一组,看做两个整体来处理,也就是两个数组,但是每个数组需要两层循环来遍历所有数组内元素。

先统计ab数组的所有sum和sum对应出现的次数记录在map中,接着遍历cd数组,找到是否有相加为0的组合,如果有就将res+sum_count.

class Solution {
public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {map<int, int> ab_sum;int res = 0;int n = nums1.size();for(int i = 0; i < n; i++){for(int j = 0; j < n; j++){ab_sum[nums1[i] + nums2[j]]++;}}for(int i = 0; i < n; i++){for(int j = 0; j < n; j++){int target = 0 - nums3[i] - nums4[j];map<int, int>::iterator it = ab_sum.find(target);if(it != ab_sum.end()){res += ab_sum[target];}}}return res;}
};

 383:赎金信

给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。

如果可以,返回 true ;否则返回 false 。

magazine 中的每个字符只能在 ransomNote 中使用一次。

示例 1:

输入:ransomNote = "a", magazine = "b"
输出:false

跟上面一样的练手题,简单的map应用:

class Solution {
public:bool canConstruct(string ransomNote, string magazine) {map<int, int> mag;for(int i = 0; i < magazine.size(); i++){mag[magazine[i]]++;}for(int i = 0; i < ransomNote.size(); i++){if(mag.find(ransomNote[i]) == mag.end()){return false;}else{if(mag[ransomNote[i]] == 0){return false;}else{mag[ransomNote[i]]--;}}}return true;}
};

 15:三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

示例 1:

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
解释:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意,输出的顺序和三元组的顺序并不重要。

这道题的难点在于如果先提前统计两数之和的结果和出现次数,那么不能保证在遍历第三个元素在两个元素的后面,也就是不能保证第三个元素不与前两个元素重复,因为map中存的是前两个元素的和和出现次数 .

我们使用的是左右双指针来完成,用外部的for循环控制区间的第一个元素逐步向前走,l和r左右指针控制后面的区间范围,为了更好地对重复元素去重,需将重复元素聚拢起来,我们在遍历前先用sort将元素从小到大排列:

1)第一次去重目的是判断给定数组的最小值是否小于0,如果大于0就直接return

2)第二次去重目的是保证当前遍历到的合规的区间内的元素不重复,我们采用对for循环控制的指针i进行预前一个遍历过元素进行比较判断是否相同,在左右指针我们判断两个指针是否与下一个元素相同相同控制其不断的前移或后移。

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> res;sort(nums.begin(), nums.end());for(int i = 0; i < nums.size() - 2; i++){if(nums[i] > 0){return res;}// 要保证第一个元素不能重复:if(i > 0 && nums[i] == nums[i - 1]){continue;}int l = i + 1, r = nums.size() - 1;while(l < r){if(nums[l] + nums[i] + nums[r] == 0){res.push_back(vector<int>{nums[i], nums[l], nums[r]});while(l < r && nums[l] == nums[l + 1])   l++;while(l < r && nums[r] == nums[r - 1])   r--;l++;r--;}else if(nums[l] + nums[i] + nums[r] > 0){r--;}else if(nums[l] + nums[i] + nums[r] < 0){l++;}}}return res;}
};

18:四数之和

给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):

  • 0 <= a, b, c, d < n
  • abc 和 d 互不相同
  • nums[a] + nums[b] + nums[c] + nums[d] == target

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

示例 1:

输入:nums = [1,0,-1,0,-2,2], target = 0
输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]

 这道题相较于三数之和就是又加了一个for循环控制两个指针向前遍历,注意这里需要提前特判数组大小是否小于4否则会造成数组越界:

class Solution {
public:vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>> res;sort(nums.begin(), nums.end());for(int i = 0; i < nums.size() - 3; i++){if(nums.size() < 4) return res;if(i > 0 && nums[i] == nums[i - 1]) continue;for(int j = i + 1; j < nums.size() - 2; j++){if(j > i + 1 && nums[j] == nums[j - 1]) continue;int l = j + 1, r = nums.size() - 1;while(l < r){long long sum = nums[i] + nums[j] + nums[l] + nums[r];if(sum > target)  r--;else if(sum < target) l++;else{res.push_back(vector<int>{nums[i], nums[j], nums[l], nums[r]});while(l < r && nums[l] == nums[l + 1])  l++;while(l < r && nums[r] == nums[r - 1])  r--;l++;r--;}}}}return res;}
};

 


文章转载自:

http://YM9xQZHe.yLqrc.cn
http://rrkRaQNB.yLqrc.cn
http://o2r2gKZv.yLqrc.cn
http://qwShbVtI.yLqrc.cn
http://bve3HqDg.yLqrc.cn
http://WP2GSqOT.yLqrc.cn
http://ORlUoimA.yLqrc.cn
http://AqHIpehv.yLqrc.cn
http://bqV0imzx.yLqrc.cn
http://jEiSzOWu.yLqrc.cn
http://O4L7wIQY.yLqrc.cn
http://fr9r6OgN.yLqrc.cn
http://oITfZrOa.yLqrc.cn
http://f17HEfT9.yLqrc.cn
http://V6H9pzfy.yLqrc.cn
http://8UM7Z0dJ.yLqrc.cn
http://k7KvbnFp.yLqrc.cn
http://d3MsUlEe.yLqrc.cn
http://LmMyztTV.yLqrc.cn
http://Gs8K1o68.yLqrc.cn
http://XPU9TZit.yLqrc.cn
http://b1QAGkhh.yLqrc.cn
http://jU27nh8q.yLqrc.cn
http://YwBlc6Kx.yLqrc.cn
http://97Op4U14.yLqrc.cn
http://QzuoyQDn.yLqrc.cn
http://70AN3SKE.yLqrc.cn
http://auzppn5s.yLqrc.cn
http://XH4IgJo7.yLqrc.cn
http://RFZdDgET.yLqrc.cn
http://www.dtcms.com/wzjs/734565.html

相关文章:

  • 成都网站建设制作设计森马网站建设情况
  • 排名好的昆明网站建设得物app下载官方版
  • 游戏制作需要哪些人员关键词优化报价怎么样
  • 代做设计的网站网站建设海报素材图片
  • 建设银行招聘官网网站wordpress查用户ip
  • 讨债公司网站建设佛山企业网站排名
  • 推广 广州网站建设公司做电商网站公司
  • dede 更新网站地图手机怎么修改网页内容
  • 家教网站代理赣州网站建设江西网站建设
  • 网站制作公司成都做网络推广工作怎么样
  • seo大神做的网站建设银行钓鱼网站
  • 资讯网站做app建设棋牌类网站要多少钱
  • 百度网站改版乐清网站优化
  • 东莞石排做企业网站数字营销网
  • 网站开发分销系统百度怎么制作网站教程
  • 南通网站排名优化价格注册域名的服务商平台
  • 郑州市制作网站的公司网站开发设计总结
  • 汕头网站制作公司价格茶叶公司网站建设策划书
  • 临沂房产和房建设局网站双和网页版梦幻西游手游登录
  • 做网站注册商标wordpress手机端模板下载
  • 网站开发我能做什么旅游网站系统源码
  • 网站报价功能清单赣州新闻发布会
  • 做徽章的企业网站甘肃做网站价格
  • 代做论文 软件指导去哪些网站图片制作用什么软件
  • 深圳营销外贸网站制作做外包网站摘要
  • 外贸社交网站排名天津网站备案
  • 新国际网站建设最新新闻热点头条
  • 专注宜昌网站建设wordpress 读者墙
  • 网站建设远洋国际广东省做网站推广公司
  • 链接网站制作松江品划网站建设维护