代码编织梦想

算法性能分析

数组

链表

哈希表

1、哈希表理论基础

  • hash table :哈希表、散列表
  • 哈希表是根据关键码的值而直接进行访问的数据结构。
  • 常见的三种哈希结构:数组、set(集合)、map(映射)
  • c++中std::unordered_set底层实现为哈希表,std::set 和std::multiset 的底层实现是红黑树,红黑树是一种平衡二叉搜索树,所以key值是有序的,但key不可以修改,改动key值会导致整棵树的错乱,所以只能删除和增加。——对应java中 HashSet、TreeSet
  • c++中std::unordered_map 底层实现为哈希表,std::map 和std::multimap 的底层实现是红黑树。同理,std::map 和std::multimap 的key也是有序的。——对应java中有 HashMap、TreeMap
  • 当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。

2、有效的字母异位词

  • 题目:https://leetcode.cn/problems/valid-anagram/
  • 思路:字母只会有26个,使用数组哈希,以出现过的字符与字符’a’的数值差为索引;遍历第一个字符串中每个字符,对应数组哈希位置++,遍历第二个字符串–,最后遍历数组,如果有不为0的位置返回false;否则为true

3、两个数组的交集

  • 题目:https://leetcode.cn/problems/intersection-of-two-arrays/
  • 思路:输出结果中每个元素是唯一的,不重复、不考虑顺序——HashSet。先遍历数组1,将所有出现过的元素添加到HashSet,再遍历数组2,其中的元素如果在HashSet中出现就添加到结果的集合中,最后记得将结果转为数组返回。

4、快乐数

  • 题目:https://leetcode.cn/problems/happy-number/
  • 思路:替换过程可能会无限循环——将所有出现过的结果添加到HashSet中,只要结果不是目标1就进行操作,每次替换操作之前判断当前要替换的数是否出现过,出现过直接false;没出现过加到HashSet中,进行替换操作——取余、取模操作。

5、两数之和

  • 题目:https://leetcode.cn/problems/two-sum/
  • 思路:遍历每个数的时候,判断target和他的差是否出现过,如果出现过要取出那个数的索引——既要判断存不存在,又要取一个对应的值——HashMap。遍历数组中的每个数,判断target和它的差是不是在 HashMap中,存在取出索引和当前值的索引放到数组返回;否则将当前数放进HashMap,用于后面的数的判断。

6、四数相加Ⅱ

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45430847/article/details/129413912

「leetcode」数组:总结篇!(一文学会leetcode上数组解题)-爱代码爱编程

数组理论基础 数组是非常基础的数据结构,在面试中,考察数组的题目一般在思维上都不难,主要是考察对代码的掌控能力 也就是说,想法很简单,但实现起来 可能就不是那么回事了。 首先要知道数组在内存中的存储方式,这样才能真正理解数组相关的面试题 「数组是存放在连续内存空间上的相同类型数据的集合。」 数组可以方便的通过下表索引的方式获取到下表下对应的数据。

本周小结!(二叉树系列三)-爱代码爱编程

本文 https://github.com/youngyangyang04/leetcode-master 已经收录,里面还有leetcode刷题攻略、各个类型经典题目刷题顺序、思维导图,可以fork到自己仓库,有空看一看一定会有所收获,如果对你有帮助也给一个star支持一下吧! 本周小结 是不是感觉这周过的非常快,好像刚刚做完本周小结,又要

「leetcode」700. 二叉搜索树中的搜索:【递归法】【迭代法】详解-爱代码爱编程

本文 https://github.com/youngyangyang04/leetcode-master 已经收录,里面还有leetcode刷题攻略、各个类型经典题目刷题顺序、思维导图,可以fork到自己仓库,有空看一看一定会有所收获,如果对你有帮助也给一个star支持一下吧! 700.二叉搜索树中的搜索 给定二叉搜索树(BST)的根节点和

「leetcode」406.根据身高重建队列【贪心算法】详解-续集!-爱代码爱编程

本文 https://github.com/youngyangyang04/leetcode-master 已经收录,里面还有leetcode刷题攻略、各个类型经典题目刷题顺序、思维导图,可以fork到自己仓库,有空看一看一定会有所收获,如果对你有帮助也给一个star支持一下吧! 在讲解贪心算法:根据身高重建队列中,我们提到了使用vector(

「代码随想录」 377. 组合总和 Ⅳ 【动态规划】力扣详解!-爱代码爱编程

相信很多小伙伴刷题的时候面对力扣上近两千道题目,感觉无从下手,我花费半年时间整理了Github项目:leetcode刷题攻略。 里面有100多道经典算法题目刷题顺序、配有40w字的详细图解,常用算法模板总结,以及难点视频讲解,按照list一道一道刷就可以了!star支持一波吧! 377. 组合总和 Ⅳ 题目链接:https://leetcod

送卡神算法力作《代码随想录》!-爱代码爱编程

刚开始学习数据结构与算法,或者在力扣(LeetCode)上刷题的读者都有这种困惑——从何学起,先学什么,再学什么。很多人刷题的效率低,主要体现在以下三点: 难以寻找适合自己的题目。找到了不合适现阶段做的题目,结果发现毫无头绪。没有全套的优质题解可以参考。苦恼于没有一套行之有效的刷题顺序? 一堆题解堆在一起,学起来感受不到知识的连贯性和系统性?

