
算法
文章平均质量分 55
binling
这个作者很懒,什么都没留下…
展开
-
LeetCode 827 最大人工岛 题解
给你一个大小为 n x n 二进制矩阵 grid。最多 只能将一格 0 变成 1。返回执行此操作后,grid 中最大的岛屿面积是多少?岛屿 由一组上、下、左、右四个方向相连的 1 形成。经典的图论中连同分量的题目。原创 2022-09-18 16:39:49 · 385 阅读 · 1 评论 -
预处理在快速判断两个单词是否有相同字符的应用
这里面利用到单词的字符集是有限的这一特性,比如,英文单词就是26个字母,可以把一个单词包含的字母的情况,转化为一个26位的位图,两个单词如果有相同的字母,那么相应的bit位置上就同为1。把位图当成一个数,两个位图做一个“与”操作,结果为0就得出对应的单词无重复字符。,一般的做法是,采用辅助的集合类容器,先遍历一个字符串,把它的字符放到集合中;如果是一个单词的集合,需要判断两两判断两个单词是否有重复字符,按照上面的算法,总的复杂度变为 O(n * len), len是字符串长度的上限。...原创 2022-08-10 17:50:51 · 371 阅读 · 0 评论 -
二叉树非递归后序遍历的4种优雅解法
方法1:状态机法状态由两个部分组成当前树的根节点root辅助Stack的状态算法就是根据当前的状态,不断跳转到下一个状态,直到root和Stack都为空。Stack里存的是当前树遍历之后再处理的节点,也就是当前树的父亲节点。class Solution { public List<Integer> postorderTraversal(TreeNode root) { List<Integer> output = new ArrayList<原创 2022-04-24 18:51:56 · 1264 阅读 · 0 评论 -
基于代数思维的coding
大概有两种思维,一种是面向过程的,就是想象一个数据结构上的操作步骤,推演一下,看看能不能接近一个solution。这种思维有诸多弊端:1)靠灵光一现的乱试,不可控,不可重复2)面向过程,比较复杂、麻烦,易出错3)逻辑性不强,为什么这么操作一番就能得出解? 这个问题很难回答,缺乏一种确信感。离散,不易证明代数的特点是什么?都是变量和公式推导,从不需要带入离散的具体值去验证,是自证明的,或者说你可以代入任何具体值,都是成立的,逻辑性非常强。比如求斐波那契数列的代数式算法:```def原创 2021-08-10 13:15:24 · 155 阅读 · 0 评论 -
LeetCode 32 Longest Valid Parentheses 2种优雅解法
思路一 递归DP定义子问题 : f(i) 为 以s[i] 结尾的子串的原问题,有:如果s[i] == ‘(’:f(i) = 0如果s[i] == ‘)’:如果s[i - 1] == ‘(’:f(i) = f(i - 2) + 2如果s[i - 1] == ‘)’:令 l = f(i -1), 如果s[ i - l - 1] == ‘(’,那么f(i) = f(i - 1) +...原创 2020-03-17 15:28:44 · 174 阅读 · 0 评论 -
一些算法思想
关于解算法题,一定不要漫无边际,一定要有所依托,一定是个收敛的过程。如何收敛思路而不是不漫无边际?思考的起点是什么?答曰,脚踏实地,从实地起,有所依托,纲举目张。依托的是什么,纲举目张的纲是什么?——关键变量。算法的主体就是变量、数据。首先有题目给出的输入参数和返回值,这就是最初的依托,纲。然后看自己需要定义什么变量。这就是思考的起点,算法有哪些主体、player(变量、数据)?这是第一个要问的问原创 2014-04-23 00:52:47 · 737 阅读 · 0 评论 -
算法思路(续)
之前说过,算法的主题就是循环或者递归。原创 2014-04-23 01:19:09 · 579 阅读 · 0 评论 -
递归的一种应用
有些问题,涉及两个对象,比如两个数,x原创 2014-04-23 01:25:19 · 573 阅读 · 0 评论 -
堆的操作
添加添加的元素放在原创 2014-05-12 00:51:42 · 585 阅读 · 0 评论 -
3Sum
先排序,然后穷举第一个数,原创 2014-07-28 20:07:16 · 454 阅读 · 0 评论 -
4sum
1)排序2)穷举前两个数的组合,保证原创 2014-07-29 11:49:12 · 633 阅读 · 0 评论 -
Search in rotated sorted Array
1)首先确定mid落在前半部分还是后半部分,用A[mi原创 2014-07-25 09:07:48 · 488 阅读 · 0 评论 -
Remove Duplicates from Sorted Array II
还是原地重写法。条件是A[原创 2014-07-30 01:04:14 · 350 阅读 · 0 评论 -
Remove Element
从数组中删除满足某种条件的元素,原创 2014-07-30 09:14:08 · 371 阅读 · 0 评论 -
Remove Duplicates from Sorted Array
排序数组的duplicates都是相邻的,原地重写fa原创 2014-07-30 00:29:56 · 383 阅读 · 0 评论 -
Rotate Image
顺时针把一个图像翻转90度。原创 2014-07-31 11:40:03 · 427 阅读 · 0 评论 -
Copy List with Random Pointer
两种方法,都要扫描两遍map法:1)副原创 2014-08-19 12:57:52 · 476 阅读 · 0 评论 -
再谈递归——直接法 vs 递归法
直接法就是有一个很清晰的逻辑,第一步干什么,第二部g原创 2014-08-18 23:55:08 · 620 阅读 · 0 评论 -
partition算法的3种形态
1)原地重写法:条件是小于轴,不符合交换原创 2014-08-12 09:47:49 · 869 阅读 · 1 评论 -
原地重写法
原地重写法有2种常见应用:1)原创 2014-08-12 09:59:10 · 484 阅读 · 0 评论 -
Partition List
题目:Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.You should preserve the original relative order of the nodes in原创 2014-08-11 20:18:16 · 418 阅读 · 0 评论 -
如何描述、记忆算法?
循环的是按什么循环,循环变量代表的意义,原创 2014-08-12 00:09:58 · 1488 阅读 · 0 评论 -
关于各种merge 的心得
合并两个线性表, 包括合并两个有序原创 2014-09-10 12:25:15 · 671 阅读 · 0 评论 -
链表算法的一些领会
有些题目是要求一节一节的处理链表,比如r原创 2014-08-19 00:08:10 · 451 阅读 · 0 评论 -
Rotate List
rotate a linked list by k. 分析:把链表的后k个原创 2014-08-18 12:34:35 · 183 阅读 · 0 评论 -
Insertion Sort List
插入排序的算法是,假定前面部分是排好序的,原创 2014-09-23 18:07:06 · 461 阅读 · 0 评论 -
Sort List
Merge Sort链表的merge Sort 就是 查找中间原创 2014-09-24 13:06:12 · 452 阅读 · 0 评论 -
排列问题汇总
排列问题有两种解决方案1。原创 2014-09-26 00:56:16 · 598 阅读 · 1 评论 -
回溯法中解空间树的组织
回溯法经典的Subset问题,可以有原创 2014-08-15 12:44:44 · 7477 阅读 · 0 评论 -
Augmenting Existing Data structure 总结
动态Order Statistic 系统(动态ranking 系统)原创 2014-10-04 17:57:22 · 669 阅读 · 0 评论 -
二分搜索
二分sou'suo除了经典的原创 2014-09-26 01:24:49 · 544 阅读 · 0 评论 -
组合、子集问题汇总
子集的问题的思路也分两个方向,原创 2014-10-01 12:58:38 · 638 阅读 · 0 评论 -
Palindrome Partitioning II
Calculate and maintain 2 DP states:pal[i][j] , which is whether s[i..j] forms a pald[i], which is the minCut for s[i..n-1]Once we comes to a pal[i][j]==true:if j==n-1, the string s原创 2014-10-16 16:32:45 · 370 阅读 · 0 评论 -
求满足某种条件的子串问题- 滑动窗口法
维护一个invariant,窗口对应的子串始终满足给定条件滑动的方式是:右边滑动,直到破坏这个invariant。原创 2014-12-02 20:17:45 · 524 阅读 · 0 评论 -
数组值和下标是同一值域的题目汇总
一、重复的数大小为n+1的数组,元素取值为[1,n],有一个数重复出现,找出这个数原创 2014-12-22 14:37:15 · 464 阅读 · 0 评论 -
re-arrange 数组问题汇总
一 re-arrange 数组1排序2 shuffle3 partition(2 way, 3 way, n way)4 interleave3 错排原创 2014-12-21 20:39:24 · 736 阅读 · 0 评论 -
最大公约数,最小公倍数,素数等问题
两个数的 最小公倍数 等于两个数的乘积除以最大公约数,scm (a, b) = a * b / gcd (a, b),所以主要是最大公约数gcd 问题:辗转相除法依据就是欧几里得定理: gcd(a, b) = gcd(b, a%b)def gcd (a, b): while b > 0: c = a % b a, b = b, c re原创 2014-12-24 13:58:48 · 630 阅读 · 0 评论 -
二分查找题目汇总
1)Search In Rotated Array2) Search In Rotated Array ||3)原创 2014-08-28 12:25:49 · 1168 阅读 · 0 评论 -
Reorder List
这题的意思是依次倒数第n个节点插到原创 2014-08-22 12:27:40 · 474 阅读 · 0 评论 -
Convert Sorted List to Binary Search Tree
方案1:找中间结点作为root + recursively 建立左右子树1)快慢指针法找中间结点mid,作为root,2) recursive problem: head 到 prev 这一段链表建立左子树, mid->next 到结尾这一段链表建立右子树复杂度分析:T(n) = 2T(n/2) + n/2 应该是 (n/2) * lgnTreeNode *sortedLis原创 2014-12-29 16:52:21 · 593 阅读 · 0 评论