【LeetCode】1000题挑战(225/1000)

简介: 【LeetCode】1000题挑战(225/1000)

1000题挑战

没有废话,直接开刷!

目录


1000题挑战


没有废话,直接开刷!


第一题:202. 快乐数 - 力扣(Leetcode)


题目接口:


解题思路:


代码:


过过过过啦!!!!


第二题:205. 同构字符串 - 力扣(Leetcode)


题目接口:


解题思路:


代码:


过过过过啦!!!!


第三题:219. 存在重复元素 II - 力扣(Leetcode)


题目接口:


解题思路:


代码:


过过过过啦!!!!


第四题:228. 汇总区间 - 力扣(Leetcode)


题目接口:


解题思路:


代码:


过过过过啦!!!!


第五题:234. 回文链表 - 力扣(Leetcode)


题目接口:


解题思路:


代码:


过过过过啦!!!!


题量截图:


写在最后:


第一题:202. 快乐数 - 力扣(Leetcode)


题目接口:

class Solution {
public:
    bool isHappy(int n) {
    }
};

解题思路:

这道题的核心思路就是:


循环的结束标志,当一个数二次插入的时候证明死循环了,


当出现1就证明成功找到了,


那么怎么判断呢?


1. 可以用哈希


2. 可以用双指针


双指针的思路是一个先循环,另一个后循环,


如果后循环的那个值等于先循环的值,就证明重复了。


我用的是哈希,


代码如下:


代码:

class Solution {
public:
    bool isHappy(int n) {
        unordered_set st;
        int sum = n;
        while(1) {
            sum = get_sum(sum); //计算快乐数
            if(sum == 1) return true; 
            //unordered_set 的find如果找不到就会返回end()
            //也就是说,如果find找到第二个sum证明无限循环了
            if(st.find(sum) != st.end()) return false;
            else st.insert(sum); //插入sum
        }
        return false;
    }
    int get_sum(int n) {
        int happy = 0;
        while(n) {
            happy += pow((n % 10), 2);
            n /= 10;
        }
        return happy;
    }
};


过过过过啦!!!!


第二题:205. 同构字符串 - 力扣(Leetcode)


题目接口:

class Solution {
public:
    bool isIsomorphic(string s, string t) {
    }
};

解题思路:

这道题我看了一下题目,


就想着用哈希去解答,


直接建两个哈希的映射关系,


然后如果一个字符出现两次,而他的映射值不同,证明他不是同构。


代码:

class Solution {
public:
    bool isIsomorphic(string s, string t) {
        unordered_map mp1, mp2; //建两个哈希映射
        for(int i = 0; i < s.size(); i++) {
            char a = s[i], b = t[i];
            //如果这个字符出现两次,而且不是第一次映射的值,证明不是同构
            if(mp1.find(a) != mp1.end() && mp1[a] != b
            || mp2.find(b) != mp2.end() && mp2[b] != a) return false;
            mp1[a] = b;
            mp2[b] = a;
        }
        return true;
    }
};


过过过过啦!!!!


第三题:219. 存在重复元素 II - 力扣(Leetcode)


题目接口:

class Solution {
public:
    bool containsNearbyDuplicate(vector& nums, int k) {
    }
};

解题思路:

这道题我用的是滑动窗口+哈希做的,


我们维护一个k大的滑动窗口,


如果窗口在滑动的过程中, 出现了相同的值,


证明是true,如果没有就返回false。


代码:

class Solution {
public:
    bool containsNearbyDuplicate(vector& nums, int k) {
        unordered_map mp;
        for(int i = 0; i < nums.size(); i++) {
            if(i > k) mp[nums[i - k - 1]] = false; //控制左边界
            if(mp[nums[i]]) return true; //如果出现相同的值,返回true
            mp[nums[i]] = true; //控制右边界
        }
        return false;
    }
};

过过过过啦!!!!


第四题:228. 汇总区间 - 力扣(Leetcode)


题目接口:

class Solution {
public:
    vector summaryRanges(vector& nums) {
    }
};

解题思路:

这道题,题目让我们分离出单个的数字,还有连续的有序区间,


那我们直接遍历数组,然后如果是单个的数字,我们就直接进数组,


如果是连续的区间,我们就记录区间开始的下标和结束的下标,


然后根据题目要求组合,再插入进数组即可。


代码:

class Solution {
public:
    vector summaryRanges(vector& nums) {
        vector v;
        for(int i = 0; i < nums.size(); i++) { //遍历
            int f = 0, t = i;
            string s;
            //如果是连续的区间,记录
            while(i + 1 < nums.size() && nums[i] == nums[i + 1] - 1) {
                f = 1;
                i++;
            }
            //如果是单个数字
            s += to_string(nums[i]);
            if(f) { //根据题目要求组合
                s.clear();
                s += to_string(nums[t]);
                s += "->";
                s += to_string(nums[i]);
            }
            v.push_back(s); //插入数组
        }
        return v;
    }
};


过过过过啦!!!!


第五题:234. 回文链表 - 力扣(Leetcode)


题目接口:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    bool isPalindrome(ListNode* head) {
    }
};


解题思路:

这道题是一个非常经典的链表面试题,


这道题有很多解法:


1. 把链表的数插进数组,但是这样的空间复杂度是O(N)


