哈希表
⚗哈希表⚗转自:🔥【github】
1.两数之和
205.同构字符串
217.存在重复元素
242.有效的字母异位词
347.前K个高频元素
409.最长回文串
451.根据字符出现频率排序
594.最长和谐子序列
C++哈希表的基本使用
查找元素是否存在1234若有unordered_map<int, int> mp;查找x是否在map中方法1: 若存在 mp.find(x)!=mp.end();方法2: 若存在 mp.count(x)!=0;
遍历map12345 unordered_map<key,T>::iterator it; (*it).first; (*it).second for(unordered_map<key,T>::iterator iter=mp.begin();iter!=mp.end();iter++) cout<<"key value is"<<iter->first&l ...
字符串
转自:🔥【github】
⚡️字符串⚡️
242.有效的字母异位词
409.最长回文串
205.同构字符串
647.回文子串
9.回文数
696.计数二进制子串
滑动窗口思想(双指针进阶版)
76.最小覆盖子串
有效的字母异位词 Leetcode
示例:12输入: s = "anagram", t = "nagaram"输出: true
哈希表1234567891011121314151617181920 //构建哈希数组,用索引0~26代表a~z bool isAnagram(string s, string t) { if(s.length()!=t.length())return false; //普通数组必须提前分配空间,或者用动态数组 int hashArr[26]={0}; for(int i=0;i<s.length();++i){ hashArr[ ...
力扣周赛
力扣周赛
第200场周赛
5475.统计好三元组
5476.找出数组游戏的赢家
5477.排布二进制网格的最少交换次数
5475.统计好三元组leetcode给你一个整数数组 arr ,以及 a、b 、c 三个整数。请你统计其中好三元组的数量。如果三元组 (arr[i], arr[j], arr[k]) 满足下列全部条件,则认为它是一个 好三元组 。123450 <= i < j < k < arr.length|arr[i] - arr[j]| <= a|arr[j] - arr[k]| <= b|arr[i] - arr[k]| <= c其中 |x| 表示 x 的绝对值。返回 好三元组的数量 。
解题思路
暴力就完事了,在i < j < k统计满足条件的次数12345678910111213141516int countGoodTriplets(vector<int>& arr, int a, int b, int c) { int n = arr.size(); int cnt = ...
动态规划
🙈动态规划🙈转自:🔥【github】
==========
198.打家劫舍
213.打家劫舍II
337.打家劫舍III
矩阵 (10%)
120.三角形最小路径和
64.最小路径和
62.不同路径
63.不同路径II
序列(40%)
70.爬楼梯
55.跳跃游戏
45.跳跃游戏II
132.分割回文串II
300.最长上升子序列
139.单词拆分
322.零钱兑换
双序列(40%)
1143.最长公共子序列
72.编辑距离
5.最长回文子串
爬楼梯 Leetcode 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
解题思路
到达第n阶台阶有两种方式,一个是在第n-1个台阶处+1阶或在n-2个台阶处+2阶
建立一个dp数组,记录到达每一层时的所有方法总数
所以到达第n个台阶的方法与到底第n-1和n-2个台阶相关,dp[n]=dp[n-1]+dp[n-2]123456789int climbStairs(int n) { vector< ...
🎨剑指offer🎨
🎨剑指offer🎨
1.数组中重复的数字
2.二维数组中的查找
3.替换空格
4.从尾到头打印链表
5.重建二叉树
6.用两个栈实现队列
7.斐波那契数列
8.青蛙跳台阶问题
9.旋转数组的最小数字
10.矩阵中的路径
11.机器人的运动范围
12.剪绳子
13.剪绳子II
14.二进制中1的个数
15.数值的整数次方
16.打印从1到最大的n位数
17.删除链表的节点
18.调整数组顺序使奇数位于偶数前面
19.链表中倒数第k个节点
20.反转链表
21.合并两个排序的链表
22.树的子结构
23.二叉树的镜像
24.对称的二叉树
25.顺时针打印矩阵
26.包含min函数的栈
27.栈的压入、弹出序列
28.从上到下打印二叉树
29.从上到下打印二叉树II
30.从上到下打印二叉树III
31.二叉搜索树的后序遍历序列
32.二叉树中和为某一值的路径
33.复杂链表的复制
34.二叉搜索树与双向链表
35.序列化二叉树
36.字符串的排列
37.数组中出现次数超过一半的数字
38.最小的k个数
39.连续子数组的最大和
40.连续子数组的最大和
41.1~n整数中1出现的次数 ...
位运算
🍻位运算🍻转自:🔥【github】
136.只出现一次的数字
137.只出现一次的数字II
260.只出现一次的数字III
191.位1的个数
338.比特位计数
190.颠倒二进制位
只出现一次的数字leetcode给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
解题思路
一种方法是先排序,因为两个相同的数一定在一起,两个数一起遍历,当发现不同的时候便找到结果
当遍历到结尾时还没有发现则说明那一个数就出现在最后一位。123456789int singleNumber(vector<int>& nums) { sort(nums.begin(), nums.end()); for (int i = 0; i + 2 < nums.size(); i+=2) { if (nums[i] != nums[i + 1]) { return nums[i]; } } retu ...
二分法
🐧二分法🐧转自:🔥【github】
ps:二分法一定要牢记3个经常用的模板,注意边界检测。
34.在排序数组中查找元素的第一个和最后一个位置
69.x的平方根
153.寻找旋转排序数组中的最小值
167.两数之和II-输入有序数组
278.第一个错误的版本
744.寻找比目标字母大的最小字母
二分法的3个模板必须记住 3个模板代码区别很小,主要在于找到target之后指针的处理,建议比较target时的大于小于等于三种情况都写出来进行讨论,不易搞混淆,还要牢记左右指针的越界时的处理。while循环里时<=符号,while循环结束后right指针在前,left指针在后。
寻找一个数(基本的二分搜索)
寻找左侧边界的二分搜索(检查 left 越界的情况)
寻找右侧边界的二分搜索(检查 right越界的情况)
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253int binary_search(int ...
STL实现—C++STL简介
C++ STL简介一、STL介绍本次课程主要面对有一定 c++ 基础(了解基本语法,熟悉常用特性)的 ,想要学习 c++ 更深入特性 ,掌握 c++ 强大标准库的同学 。通过本次课程,你将学习到 c++ template ,异常处理 ,并回顾数据库的部分知识 ,初步掌握 STL 开发 ,避免重复制造轮子。
将学习到的知识点:
模板编程
泛型编程
STL 常用组件
lambda 表达式
异常处理
内存处理
部分数据结构
部分算法
提示:本课程所有代码至少需要开启 -std=c++11 选项来支持 C++11 相关特性,在介绍 C++14 特性时的相关代码需要开启 -std=c++14 的编译选项,例如:
12+ g++ main.cpp -std=c++11+ g++ main.cpp -std=c++14
如果你没有使用过 STL,那么你是不爱 c++ 的,STL 的原名是“Standard Template Library”,翻译过来就是标准模板库。STL 是 C++ 标准库的一个重要组成部分,STL 实现了常用的数据结构和算法 ,蕴含其间的泛型编程和代码复用的思想深刻 ...
STL实现—迭代器
迭代器
一、实验内容本节实验我们将为大家讲解迭代器,主要介绍 5 种常见迭代器:输入、输出迭代器,前向逆向迭代器,双向迭代器和随机迭代器。主要内容包括各自的构造方法和操作方法。
1.1 知识点
输出迭代器
输入迭代器
前向迭代器
双向迭代器
随机迭代器
迭代器辅助函数
1.2 实验环境
g++
ubuntu 16.04
1.3 代码获取可以通过以下链接获取本课程的源码内容,本次实验内容主要包含在文件Iterator.h。
123//获取代码wget https://labfile.oss.aliyuncs.com/courses/1166/mySTL.zipunzip -q mySTL.zip -d ./Code/
二、迭代器详述迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。迭代器修改了常规指针的接口,所谓迭代器是一种概念上的抽象:那些行为上像迭代器的东西都可以叫做迭代器。然而迭代器有很多不同的能力,它可以把抽象容器和通用算法有机的统一起来。迭代器基本分为五种,输入输出迭代器,前向逆向迭代器,双向迭代 ...
迭代(顿开)
正则表达式在很多技术领域(如:自然语言处理,数据存储等),正则表达式可以很方便的提取我们想要的信息,所以正则表达式是一个很重要的知识点!
一,概念正则表达式(Regular Expression)是用于描述一组字符串特征的模式,用来匹配特定的字符串。通过特殊字符+普通字符来进行模式描述,从而达到文本匹配目的工具。
正则表达式目前被集成到了各种文本编辑器/文本处理工具当中
二、应用场景(1)验证:表单提交时,进行用户名密码的验证。
(2)查找:从大量信息中快速提取指定内容,在一批url中,查找指定url。
(3)替换:将指定格式的文本进行正则匹配查找,找到之后进行特定替换。
三、基本要素(1)字符类
(2)数量限定符
(3)位置限定符
(4)特殊符号
注意:正则表达式基本是与语言无关的,我们可以结合语言/工具与正则表达式进行文本处理
1,字符类
字符
含义
举例
.
匹配任意一个字符
adc.可以匹配abcd或abc6等
[]
匹配括号中的任意一个字符
[abc]d可以匹配ad,bd,cd
-
在[]内表示字符范围
[0-9a-zA-Z]可以匹配任意大写、小写和数字 ...