算法题
文章平均质量分 62
算法题记录
内核手记
内核手记,分享核心知识
展开
-
leetcode 19. 删除链表的倒数第N个节点 快慢指针变体运用
删除倒数节点题目需要一次扫描,那么需要用到快慢指针。删除倒数第n个节点,那么让快指针先走n步即可;注意边界条件,当被删除的节点为头结点时应单独分析# Definition for singly-linked list.# class ListNode(object):# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution(object原创 2020-10-24 19:38:07 · 135 阅读 · 0 评论 -
leetcode 234. 回文链表 快慢指针和头插法运用
d原创 2020-10-24 18:15:31 · 847 阅读 · 1 评论 -
leetcode l289. Game of Life
原题:https://leetcode.com/problems/game-of-life/description/ 这道题目很有意思,主要的challenge是讲的不用额外的空间进行状态保存。 这题目初始的状态为0/1,完成可以用bool来表示,但是题目给的是int;所以可以利用int不同的“位”来标识不同“次数”的信息。比如说修改值修改在“第二位”,当前值是一个“第一位”,...原创 2018-08-07 19:05:06 · 178 阅读 · 0 评论 -
0/1背包优化
public class packeg { public static void main(String[] args) { // TODO Auto-generated method stub int cost[]= {0,1,3,7,4};//重量数组 int weight[]={0,2,4,5,3};//价值数组 int count=4;//货物个数 int m=5原创 2016-03-31 19:31:36 · 355 阅读 · 0 评论 -
Bst的基本操作
#include #include #include #include #include using namespace std;typedef struct BstNode{ int data; BstNode *lchild, *rchild;}BstNode,*BstTree;void Bst_insert(BstTree &T,int z)//建树{ if(T=原创 2015-12-29 16:23:53 · 476 阅读 · 0 评论 -
leetcode 23. 合并K个升序链表 计数排序
题目分析1 合并多个链表,就是合并多个链表的节点,需要按照大小排序,所以是一个穿着链表节点外衣的排序题目2 根据下面的题目分析,可知数字为整形且比较小,可采取计数排序进行整合所有节点k == lists.length0 <= k <= 10^40 <= lists[i].length <= 500-10^4 <= lists[i][j] <= 10^4lists[i] 按 升序 排列lists[i].length 的总和不超过 10^4# Definit原创 2020-10-24 19:57:34 · 152 阅读 · 0 评论 -
leetcode 2. 两数相加 整数取模与链表的尾插法
两数相加返回两数相加的结果,注意链表是从数字的低位到高位,那么相加时直接从后向前即可# Definition for singly-linked list.# class ListNode(object):# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution(object): def addTwoNumbers(self, l原创 2020-10-24 19:25:05 · 242 阅读 · 0 评论 -
leetcode 214 Shortest Palindrome kmp算法 前缀后缀字符串匹配
0 leetcode 214. Shortest Palindrome 本题的描述是一个串前方加上一些字符串,使其成为一个回文串。形式类似于(添加部分)(回文部分)(其余部分),所以我们的目标就是将其回文部分求出来,或者把他的长度求出来。如果用暴力解法,那么问题就变成O(N*N)的复杂度,我们希望优雅地解决,所以我们用到kmp算法求nxt数组。kmp算法是求字符串匹配的算法,下面记录...原创 2018-10-17 18:36:08 · 469 阅读 · 0 评论 -
leetcode 459. Repeated Substring Pattern kmp算法运用
0 题意:求一个字符串是否可能由其子串复制而成1 分析,假如一个串s由子串x复制而成,那么设子串为x = (abc...),则 s = x x x x x...。我们可以对其使用kmp算法,求出前缀、后缀字符串的最大长度,然后进行问题简化。2 图解,假如串s在用kmp求解后,串尾的最长前缀后缀长度为k,那么前面x长度为多余的部分,如②的串b的前面x部分;那么s[0,x]与s[0,k]有何关...原创 2018-10-19 14:44:30 · 488 阅读 · 0 评论 -
leetcode 28. Implement strStr() kmp算法
0 求pattern串在原串str中是否存在,如果存在就返回下标1 kmp算法,先求next数组,然后逐个向后匹配即可。kmp算法的讲解本人写的在这里 https://blog.csdn.net/mistakk/article/details/83114497 。2 代码int strStr(string haystack, string needle){ int n = ...原创 2018-10-19 10:33:43 · 200 阅读 · 0 评论 -
leetcode 916. Word Subsets 字典优化问题
0 题意:A是一个字符串集合,B是一个字符串集合,要找出A中一些字符串,字符串都要求字典包含字符串B中的每一个字符串。1 思路:暴力解法:对集合B中的每一个字符串都预处理,然后与A相互一一比较,判断A中的每一个字符串是否都符合条件;暴力解法在此处会超时,所以看优化解法。优化解法思路:将字符串B预处理为一个字符串,这个字符串包含了集合B每一个字符串最"难"达到的信息。然后用这个字符串与集合A中字...原创 2018-10-18 21:45:22 · 258 阅读 · 0 评论 -
leetcode 5. Longest Palindromic Substring 回文串处理
0 问题:求一个串中,最长的连续子回文串的长度1 这个问题是求串的连续子串问题,连续子串为o(n^2),而比较是否为回文串为o(n0),所以这题目的暴力解法时间复杂度为o(n^2),我们希望用更少的时间来解决。这题目的思路为从回文串的“肚子”着手,向两边进行扩充;2 代码 string longestPalindrome(string s) { int ...原创 2018-10-18 21:32:55 · 131 阅读 · 0 评论 -
leetcode 516. Longest Palindromic Subsequence 动态规划优化问题
0 这个问题是求一个串中,回文子串的最长的长度。1 分析首先分析是否能分解为子问题,s[0,i]与s[0,i+1]是否有关联?有关联,因为对s[0,i]后面加上一个字符x后,字符x可能是一个回文串的最后一个字符,从而造成回文串的增长。在串s[0,i]后面加上一个字符x后,挨个与之前的串进行比较,直到有字符s[a] == x;那么从s[a,i+i]这部分的回文串就可以进行延长。按照这种思路,...原创 2018-10-18 21:10:46 · 264 阅读 · 0 评论 -
排序算法----不稳定排序
1 不稳定排序 稳定排序的定义是:在排序过程中,如果两个键的值相同,那么他们的相对位置不发生变化。不符合该规则的排序算法不是稳定排序算法。 2 排序算法冒泡排序: 通过元素两两交换的方式,每次将数组的未排序区域的一个最大/小元素归位 插入排序: 通过元素插入的方式,每次将数组的未排序区域的一个最值元素归位 选择排序: 通过单个元素相互交换的方式,每次将数组的未排序区域的一...原创 2018-09-20 12:46:07 · 14384 阅读 · 0 评论 -
算法设计15-8签约棒球自由球员
设d(i,x)为第i个位置,有x资金时,所带来最大的价值v;设v(i,j)为第i个位置,第j个人的价值,他的价格为f[i,j];初始化:d[1...n][10...m] ,f[1...n][1...p],v[1...n][1...p],算法思路:最外层循环为for i=1 to n 表示依次考虑每一个位置的人其次为 for x=10 to M 表示依原创 2016-03-31 20:04:02 · 657 阅读 · 0 评论 -
算法导论12.2-8 二叉搜索树的非递归遍历先驱节点分析
算法导论转载 2015-12-28 16:17:49 · 871 阅读 · 0 评论 -
算法导论12.2-8 从任意结点使用后继函数k次的时间复杂度为O(k+h)
从任意结点使用后继函数k次,假设二叉搜索树的高度为h,则时间复杂度为O(k+h)分析从表面上来看,回溯父结点的复杂度为O(h),如果多次回溯,则总体复杂度可能远超O(k+h)再想使用数学归纳法,假设起始结点和回溯结点分别位于某个结点的左右子树,然后发现无法使用替换法证明。最后从12.2-7 中得到一丝信息,即只要证明后继函数k次后,访问结点的总次数为O(k+h)即可证明设定遍历的起始结点为S,结束结转载 2015-12-28 16:58:24 · 772 阅读 · 0 评论