[力扣刷题总结](二叉树篇)-爱代码爱编程

文章目录 二叉树理论基础篇1.二叉树的种类2.二叉树的存储方式3.二叉树的遍历方式4.二叉树的定义|||||||||||||||||||||||二叉树的遍历方式||||||||||||||||||||||二叉树的递归遍历二叉树的迭代遍历1. 迭代法中序遍历2.迭代法前序遍历3.迭代法后序遍历144. 二叉树的前序遍历解法1:递归遍历解法2:迭代遍历

送5本新出版的算法书-爱代码爱编程

文末送书 刚开始学习数据结构与算法,或者在力扣(LeetCode)上刷题的读者都有这种困惑——从何学起,先学什么,再学什么。很多人刷题的效率低,主要体现在以下三点: 难以寻找适合自己的题目。找到了不合适现阶段做的题目,结果发现毫无头绪。没有全套的优质题解可以参考。苦恼于没有一套行之有效的刷题顺序? 一堆题解堆在一起,学起来感受不到知识的连贯性和

【菜鸟刷题笔记——持续更新】_lyf_shnu的博客-爱代码爱编程

算法题刷题笔记 【前言】 在读上海某211计算机专硕,把平时刷题的笔记整理了一下发布在这里,很多题目是照着代码随想录的刷题路线做的,包括解题思路等等。本人代码基础挺薄弱的,刷的很多题都比较简单,发在博客上督促自己进步,希望与大家共勉。 回溯(递归) 回溯法解决的问题 组合问题:N个数里面按一定规则找出k个数的集合 一个集合求组合,需要startIn

【java力扣《代码随想录》】第2章程序的性能分析(刷题如果关键的部分直接用库函数就可以解决,建议不要使用库函数)__esther_的博客-爱代码爱编程

第二章 程序的性能分析 代码随想录刷题整理刷题注意关于使用库函数ACM模式代码风格时间复杂度O(n)中 logn无底数空间复杂度 代码随想录刷题整理 《代码随想录》刷题网站 刷题注意 关于使用库函数 如果题目关键的部分直接用库函数就可以解决,建议不要使用库函数。 如果库函数仅仅是 解题过程中的一小部分,并且你已经很清楚这个库函数的内部

代码随想录-031-151.颠倒字符串中的单词_请叫我oscar的博客-爱代码爱编程

目录 前言题目1. 双指针法(在去除空白字符串时)思路(定义变量) 2. 本题思路分析:3. 算法实现4. 算法复杂度5. 算法坑点 前言 在本科毕设结束后,我开始刷卡哥的“代码随想录”,每天一节。

代码随想录二叉树——从中序与后序遍历序列构造二叉树_hdu-五七小卡的博客-爱代码爱编程

题目 根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [9,15,7,20,

算法开篇——数组_likelong965的博客-爱代码爱编程

1、数组理论基础 总结刷题顺序全部来自代码随想录 数组是非常基础的数据结构,在面试中,考察数组的题目一般在思维上都不难,主要是考察对代码的掌控能力 也就是说,想法很简单,但实现起来可能就不是那么回事了。 数组的特点:

leetcode当中的链表刷题题目精选1---移除链表元素-爱代码爱编程

备注:本文有一部分内容参考代码随想录相关文章,侵权请联系作者删除 目录 备注:本文摘自于代码随想录,侵权请联系作者删除 1.解题代码 2.解题思路:                       3.注意点:如何设置一个虚拟的结点 1.解题代码 题目链接:移除链表元素 先上代码: var removeElements = f

代码随想录(day01)-leetcode:704、27-爱代码爱编程

代码随想录:day01 1. 数组理论基础2. 【704】:二分查找方法一:左闭右闭方法二:左闭右开 3. 【27】:移除元素方法一:暴力解法方法二:双指针法(快慢指针法) 4. 总结 1. 数组理论基

代码随想录算法训练营第一天|数组理论基础、704 二分查找、27 移除元素-爱代码爱编程

代码随想录算法训练营第一天|数组理论基础、704 二分查找、27 移除元素 1.数组理论基础 文章链接:https://programmercarl.com/%E6%95%B0%E7%BB%84%E7%90%86%E8%

代码随想录训练营第一天 | 数组_if (target < nums[0] || target > nums[nums.length -爱代码爱编程

基础知识 数组是存放在连续内存空间上的相同类型数据的集合 数组下标从0开始数组内存空间的地址是连续的 正因为是连续的,我们在增加或者删除的时候就不可避免的移动其他元素。  数组的元素是不能删的,只能覆盖 二维数组不同的编程语言的内存管理是不一样的  704.二分查找 思路: 前提条件:有序数组,无重复元素注意:区

代码随想录算法训练营第一天 | 704. 二分查找、27. 移除元素、35. 搜索插入位置-爱代码爱编程

学习目标 复习数组理论基础完成二分查找和移除元素相关题目 学习内容 数组理论基础 文章链接:数组理论基础 那么二维数组在内存的空间地址是连续的么? 不同编程语言的内存管理是不一样的,以C++为例,在C++