![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构和算法
文章平均质量分 72
数据结构和算法
THE_GREATEST
这个作者很懒,什么都没留下…
展开
-
哈希表映射
哈希表 映射一、题源:1. 两数之和问题描述给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。二、 思路:哈希表关于哈希表一般使用到的数据结构有 数组 、 set(集合) 、 map(映射) 。之前俩篇文章分别介绍了数组和集合的相关题目,使用数组一般是针对数值大小有限且机制的原创 2022-05-12 22:44:11 · 217 阅读 · 0 评论 -
哈希表数组
滑动窗口法一、题源:242. 有效的字母异位词问题描述给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。二、 思路:1、映射用 unordered_map 可以很方便的实现出现的字母及出现次数的计算。参考代码如下class Solution {public: bool isAnagram(string s, string t) { unor原创 2022-05-09 21:54:31 · 1612 阅读 · 0 评论 -
环形链表 II
环形链表 II一、题源:142. 环形链表 II问题描述给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递 ,仅仅是为了标识链表的实际情况。不允许修改 链表。二、 思路:1、暴力原创 2022-05-05 22:05:45 · 548 阅读 · 0 评论 -
链表相交题
滑动窗口法一、题源:209. 长度最小的子数组问题描述给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。二、 思路:1、暴力解法最容易想到的方法就是直接对数组进行遍历,然后再从遍历的位置开始查找符合条件的子数组。时间复杂度:O(n2)O(n^2 )O(n2)空间复杂度:O(1)O(1)原创 2022-05-05 21:12:20 · 319 阅读 · 0 评论 -
反转链表题
反转链表一、题源:206. 反转链表问题描述给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。二、 思路:1、头插法将这个链表上的结点依次头插到一个新的链表。为了简化头插代码,在新的链表上引入了虚拟头结点参考代码如下struct ListNode* reverseList(struct ListNode* head){ struct ListNode* returnHead = (struct ListNode*)malloc(sizeof(struct List原创 2022-05-05 10:37:01 · 565 阅读 · 0 评论 -
设计链表(虚拟头节点)
设计链表(虚拟头节点)一、题源:707. 设计链表问题描述设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:get(index): 获取链表中第 index 个节点的值。如果索引无效,则返回 -1 。addAtHead(val): 在链表原创 2022-05-04 21:56:07 · 137 阅读 · 0 评论 -
虚拟头结点
移除列表元素一、题源:203. 移除列表元素问题描述给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。二、 思路:1、直接操作从头节点开始遍历,判断指针指向的下一个节点值等不等于val,等于的话,执行删除下个节点的操作参考代码如下struct ListNode* removeElements(struct ListNode* head, int val){ struct ListNode*原创 2022-05-04 21:41:33 · 741 阅读 · 0 评论 -
数组杂项题目
数组杂项题目1. 两数之和问题描述:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。实现:int* twoSum(int* nums, int numsSize, int target, int* returnSize){ int* result; for(int i =原创 2022-05-04 11:21:49 · 50 阅读 · 0 评论 -
数组二分法
数组二分法一、题源:704. 二分查找问题描述给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。二、 思路:1、暴力解法最容易想到的方法就是直接对数组进行遍历,对比数组元素与target。时间复杂度:O(n)O(n )O(n)空间复杂度:O(1)O(1)O(1)注:暴力法虽然思路简单,容易想到,但是对于这个问题还有时间复杂度更低的方法2、二分法对于有序不重复的数组原创 2022-05-04 10:19:31 · 235 阅读 · 0 评论 -
滑动窗口法
典型例题一、题源:209. 长度最小的子数组问题描述给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。二、 思路:1、暴力解法最容易想到的方法就是直接对数组进行遍历,然后再从遍历的位置开始查找符合条件的子数组。时间复杂度:O(n2)O(n^2 )O(n2)空间复杂度:O(1)O(1)O原创 2022-05-03 18:40:04 · 1096 阅读 · 0 评论 -
双指针法(快慢指针)
快慢指针法移除元素,及其题目变种原创 2022-01-17 18:45:30 · 385 阅读 · 0 评论