随笔分类 - 数据结构与算法
摘要:力扣链接 N皇后是经典的回溯算法问题,去年刚学习算法时就已写过C++版,现在记录下Java版本。 (注释留着下次回顾时再补充吧) class Solution { public List<List<String>> solveNQueens(int n) { char[][] board = new
阅读全文
摘要:在一个公钥加密系统中,每个参与者都有一把公钥和一把私钥。密钥都是一段信息,在RSA加密系统中,每个密钥由一对整数组成。以Alice和Bob为例,其公钥和私钥分别记为 Pa Sa, Pb Sb。 每个参与者均自己参与创建公钥和私钥。私钥需要保密,公钥可以对任何人透露,甚至可以公之于众。事实上,假设每个
阅读全文
摘要:散列表是普通数组概念的推广,由下标与值的映射提高为键值分别与下标的映射。 数组中查找元素需对下标遍历来查询值,复杂度通常是非常数。而散列表由键到下标是常数级,因此散列表是典型的空间换时间的数据结构。 由键到下标的映射有不同的方法,即哈希函数,可能会造成哈希冲突。 一、直接寻址表 当全域比较小时,关键
阅读全文
摘要:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 示例 1: 输入: [7,5,6,4]输出: 5 限制: 0 <= 数组长度 <= 50000 线段树的思路还没看,先写归并排序 将大数组递归至小数组开始合并,在合并left
阅读全文
摘要:图是由顶点和边构成的抽象网络。在无向图中,连通且不含圈的图,即不能形成环,称为树。n个顶点,图的最大边数为n-1+n-2+... 而树恒为n-1。 在各大城市中建设通信网络,如下图所示,每个圆圈代表一座城市,而边上的数字代表了建立通信连接的价格。那么,请问怎样才能以最小的价格使各大城市能直接或者间接
阅读全文
摘要:《算法竞赛入门经典》 10.1 数论初步学习总结 这部分内容在信息安全数学基础这门课里都有涉及,不过我没听课就是了,顺便补充代码部分。 一、欧几里得算法和唯一分解定理 Euclid Algorithm 用来求两整数的最大公因数,一言概之: 被除数与除数的最大公约数为除数与余数的最大公约数,当除数为零
阅读全文
摘要:LeetCode 5482 该题是双周赛试题,所以编号可能搜不到。要开学了,忙着复习考试,高数花了三四天学完,虽然一个学期没听,不过寒假学的好,所以问题不大,稍微看看了级数和复变函数的题,应该问题不大。 现在在看电工电子,电路部分快结束了,模电一点都没学,不知道要啃多久。物理的话寒假学了部分,电磁学
阅读全文
摘要:LeetCode5 给定一个字符串 s,找到 s 中最长的回文子串。 一、暴力解法 最暴力的解法是判断s的每个子串是否为回文串,复杂度为立方级,在此不做实现。 这里实现的是中心扩散的思想,即利用回文串中心对称的性质,遍历s的每个字符,其作为回文串的中心,依次向两边扩展更新当前回文串,若超过res则更
阅读全文
摘要:LeetCode 剑指offer62 0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。 这个问题是以弗拉维奥·约瑟夫命名的,他是1世纪的一名犹太历史学家。他在自己的日记中写道,他和他的40个战友被罗马军队包围在洞中。他们讨论是自
阅读全文
摘要:LeetCode718 给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。 输入: A: [1,2,3,2,1]B: [3,2,1,4,7]输出:3解释:长度最长的公共子数组是 [3, 2, 1] 。 提示: 1 <= len(A), len(B) <= 10000 <=
阅读全文
摘要:算法竞赛入门经典第二版 P234 关于字符编码问题 ,二叉树可以解决前缀冲突,左右节点分别为0或1 ,因此每个叶子节点都可以表示一个字符,且01字符串不会重复。 但是最优字符编码需要考虑频率,也就是权值,如果用等长编码表示(等长不会产生前缀冲突),则权值小的字符会占用额外编码。 因此理想状态应该是频
阅读全文
摘要:LeetCode201 视频解析 给定范围 [m, n],其中 0 ⇐ m ⇐ n ⇐ 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。 示例 1: 输入: [5,7] 输出: 4 示例 2: 输入: [0,1] 输出: 0 该题在于找出m和n的公共前缀,在按n的位数往
阅读全文
摘要:堆排序 参考链接 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。 由于堆只能保证根节点最大或最小,对左右节点的顺序无要求,因此需要多次重构堆,取出根节点并舍弃。 对二叉树层序遍历依次编号,对应着数组的
阅读全文
摘要:快速排序有很多优化版本,在此仅列出最基本的方法。参见链接 /* This function takes last element as pivot, places the pivot element at its correct position in sorted array, and place
阅读全文
摘要:归并排序: 先分治后归并。 //对于归并时的临时存储数组,可以全局使用一个,而不必每次归并都重新申请 /* Java program for Merge Sort */ class MergeSort { // Merges two subarrays of arr[]. // First suba
阅读全文
摘要:LeetCode商城的鼠标垫好心动,争取暑假努力刷题搞到手。 此题并非题1两数之和。而是用位运算实现计算机加法。 LeetCode371 不使用运算符 + 和 - ,计算两整数 a 、b 之和。 无论是十进制还是二进制,加法都可以看成无进位加法与进位加法的和
阅读全文
摘要:插入排序: 将待排序数组分为有序数组和无序数组,遍历无序数组依次插入到有序数组中。重点在于将元素与无序数组比较时,在找到插入位置前依次将无序数组后移,来为元素腾出位置。 void insertSort(int[] nums) { for (int i = 1; i < nums.length; i+
阅读全文
摘要:冒泡排序老算法了,这次系统学习排序算法重温一遍,再加上flag优化一下。时间复杂度O(n2) void bubbleSort(int[] nums) { for (int i = 0; i < nums.length - 1; i++) { boolean flag = false; for (in
阅读全文
摘要:该文逐次讲述二数之和,三数之和,四数之和。 一,二数之和 LeetCode01 作为力扣第一题,应该很是经典了。回头翻两个月前做的解法,是暴力解法,当时还没学习哈希表,现在做个补充吧。 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的
阅读全文
摘要:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。LeetCode3 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所
阅读全文

浙公网安备 33010602011771号