
算法
文章平均质量分 67
总结算法和加密相关的代码实现,全面学习常见算法和加密知识。
罗汉爷
每一个不曾起舞的日子,都是对生命的辜负!
展开
-
数据结构与算法07-图
图是一种善于处理关系型数据的数据结构,使用它可以很轻松地表示数据之间是如何关联的。图的实现形式有很多,最简单的方法之一就是用散列表。因为从散列表里查找一个键所对应的值只需要 1 步,所以查找 Alice 的朋友能以 O(1)的时间复杂度完成,如下所示。原创 2024-06-05 16:14:45 · 353 阅读 · 0 评论 -
数据结构与算法06-树结构(二叉树)
"""二叉树节点的定义。该类用于构建二叉树的节点结构,每个节点包含一个值(val)、左子节点(left)和右子节点(right)。val: 节点的值,默认为0。left: 左子节点,默认为None。right: 右子节点,默认为None。"""二叉树是一种强大的基于结点的数据结构,它既能维持元素的顺序,又能快速地查找、插入和删除。尽管比它的近亲链表更为复杂,但它更有用。值得一提的是,树形的数据结构除了二叉树以外还有很多种,包括堆、B 树、红黑树、2-3-4树等。它们也各有自己适用的场景。原创 2024-06-03 15:58:48 · 810 阅读 · 1 评论 -
数据结构与算法05-链表
你学会了在特定情况下使用链表来改善性能。后面还会介绍更复杂的基于结点的数据结构,它们更常用,并且对性能的提升更大。原创 2024-06-02 21:14:10 · 642 阅读 · 0 评论 -
数据结构与算法04-栈和队列
掌握了栈和队列,就解锁出了下一个目标:学习基于栈的递归。递归也是其他高级算法的基础,我们将会在本书余下的部分讲解它们。原创 2024-06-02 15:51:02 · 460 阅读 · 0 评论 -
数据结构与算法03-散列表(哈希表)
散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在存储器存储位置的数据结构。也就是说,它通过计算出一个键值的函数,将所需查询的数据映射到表中一个位置来让人访问,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。大多数编程语言都自带散列表这种能够快速读取的数据结构。但在不同的语言中,它有不同的名字,除了散列表,还有散列、映射、散列映射、字典、关联数组。从散列表里读取数据只需要 O(1),因为其过程所花的时间是恒定的。原创 2024-06-02 15:04:04 · 390 阅读 · 0 评论 -
数据结构与算法02-排序算法
懂得区分最好、平均、最坏情况,是为当前场景选择最优算法以及给现有算法调优以适应环境变化的关键。记住,虽然为最坏情况做好准备十分重要,但大部分时间我们面对的是平均情况。原创 2024-05-31 15:49:18 · 992 阅读 · 2 评论 -
数据结构与算法01-入门
牢记:世界上并没有哪种适用于所有场景的数据结构或者算法。你不能因为有序数组能使用二分查找就永远只用有序数组。在经常插入而很少查找的情况下,显然插入迅速的常规数组会是更好的选择。原创 2024-05-30 21:48:35 · 397 阅读 · 0 评论 -
【快速排序】采用D&C(divide and conquer)方法求解
介绍快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。平均状况下,排序 n 个项目要 Ο(nlogn) 次比较,在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。主要步骤:1、从数列中挑出一个元素,称为 “基准”(pivot);2、重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partiti原创 2021-12-01 12:31:01 · 426 阅读 · 0 评论 -
【最大公约数】欧几里得算法
介绍本篇介绍如何求2个整数的最大公约数,按《算法图解》中的思路也就是给你一块矩形土地,如何将其等分成面积最大的若干个方形?欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。代码实现# 计算2个数最大公约数,欧几里得、辗转相除法# 此处假设a>=bdef gcd(a, b): if b == 0: return a else: re原创 2021-12-01 10:20:15 · 1001 阅读 · 0 评论 -
图文并茂之AES加密
本文改编自:http://www.sohu.com/a/198681357_505794假设有一个发送方在向接收方发送消息。如果没有任何加密算法,接收方发送的是一个明文消息:“我是小灰”如果消息被中间人截获到,即使中间人无法篡改消息,也可以窥探到消息的内容,从而暴露了通信双方的私密。因此我们不再直接传送明文,而改用对称加密的方式传输密文,画风就变成了下面这样:...原创 2019-02-14 17:25:00 · 2711 阅读 · 0 评论 -
js与java使用AES加密算法实现前后端加密解密
AES加密算法入门:https://blog.youkuaiyun.com/IndexMan/article/details/87284833第三方crypto.js下载地址:https://download.youkuaiyun.com/download/indexman/10957355 项目组对前端发送的关键请求参数有安全要求,不能是明文的。这就涉及到前端加密,后端解密工作。 首先是前端&...原创 2019-02-14 16:22:41 · 2210 阅读 · 1 评论 -
【Map】【List】【数组】获得两个数组的交集
给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2,2]示例 2:输入: nums1 = [1,2,2,1], nums2 = [2]输出: [2]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。 我们可以不考虑输出结果的顺序。package com...原创 2018-10-22 15:17:08 · 1003 阅读 · 0 评论 -
【双指针】从排序数组中删除重复项
题目来自leetcode:方法:双指针法给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。 复杂度分析 时间复杂度:O(n)O(n), 假设数组的长度是 nn,那么 ii 和 jj 分别最多遍历 nn 步。 空间复杂度:O(1)O(1)。 ...原创 2018-10-10 19:04:03 · 628 阅读 · 0 评论 -
【数组】只出现一次的数字
我用双循环加标记位实现的,效率不高。大家凑活看。package com.dylan.practice.leetcode;/** * 只出现一次的数字 * * 输入: [2,2,1] * 输出: 1 * * @authorxusucheng * @create 2018-10-17 **/public class SingleNumber { publi...原创 2018-10-17 09:24:40 · 316 阅读 · 1 评论 -
【贪心算法】买卖股票的最佳时机
package com.dylan.practice.leetcode;/** * 买卖股票的最佳时机(找数组的高低谷) * 输入: [7,1,5,3,6,4] * 输出: 7 * 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 * 随后,在第 4 天(股票价格 = 3)的时候买入,在第...原创 2018-10-11 15:02:55 · 1850 阅读 · 1 评论