首页 > 其他分享 >训练营第六天:)

训练营第六天:)

时间:2024-05-27 18:33:26浏览次数:14  
标签:size return int 训练营 第六天 index1 nums1 first

有效的字母异位词

哈希表新手题,不过可以直接排序再判断,剑走偏锋不用哈希

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;
    }
};

两个数组的交集

这个也可以排序然后双指针,不用哈希,时间复杂度O(mlogm+nlogn),主要是排序的复杂度,空间复杂度O(mlogm+nlogn)也是排序造成的。

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        sort(nums1.begin(), nums1.end());
        sort(nums2.begin(), nums2.end());
        int len1 = nums1.size(), len2 = nums2.size();
        int index1 = 0, index2 = 0;
        vector<int> ans;
        while(index1 < len1 && index2 < len2) {
            if(nums1[index1] == nums2[index2]) {
                if(ans.size() == 0 || nums1[index1] != ans.back()) ans.push_back(nums1[index1]);
                index1++;
                index2++;
            }
            else if(nums1[index1] < nums2[index2]) index1++;
            else index2++;
        }
        return ans;
    }
};

快乐数

这题和环形链表II有点异曲同工之妙,笔者的做法是用一个set来记录每次计算的结果,重复就false,等于1就true。

但看过评论区后发现,这样只是走了int限制的捷径,有可能会爆栈,所以不能记录,而应该采取环形链表中检查环的方法——追及问题。

用快慢指针,不过指的是计算结果,如果fast最终等于slow,则有环,false,这样空间复杂度就成了O(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;
    }
};

该题解来源

两数之和

思路还记得,用哈希来记录target-x,利用set查找的O(1)复杂度来优化查找过程。

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

unordered_set

  • 无序存储
  • 元素独一无二,即键值key唯一

常用方法

  • unorder_set<string> first容器定义
  • first.empty()判断容器是否是空,是空返回true,反之为false
  • first.size()返回容器大小
  • first.maxsize()返回容器最大尺寸
  • first.begin()返回迭代器开始
  • first.end()返回迭代器结束
  • first.find(value)返回value在迭代器的位置,没找到会返回end()
  • first.count(key)返回key在容器的个数
  • first.insert(value)将value插入到容器中
  • first.erase(key)通过key删除
  • first.clear()清空容器
    详细文档

标签:size,return,int,训练营,第六天,index1,nums1,first
From: https://blog.csdn.net/bettername/article/details/139226308

相关文章

  • 57天【代码随想录算法训练营34期】第十章 单调栈part01
    739.每日温度单调栈指的是只增加或只减少的stack,相当于一个memoclassSolution:defdailyTemperatures(self,temperatures:List[int])->List[int]:answer=[0]*len(temperatures)stack=[0]foriinrange(1,len(temperatures)):......
  • 代码随想录算法训练营第十八天 | 513.找树左下角的值
    513.找树左下角的值题目链接文章讲解视频讲解classSolution{public:intmaxDepth=INT_MIN;intresult;intfindBottomLeftValue(TreeNode*root){intdepth=0;traversal(root,depth);returnresult;}voi......
  • 代码随想录算法训练营第三天 |203、707、206
    链表基础理论:https://programmercarl.com/链表理论基础.html203题目链接:https://leetcode.cn/problems/remove-linked-list-elements/203代码随想录:https://programmercarl.com/0203.移除链表元素.html#算法公开课707题目链接:https://leetcode.cn/problems/design-linked-lis......
  • 【免费Web系列】大家好 ,今天是Web课程的第六天点赞收藏关注,持续更新作品 !
        这是Web第一天的课程大家可以传送过去学习 http://t.csdnimg.cn/K547r后端Web实战(IOC+DI)前言Web开发的基础知识,包括Tomcat、Servlet、HTTP协议等,我们都已经学习完毕了,那接下来,我们就要进入Web开发的实战篇。在实战篇中,我们将通过一个案例,来讲解Web开发的核心......
  • 代码随想录算法训练营第第18天 | 513.找树左下角的值 、112. 路径总和 、106.从中
    找树左下角的值本地递归偏难,反而迭代简单属于模板题,两种方法掌握一下题目链接/文章讲解/视频讲解:https://programmercarl.com/0513.找树左下角的值.html/***Definitionforabinarytreenode.*functionTreeNode(val,left,right){*this.val=(val===undef......
  • 代码随想录算法训练营第三十七天|435. 无重叠区间、763.划分字母区间、56. 合并区间、
    435.无重叠区间文档讲解:代码随想录题目链接:.-力扣(LeetCode)本道题与上个题目相似,都是求重叠区间统计重叠区间的个数,减去重叠区间的个数就是无重叠区间了主要就是为了让区间尽可能的重叠。(为什么)按照左边界排序①如果i的左边界大于等于上一个区间的右边界,就没有重叠......
  • 代码随想录算法训练营第十六天 | 104.二叉树的最大深度、559.n叉树的最大深度、111.二
    104.二叉树的最大深度题目链接:https://leetcode.cn/problems/maximum-depth-of-binary-tree/文档讲解:https://programmercarl.com/0104.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E5%A4%A7%E6%B7%B1%E5%BA%A6.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE......
  • 代码随想录算法训练营第36期DAY38
    DAY38435无重叠区间昨晚很快就想出来了,今天相当于二刷。class Solution {public:    static bool mycmp(vector<int>&a,vector<int>&b){        return a[1]<b[1];    }    int eraseOverlapIntervals(vector<vector<int>>& intervals) {   ......
  • 代码随想录算法训练营第36期DAY39
    道心破碎的一天,继续加油吧,坚持努力。DAY39738单调递增的数字暴力法:没有想到用inti=n;i>0;i--来遍历。class Solution {private:    bool checknum(int num){        if(num<10) return true;        while(num/10!=0){           ......
  • 代码随想录算法训练营第36期DAY37
    DAY37先二刷昨天的3道题目,每种方法都写:是否已完成:是。报告:134加油站的朴素法没写对。原因是:在if中缺少了store>=0的判断,只给出了index==i的判断。前进法没写出来。因为忘记了总油量的判断。Sum。注意变量的初始化。分配糖果注意if里面放的是ratings;860柠檬水找零网上摘得思......