编程题、算法 - 个人积累总结
编程题、算法 - 个人积累 总结
wa_c777
知行合一
展开
-
12.leetcode-33. Search in Rotated Sorted Array(数组、二分法)
题目:给你一个升序排列的整数数组 nums ,和一个整数 target 。假设按照升序排序的数组在预先未知的某个点上进行了旋转。(例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请你在数组中搜索 target ,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。示例 1:输入:nums = [4,5,6,7,0,1,2], target = 0输出:4示例 2:输入:nums = [4,5,6,7,0,1,2], t.原创 2020-11-23 17:03:21 · 93 阅读 · 0 评论 -
11.leetcode-22. Generate Parentheses(回溯法)
题目:Generate Parentheses括号生成数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]题目分析:由于我们需要求解所有的可能, 因此回溯就不难想到。回溯的思路和写法相对比较固定,并且回溯的优化手段大多是剪枝。不难想到, 如果左括号的数目小于右括号,我们可以提前退出,这就.原创 2020-11-13 18:58:30 · 185 阅读 · 0 评论 -
10.leetcode-19. Remove Nth Node From End of List(链表、双指针)
题目:删除链表的倒数第N个节点给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?解题分析:这里我们可以使用双指针算法,不妨设为指针 A 和 指针 B。指针 A 先移动 n 次, 指针 B 再开始移动。当 A 到.原创 2020-11-13 18:19:08 · 103 阅读 · 0 评论 -
09.leetcode-17 Letter Combinations of a Phone Number(回溯法)
题目:Letter Combinations of a Phone NumberGiven a string containing digits from2-9inclusive, return all possible letter combinations that the number could represent. Return the answer inany order.A mapping of digit to letters (just like on the tele...原创 2020-11-13 17:07:12 · 109 阅读 · 0 评论 -
06方法二.leetcode-05Longest Palindromic Substring(回文、动态规划)
这个最长子回文问题,有很多种解法,这里还是再加上动态规划的解法吧。题目:求字符串的最大会问子串;Given a strings, returnthe longest palindromic substringins.给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2:输入: "cbbd" 输出: "bb"解题分析:动态规...原创 2020-11-13 11:39:12 · 84 阅读 · 0 评论 -
IntroToAlgo 01 - 分治法、动态规划、
此篇博客起,开始不断温习本科到现在学过的所有算法,积累总结,就会有新的感悟,并不断学习新的算法;1、分治法分治法的实例:归并排序,时间复杂度O(nlogn)分治法分析:归并排序算法分析:2、动态规划首先,注意动态规划"programming"指的是:一种表格法;动态规划用于解决子问题重叠情况,对每个子问题只求解一次,而分治法会反复求解那些公共子问题;动态规划经典例题有:钢条切割、矩阵连乘法、最长公共子序列、最优二叉树;.原创 2020-11-13 10:27:57 · 107 阅读 · 0 评论 -
08.leetcode-15 3Sum(排序、双指针、分治)
题目:3数之和;Given an arraynumsofnintegers, are there elementsa,b,cinnumssuch thata+b+c= 0? Find all unique triplets in the array which gives the sum of zero.Notice that the solution set must not contain duplicate triplets.给你一个包含 n 个整数的...原创 2020-11-12 19:38:25 · 88 阅读 · 0 评论 -
07.leetcode-11 Container With Most Water(双指针)
题目:Givennnon-negative integersa1, a2, ..., an, where each represents a point at coordinate(i, ai).nvertical lines are drawn such that the two endpoints of the lineiis at(i, ai)and(i, 0). Find two lines, which, together with the x-axis forms ...原创 2020-11-12 17:52:13 · 122 阅读 · 1 评论 -
06.leetcode-05Longest Palindromic Substring(回文)
题目:求字符串的最大会问子串;Given a strings, returnthe longest palindromic substringins.给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2:输入: "cbbd" 输出: "bb"解题分析:这个题好多方法;有最基础的"从当前往两边扩散"、动态规划、Manache...原创 2020-11-12 17:01:44 · 94 阅读 · 0 评论 -
05.leetcode-04Median of Two Sorted Arrays(二分查找)
题目:Median of Two Sorted Arrays寻找两个正序数组的中位数。给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则.原创 2020-11-12 08:57:18 · 121 阅读 · 0 评论 -
04.leetcode-03.Longest Substring Without Repeating Characters(滑动窗口)
题目:无重复字符的最长子串Given a strings, find the length of thelongest substringwithout repeating characters.给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",...原创 2020-11-10 17:31:56 · 148 阅读 · 0 评论 -
03.leetcode-02.Add Two Numbers(链表)
题目:02.Add Two NumbersYou are given twonon-emptylinked lists representing two non-negative integers. The digits are stored inreverse order, and each of their nodes contains a single digit. Add the two numbers and return the sumas a linked list....原创 2020-11-10 16:31:54 · 84 阅读 · 0 评论 -
02.leetcode-387.First Unique Character in a String
题目:387.字符串中的第一个唯一字符Given a string, find the first non-repeating character in it and return its index. If it doesn't exist, return -1.找出字符串中的第一个唯一(不重复)字符;不存子啊返回-1分析:暴力破解时间复杂度依旧为O(n^2);此外还有许多其他方法,这里就不介绍了,包括hash;解决方案:循环26个字母,统计每个字母出现次数为1的字母.原创 2020-11-10 15:34:52 · 169 阅读 · 0 评论 -
01.leetcode-01.Two Sum(hash相关)
最近开始,把之前刷过的题进行总结,汇总到博客上,现在及以后刷的题也开始在博客上打卡记录,方便以后不断的翻阅~常看常温习才不会忘哦~题目:Two SumGiven an array of integersnumsand an integertarget, returnindices of the two numbers such that they add up totarget.You may assume that each input would haveexactly...原创 2020-11-10 14:52:48 · 90 阅读 · 0 评论 -
coding A&D:剑指offer 3. 数组中重复数字
因为数组中的数字都在0~n-1的范围内,所以,如果数组中没有重复的数,那当数组排序后,数字i将出现在下标为i的位置。现在我们重排这个数组,从头到尾扫描每个数字,当扫描到下标为i的数字时,首先比较这个数字(记为m)是不是等于i。如果是,则接着扫描下一个数字;如果不是,则再拿它和m 位置上的数字进行比较,如果它们相等,就找到了一个重复的数字(该数字在下标为i和m的位置都出现了),返回true;如果它和m位置上的数字不相等,就把第i个数字和第m个数字交换,把m放到属于它的位置。接下来再继续循环,直到最原创 2020-07-06 12:08:20 · 94 阅读 · 0 评论 -
coding A&D:剑指offer 2. 单例模式
解法:线程安全的懒汉式:静态内部类public class Singleton{ private static class SingletonHolder{ private static Singleton instance = new Singleton(); } private static Singleton getInstance(){ return SingletonHolder.instance; } priva原创 2020-07-06 11:27:42 · 121 阅读 · 0 评论 -
coding A&D:(选择排序)简单选择排序
【方法】:每一趟从待排序的数据元素中选出最小(最大)的元素,顺序放在待排序的数列最前,直到全部待排序的数据元素全部排完。【排序过程】:初始关键字:『 8,5,2,6,9,3,1,4,0,7 』 第一趟排序后:0,『5,2,6,9,3,1,4,8,7』 第二趟排序后:0,1,『2,6,9,3,5,4,8,7』 第三趟排序后:0,1,2,『6,9,3,5,4,8,7』...原创 2018-09-24 09:05:24 · 155 阅读 · 0 评论 -
coding A&D:(选择排序)堆排序
【概念】:堆是具有以下性质的完全二叉树: 每个结点的值都大于或等于其左右孩子结点的值,称为大根堆; 或者每个结点的值都小于或等于其左右孩子结点的值,称为小根堆。(注意:这种结构是对父节点-左/右孩子节点之间做的约束,而对左-右孩子节点之间并没有什么要求。千万别错记成二叉排序树的性质)【排序过程】:(以大根堆为例)(1)初始化堆:堆是对父节点-左/右孩子节点之...原创 2018-09-24 09:45:39 · 160 阅读 · 0 评论 -
coding A&D:KMP算法
一些算法、数据结构长时间不用,就忘记了,甚至连概念都忘了,最麻烦的是忘记当初如何理解该概念的方法了。。。浏览博客时发现这两位博主的博文有助于我重新理解kmp算法,遂参考一下,进行总结,有助于以后使用:MandW:https://blog.csdn.net/u011564456/article/details/20862555https://blog.csdn.net/starstar1...原创 2018-09-24 15:32:35 · 145 阅读 · 0 评论 -
coding A&D:希尔排序(插入排序一种)
希尔排序(1)希尔排序(shell sort)这个排序方法又称为缩小增量排序,是1959年D·L·Shell提出来的。该方法的基本思想是:设待排序元素序列有n个元素,首先取一个整数increment(小于n)作为间隔将全部元素分为increment个子序列,所有距离为increment的元素放在同一个子序列中,在每一个子序列中分别实行直接插入排序。然后缩小间隔increment,重复上述...原创 2018-09-22 17:05:38 · 162 阅读 · 0 评论 -
coding A&D:拓扑排序
1、拓扑排序的介绍对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。 拓扑排序对应施工的流程图具有特别重要的作用,它可以决定哪些子工程必须要先执行,哪些子工程要在某些工程执行后才可以执行。为了形象地反映出整个工程中各个子工...原创 2018-09-22 17:23:23 · 297 阅读 · 0 评论 -
coding A&D:排序算法-概念总结
一. 插入排序 #直接插入排序: 每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。 有序序列(初始为:最左端第一个元素) | 待排序序列 #折半插入排序: #希尔排序: ...原创 2018-10-14 17:30:12 · 215 阅读 · 0 评论 -
coding A&D:最小生成树MST
关于图的几个概念定义:连通图:在无向图中,若任意两个顶点vi与vj都有路径相通,则称该无向图为连通图。 强连通图:在有向图中,若任意两个顶点vi与vj都有路径相通,则称该有向图为强连通图。 连通网:在连通图中,若图的边具有一定的意义,每一条边都对应着一个数,称为权;权代表着连接连个顶点的代价,称这种连通图叫做连通网。(即:带权的连通图) 生成树: 一个连通图的生成树是指一个连通子图,它含...原创 2018-10-14 23:03:07 · 170 阅读 · 0 评论 -
coding A&D:特殊矩阵的压缩存储
特殊矩阵包含:对称矩阵:a(i,j) = a(j,i)上三角矩阵/ 下三角矩阵:下三角元素均为常数的矩阵/ 下三角元素均为常数的矩阵对角矩阵:所有非零元素集中在主对角线两侧的带状区域内。稀疏矩阵: #对称矩阵(n阶矩阵)1.若,下标从0开始:ai,j = aj,i i>=0, j<= n-1 i<j:上三角区元素i>...原创 2018-10-14 23:40:53 · 305 阅读 · 0 评论 -
coding A&D:KMP算法 - 全面理解
终于找到一种适合自己理解的方法,在此,如下两篇博文有很大帮助:http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.htmlhttps://blog.csdn.net/kornberg_fresnel/article/details/78002188 此篇博客虽然未直接引...原创 2018-10-15 17:20:09 · 157 阅读 · 0 评论 -
coding A&D:时间复杂度分析
我们假设计算机运行一行基础代码需要执行一次运算。int aFunc(void) { printf("Hello, World!\n"); // 需要执行 1 次 return 0; // 需要执行 1 次}那么上面这个方法需要执行 2 次运算;int aFunc(int n) { for(int i = 0; i<n; i++...原创 2018-10-16 14:27:36 · 251 阅读 · 0 评论 -
coding A&D:斐波那契数列:非递归实现
int Fib(int n){ if (n == 1) { return 0; } if (n == 2) { return 1; } int f1 = 0; int f2 = 1; int c = 0; for (int i = 3; i <= n; i++) { c = f1 + f2; f1 = f2; f2 = c; } retu...原创 2018-10-16 15:36:58 · 177 阅读 · 0 评论 -
coding A&D:森林与二叉树的转换
首先,树转二叉树:「1」兄弟+横线 树中的每一个结点,如果该结点有兄弟结点,那么就在这几个兄弟结点之间进行连线。「2」保存长子线 对于树中的每一个结点,如果其有多个子节点,保存其第一个子节点的连线,去除其他子节点的连线。「3」调整位置 对每个结点调整一定的位置,使其符合二叉树的标准。1. 森林转换为二叉树【1】将每课树转换成二叉树【2】将每课树的根结点连接...原创 2018-10-19 16:14:28 · 217 阅读 · 0 评论 -
coding A&D:KMP中求nextval
串 : a b c a b a anext : 0 1 1 1 2 3 2nextval: 0 1 1 0 1 3 2以上面的为例,先说next。next值本身的含义即是当进行匹配的模式串发生失配后,失配的这一字符再次进行匹配时要与哪个字符再进行比较?我们可以理解为这次配不上,那我下次和谁比?这样,next的值就与T发生了关系,表示了字符的比较位置。T就是元素的位置。开始不用说,a...原创 2018-10-17 15:47:55 · 175 阅读 · 0 评论 -
coding A&D:BST 二叉查找树:遍历、插入、删除
注:BST:二叉排序树、二叉查找树、二叉搜索树,这些名字都对【1】二叉排序树的遍历根据二叉排序树的定义,有「左子树结点值」<「根结点值」<「右子树结点值」,即:" 左<根<右 ",所以,对二叉排序树进行中序遍历,可以得到一个递增的有序序列;123468 【2】二叉排序树插入结点这一步很简单,根据BST的性质插入即可; 【3】二叉排序树...原创 2018-10-22 14:25:53 · 188 阅读 · 0 评论 -
coding A&D:AVL平衡二叉树的旋转(插入结点)
【1】AVL平衡二叉树的基本概念:平衡二叉树建立在二叉排序树的基础上,目的是使二叉排序树的平均查找长度更小,即让各结点的深度尽可能小,因此,树中每个结点的两棵子树的深度不要偏差太大。平衡二叉树的递归定义:平衡二叉树是一棵二叉树,其可以为空,或满足如下2个性质:①左右子树深度之差的绝对值不大于1。②左右子树都是平衡二叉树。平衡因子的概念:结点的平衡因子 = 结点的左子树深度 — 结点的右...原创 2018-10-22 15:09:04 · 305 阅读 · 0 评论 -
coding A&D:排序算法的 稳定性
稳定性的定义假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,Ai=Aj,且Ai在Aj之前,而在排序后的序列中,Ai仍在Aj之前,则称这种排序算法是稳定的;否则称为不稳定的。判断方法对于不稳定的排序算法,只要举出一个实例,即可说明它的不稳定性;而对于稳定的排序算法,必须对算法进行分析从而得到稳定的特性。需要注意的是,排序...原创 2018-10-22 15:34:25 · 160 阅读 · 0 评论 -
coding A&D:关键路径(AOE网)
首先,之前讲的拓扑排序中:#DAG图:有向无环图(一个有向图中不存在环)#AOV网:用DAG来表示一个工程,顶点表示活动,用有向边<Vi,Vj>表示活动Vi必须先于活动Vj发生的这样一种关系, 则这种有向图称为「顶点表示活动的网络」,记为:AOE网。#拓扑排序:由一个DAG的顶点组成的序列,当且仅当满足如下条件时,称为该图的一个拓扑序列:...原创 2018-10-25 14:51:13 · 266 阅读 · 0 评论 -
coding A&D:图:极大连通子图、极小连通子图、连通分量
感谢:https://blog.csdn.net/qq_38262266/article/details/77010230这个可以说总结的很到位了!原创 2018-10-23 14:31:42 · 1231 阅读 · 0 评论 -
coding A&D:图:生成树,最小生成树MST
对于无向图!因为有向图没有极小连通子图!!!!!!! 【1】生成树:(连通图的)生成树是:包含图中全部顶点的一个极小连通子图(|E| = |V| - 1)。 # 若砍去它的一条边,就会使生成树变成非连通图; # 也就是说:一个连通图可能含有多个生成树(极小连通子图) 【2】MST最小生成树:若图是带权无向连通图,由于生成树不同,每棵树的权和也可能不同;设R为...原创 2018-10-23 14:50:49 · 444 阅读 · 1 评论 -
coding A&D:计算哈希表 - 线性探测法、拉链法 - ASL成功、ASL不成功
例题(来源:2010年全国统考专业课408 第一题)一. 哈希表—线性探测法的ASL成功、不成功计算将关键字序列(7、8、30、11、18、9、14)散列存储到散列表中。散列表的存储空间是一个下标从0开始的一维数组。散列函数为: H(key) = (keyx3) MOD 7,处理冲突采用线性探测再散列法,要求装填(载)因子为0.7。(1) 请画出所构造的散列表;(2) 分别计算等概率情况...原创 2018-10-21 17:24:01 · 8177 阅读 · 2 评论 -
coding A&D:最短路径
最短路径问题分为两大类:#无劝图的单源最短路径;#带权有向图的单源最短路径、各顶点之间的最短路径。 求解最短路径的算法,通常都依赖于一种性质,也就是两点之间的最短路径也包含了路径上其他顶点间的最短路径【1】无权图的单源最短路径:可用BFS广度优先搜索; 【2】带权有向图的最短路径:图是带权图,把从一个顶点 v0 到图中其余任一个顶点 vi 的一条路径(可能不止一...原创 2018-10-23 16:03:29 · 183 阅读 · 0 评论 -
coding A&D:BF算法
用于字符串的模式匹配。是一种简单的、普通的、暴力的模式匹配算法(当然是相对于KMP来说)BF算法,即暴风(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。...原创 2018-10-29 14:05:48 · 158 阅读 · 0 评论 -
coding A&D:广义表
原创 2018-10-29 14:31:16 · 185 阅读 · 0 评论 -
coding A&D:图:最小生成树(二):破圈法
求MST的算法中,prim算法和kruskal算法思想是:“加边”;破圈法正好相反,破圈即为:“减边”。破圈法是一种贪心算法,思想大体如下:1.找到图中的一个圈;2.删除其中的权最大的边;3.重复上述操作,直到图中已无圈。 以下为bd百科中的描述,更为准确、详细:破圈法,是区别于避圈法(Prim算法和Kruskal算法)的一种寻找最小生成树的算法,也就是MST的一种...原创 2018-10-30 15:37:33 · 3404 阅读 · 0 评论