2. 递归


3. 我使用的方法:


用快慢指针分离这个链表,


翻转后半链表,


两个链表比较,如果相同,证明是回文链表,不相同证明不是。


代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    bool isPalindrome(ListNode* head) {
        //双指针找中
        ListNode* cur = head;
        ListNode* prev = head;
        while(cur && cur->next) {
            cur = cur->next->next;
            prev = prev->next;
        }
        //翻转链表2
        cur = prev->next;
        prev->next = nullptr;
        while(cur) {
            ListNode* tmp = prev;
            prev = cur;
            cur = cur->next;
            prev->next = tmp;
        }
        //两链表比较
        cur = head;
        ListNode* cur2 = prev;
        while(cur && cur2) {
            if(cur->val != cur2->val) return false;
            cur = cur->next;
            cur2 = cur2->next; 
        }
        return true;
    }
};


过过过过啦!!!!


题量截图:

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。


如果感到有所收获的话可以给博主点一个赞哦。


如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出


相关文章
|
算法 前端开发 数据可视化
数据结构与算法在前端开发中的实际应用
本文将探讨数据结构与算法在前端开发中的实际应用,重点介绍在处理大规模数据、优化性能和提升用户体验方面的具体场景和解决方案。
345 15
|
前端开发
如何用CSS实现不规则形状的背景
在设计网页时,有时需要用到不规则形状的背景。这种背景可以为网页带来更加生动的效果。在这篇文章中,我们将探讨如何用CSS实现不规则形状的背景。
1333 0
搭建一个简单的直播网站
我是一个比较爱看直播的人,经常空闲的时候会看一看LOL、吃鸡的直播。正好最近在研究阿里云的视频直播服务,突发奇想,自己来搭建一个简单的直播平台!主要会用到的东西有:视频直播、ECS、OBS、阿里播放器。
10514 1
|
11月前
|
存储 消息中间件 缓存
独特架构打造新一代消息队列Apache Pulsar
Apache Pulsar 是一个开源的分布式消息流平台,由雅虎开发并于 2016 年开源,2018 年成为 Apache 顶级项目。Pulsar 通过独特的架构提供多租户、持久化存储和批处理等高级功能,支持高吞吐量、低延迟的消息传递。其核心组件包括 Broker、Apache BookKeeper 和 Apache ZooKeeper,分别负责消息处理、持久化存储和集群管理。
404 1
|
9月前
|
数据采集 编解码 缓存
通义万相Wan2.1视频模型开源!视频生成模型新标杆,支持中文字效+高质量视频生成
2025年1月,阿里通义万相Wan2.1模型登顶Vbench榜首第一,超越Sora、HunyuanVideo、Minimax、Luma、Gen3、Pika等国内外视频生成模型。而在今天,万相Wan2.1视频生成大模型正式开源!
4801 8
|
11月前
|
数据采集 前端开发 物联网
【项目实战】通过LLaMaFactory+Qwen2-VL-2B微调一个多模态医疗大模型
本文介绍了一个基于多模态大模型的医疗图像诊断项目。项目旨在通过训练一个医疗领域的多模态大模型,提高医生处理医学图像的效率,辅助诊断和治疗。作者以家中老人的脑部CT为例,展示了如何利用MedTrinity-25M数据集训练模型,经过数据准备、环境搭建、模型训练及微调、最终验证等步骤,成功使模型能够识别CT图像并给出具体的诊断意见,与专业医生的诊断结果高度吻合。
19356 7
【项目实战】通过LLaMaFactory+Qwen2-VL-2B微调一个多模态医疗大模型
|
缓存 安全 开发工具
记 Kylin 麒麟系统安全中心拦截导致 dotnet sdk 找不到 OpenSsl 构建失败
【10月更文挑战第28天】当Kylin麒麟系统安全中心导致.NET SDK找不到OpenSsl并构建失败时,可从检查安全中心拦截规则、确认OpenSsl安装和配置、验证.NET SDK配置及重新构建项目四个方面入手解决。包括查看拦截记录、调整拦截策略、检查OpenSsl安装与库文件路径、配置.NET SDK依赖及环境变量等步骤。
455 0
|
12月前
|
新能源 API
百科-百度免费API接口教程
该接口用于从百度百科获取指定名词的基础解释。支持POST或GET请求,需提供用户ID、用户KEY及查询内容。返回状态码和解释内容或错误提示。示例:https://cn.apihz.cn/api/zici/baikebaidu.php?id=88888888&key=88888888&words=汽车。建议使用个人ID与KEY以享受更高调用频次。
1203 4
|
并行计算
huggingface_hub.utils._validators.HFValidationError: Repo id must be in the form ‘repo_name‘ or ‘nam
这篇文章介绍了在使用HuggingFace模型库时遇到的`Repo id`格式错误问题,并提供了将相对路径改为正确的绝对路径的解决办法。
|
机器学习/深度学习 算法
284张机器学习漫画手册吃透所有基础知识!
前几天淘到一份斯坦福大佬整理的漫画集,几乎讲到了机器学习所有的知识点,包括特征工程、算法模型、评估、优化……熬夜肝完了,真的很不错! 用284张漫画几乎可以吃透机器学习所有知识,就想着赶紧分享给小伙伴们了!
下一篇
开通oss服务