算法笔试
文章平均质量分 71
算法
weixin_44921006
这个作者很懒,什么都没留下…
展开
-
Leetcode动态规划
509. 斐波那契数 斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) = 0,F(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n > 1 给你 n ,请计算 F(n) 。 70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 746. 使用最小花费爬楼梯原创 2021-07-07 16:03:20 · 54 阅读 · 0 评论 -
Leetcode回溯算法
回溯模板 void backtracking(参数) { if (终止条件) { 存放结果; return; } for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) { 处理节点; backtracking(路径,选择列表); // 递归 回溯,撤销处理结果 } } 77. 组合 给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。 216. 组合总和原创 2021-07-05 15:50:04 · 62 阅读 · 0 评论 -
Leetcode二叉树
二叉树的递归遍历 前序遍历 class Solution { public: void traversal(TreeNode* cur, vector<int>& vec) { if (cur == NULL) return; vec.push_back(cur->val); // 中 traversal(cur->left, vec); // 左 traversal(cur->right,原创 2021-07-01 11:11:42 · 85 阅读 · 0 评论 -
Leetcode栈和队列
232. 用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元素 int peek() 返回队列开头的元素 boolean empty() 如果队列为空,返回 true ;否则,返回 false 说明: 你只能使用标准的栈操作 —— 也就是只有 push to top, peek/pop from t原创 2021-06-28 20:13:39 · 48 阅读 · 0 评论 -
Leetcode双指针算法
双指针法基本都是应用在数组,字符串与链表的题目上 27. 移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 解答 class Solution { public: int removeElement(vector<int>& nums, int val) {原创 2021-06-25 10:49:55 · 44 阅读 · 0 评论 -
KMP算法
构造next数组(回退数组) 我们定义一个函数getNext来构建next数组,函数参数为指向next数组的指针,和一个字符串。 代码如下: void getNext(int* next, const string& s) 构造next数组其实就是计算模式串s,前缀表的过程。 主要有如下三步: 初始化 处理前后缀不相同的情况 处理前后缀相同的情况 详细步骤如下: 1. 初始化: 定义两个指针i和j,j指向前缀起始位置,i指向后缀起始位置。 然后还要对next数组进行初始化赋值,如下: int原创 2021-06-24 17:06:52 · 46 阅读 · 0 评论 -
Leetcode字符串
344. 反转字符串 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。 解答 class Solution { public: void reverseString(vector<char>& s) { for (int i = 0, j = s.size(原创 2021-06-24 17:06:42 · 55 阅读 · 0 评论 -
Leetcode哈希表
判断是否重复出现时可以使用哈希表 242. 有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 解答 class Solution { public: bool isAnagram(string s, string t) { if(s.length() != t.length()) return false; vector<int> record(26, 0); for(char c : s)原创 2021-06-22 15:39:44 · 44 阅读 · 0 评论 -
Leetcode链表
学会使用虚拟头节点 203. 移除链表元素 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。 解答 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNo原创 2021-06-21 17:24:21 · 49 阅读 · 0 评论 -
Leetcode数组
704. 二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 解答 时间复杂度 O(log2n) class Solution { public: int search(vector<int>& nums, int target) { int n = nums.size(); int l = 0, r = n - 1;原创 2021-06-21 11:12:44 · 36 阅读 · 0 评论 -
01背包/完全背包问题
01背包/完全背包问题 416. 分割等和子集 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 示例 1: 输入:nums = [1,5,11,5] 输出:true 解释:数组可以分割成 [1, 5, 5] 和 [11] 。 示例 2: 输入:nums = [1,2,3,5] 输出:false 解释:数组不能分割成两个元素和相等的子集。 解答 class Solution { public: bool canPartition原创 2021-06-18 14:40:41 · 84 阅读 · 0 评论