
算法基础
算法基础
Jan___
这个作者很懒,什么都没留下…
展开
-
md5的C语言实现,简单记录
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <stdint.h>#include <time.h>#define LEFTSHIFT(x,c) (((x) << (c)) | ((x) >> (32-(c))))const uint32_t k[64] = {0xd76aa478, 0xe8c7b756, 0x242070原创 2021-05-05 21:00:33 · 221 阅读 · 0 评论 -
(动态规划)最长回文子串
最长回文子串给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad” 输出: “bab” 注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd” 输出: “bb”1、暴力法暴力法将遍历子串集合,判断每个子串是否回文。复杂度分析时间复杂度:O(N3),对于长度N的字符串,其子串总数是N(N-...原创 2020-05-04 14:54:05 · 682 阅读 · 0 评论 -
(动态规划)01背包
分割等和子集给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].示例2:输入: [1, 2, 3, 5]输出: false解释: 数组不能分割成两个元素和相等的子集....原创 2020-09-06 13:11:52 · 343 阅读 · 0 评论 -
(滑动窗口)最长无重复字符串的长度
3. 无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3: 输入: “pwwkew” 输出: 3 解释: 因...原创 2020-05-01 21:29:46 · 223 阅读 · 0 评论 -
(动态规划)10. 正则表达式匹配
class Solution {public: bool isMatch(string s,string p){ if (s.size() == 0 && p.size() == 0) { return true; // 两个空字符串能够匹配 } else if ( p.size() == 0){ ...原创 2020-05-06 15:10:56 · 581 阅读 · 0 评论 -
(优先队列)23. 合并K个排序链表
21.合并2个排序链表在解决「合并K个排序链表」这个问题之前,我们先来看一个更简单的问题:如何合并两个有序链表?假设链表 a 和 b 的长度都是 n,如何在 O(n) 的时间代价以及 O(1) 的空间代价完成合并?这个问题在面试中常常出现,为了达到空间代价是 O(1),我们的宗旨是「原地调整链表元素的 next 指针完成合并」。class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {原创 2020-05-09 20:56:30 · 223 阅读 · 0 评论 -
牛客编程入门第1题
一直以来都有一个疑惑,在牛客上编程,要不要写main函数?输入输出怎么处理?偶尔看到一个编程题,刚好可以当做参考!题目:编写函数reverse,将val(32位无符号整数)的二进制位反序。比如,如果val的二进制表示为1011000011111111,反序后val的二进制表示为1111111100001101。输入描述:16进制的一个无符号整数,例0xff输出描述:16进制的一个无符号整数,例0xff#include <stdio.h>#include <string.h&原创 2020-06-20 11:18:44 · 408 阅读 · 0 评论 -
6. Z 字形变换
将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。请你实现这个将字符串进行指定行数变换的函数:s...原创 2020-05-04 18:31:15 · 187 阅读 · 0 评论 -
二分搜索--寻找两个有序数组的中位数
一、二分搜索顾名思义,二分搜索就是将1个区间分割成2个区间,再对这2个区间进行计算。常见的二分搜索区间是左闭右开的形式,nums[0:length)1.1、算法框架int binarySearch(vector<int> nums, int target) { int left = 0, right = nums.size(); while(left < ...原创 2020-05-02 16:44:36 · 787 阅读 · 0 评论 -
复习:AVL树/红黑树/B树/B+树原理及应用
一、AVL树二叉查找树的一个局限性就是有可能退化成一个链表,这种情况下二叉查找树的效率就会急剧下降变成0(n)。而AVL树可以很好地解决BST的这种困境。1、什么是AVL树任何两个子树的高度差最大是1,这样的二叉树叫做AVL树。2、AVL树的特点(1)AVL的左右子树高度之差的绝对值不超过1。(2)树中的每个左子树和右子树都是AVL。(3)每个节点都有一个平衡因子,任一节点的平衡因子...原创 2020-03-30 23:05:09 · 414 阅读 · 0 评论 -
复习:红黑树,是一种二叉查找树,是接近平衡的。
复习二叉查找树的一般性质:1、root.left.key < root.key <= root.right.key2、查找、插入、删除等操作,时间复杂度为O(lgn)。因为,一棵由n个结点,随机构造的二叉查找树的高度为lgn,所以顺理成章,一般操作的执行时间为O(lgn)。3、二叉查找树的特殊情况:一棵具有n个结点的线性链,则此些操作最坏情况运行时间为O(n)。而红黑树,能保证...原创 2020-03-28 23:30:39 · 171 阅读 · 0 评论 -
复习:堆、栈
一、内存相关的堆、栈首先,讨论的堆和栈指的是内存中的“堆区”和“栈区”。1、C语言的内存模型分为5个区:栈区、堆区、静态区、常量区、代码区。每个区存储的内容如下:栈区:存放函数的参数值、局部变量等,由编译器自动分配和释放,通常在函数执行完后就释放了,其操作方式类似于数据结构中的栈。栈内存分配运算内置于CPU的指令集,效率很高,但是分配的内存量有限,比如iOS中栈区的大小是2M。堆区...原创 2020-03-27 22:14:28 · 751 阅读 · 0 评论 -
排序算法
冒泡排序图解过程2层 for 循环的起始点与终止点是什么?冒泡时总是比较哪两个数?优化冒泡的flag有什么作用?class Solution(object): def sortArray(self, nums): """ :type nums: List[int] :rtype: List[int] """ ...原创 2020-03-27 00:24:51 · 228 阅读 · 0 评论 -
KMP算法--Sunday算法--笔记
参考视频:bilibili参考博客:KMPvoid Getnext(int next[],String t){ //k表前缀,j表后缀。 //随着一次次的匹配成功,后缀的长度越来越长,1->length //前缀也是随着一次次匹配成功长度慢慢加长1,2,3.. //前缀总是短的,类似一些小片段,一旦匹配不成功,咔嚓,当前的前缀片段就得换成别的片段重新匹配 //换成哪个前缀片段...原创 2020-02-14 17:28:20 · 349 阅读 · 0 评论 -
遍历二叉树
遍历二叉树的顺序:前序遍历、中序遍历、后序遍历、层序遍历二叉树节点的数据类型:结点二叉树的数据类型:结点数组typedef struct BiTreeNode { char data; struct BiTreeNode * leftBTNode; //递归定义,只能用指针类型,变量类型编译不过 struct BiTreeNode * rightBTNode; //无法用别名去定义-...原创 2020-03-04 16:54:36 · 178 阅读 · 0 评论