
算法
「已注销」
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Leetcode 142. Linked List Cycle II
Leetcode 142. Linked List Cycle II地址:Leetcode 142. linked list Cycle II问题描述:检测链表是否存在环,是的话返回环入口,否则返回None.这道题有两个思路,一个是经典的快慢指针的思路,另外一个是利用hashMap来记住已经访问过的Node。思路一:检测到环的时候,令慢指针指向head,然后fast 和 slow指针皆...原创 2019-01-06 15:30:25 · 163 阅读 · 0 评论 -
Leetcode 28. Implement strStr()
题目描述:实现一个函数,能匹配字符串,如果匹配成功返回第一次出现的index,失败返回-1,如果匹配串长度为0返回0.题目链接:Leetcode 28. Implement strStr()KMP算法,根据needle求出next数组,然后利用next数组的信息进行匹配,移动模式串来匹配,每当失配就移动模式串,如果模式串回到了-1也就是第一个位置,那么相应的主串也移动一位进行比较即可。...原创 2019-02-27 17:16:37 · 165 阅读 · 0 评论 -
Leetcode 5. Longest Palindromic Substring
题目描述:找出最长回文子串(LPS)题目链接:Leetcode 5. Longest Palindromic Substring这个问题目前为止看到3个想法:1、马拉车算法巧妙的O(n)算法,分情况讨论,利用回文的对称性来更新结果2、动态规划算法(d[i…j])是否为回文,然后2层循环3、KMP利用最长前缀匹配算法来做。4、暴力搜索(主要是穷举子串、子数组的训练)参考链接处有...原创 2019-02-23 12:36:29 · 320 阅读 · 0 评论 -
Leetcode 6. ZigZag Conversion
题目描述:之字打印出字符串,并返回结果。题目链接:Leetcode 6. ZigZag Conversion思路就是初始化n行字符串,然后像搜索一样一个上一个下去搜索。代码如下class Solution(object): def convert(self, s, numRows): """ :type s: str :type...原创 2019-02-23 13:33:07 · 159 阅读 · 0 评论 -
Leetcode 7. Reverse Integer
题目描述:翻转整数,当超出32位时返回0.题目链接:Leetcode 7. Reverse Integer思路就是转换成字符串,判断是否为正负,然后再转换成数字。还有一种就是不断除以10,然后另外一个数不断乘以10这样构建,当发现溢出的时候,退出然后返回0.代码如下class Solution { public int reverse(int x) { bo...原创 2019-02-23 13:34:25 · 163 阅读 · 0 评论 -
Leetcode 9. Palindrome Number
题目描述:返回一个整型数字是否为回文数字。题目链接:Leetcode 9. Palindrome Number转成字符串,然后reverse操作得出结果。代码如下class Solution { public boolean isPalindrome(int x) { if (x < 0) { return false; ...原创 2019-02-23 13:43:52 · 158 阅读 · 0 评论 -
科大笔试讯飞题目(春招算法工程师)
科大讯飞题目(春招算法工程师)1、就是排序后然后找最低的改成100,直到平均分大于等于X分结束,计算操作次数。2、合并右边小的数 最后是第一个数字 加上严格递增的数组,记录操作数。AC代码如下,第一题python怎么写都不对,改成java就AC了。package Leetcode;import java.io.FileNotFoundException;import java.u...原创 2019-02-23 15:30:04 · 1262 阅读 · 0 评论 -
Leetcode 11. Container With Most Water
题目描述:找出两个柱子,使其两根柱子面积最大,就是找两个数,使两个面积最大,就是宽*高最大。题目链接:Leetcode 11. Container With Most Water子串、子数组的题目,暴力求解,列举子集之后就可以得出结果,不断更新。还有一个C++的解法那就是左右指针,如何向左向右条件如下。代码如下class Solution { public int maxA...原创 2019-02-24 12:42:53 · 152 阅读 · 0 评论 -
Leetcode 12. Integer to Roman
题目描述:数字转换成罗马数字题目链接:Leetcode 12. Integer to Roman这道题就是找规律,直接分成千位、百位、十位、个位的所有可能列出来,然后求余得出结果。代码如下class Solution { public static String intToRoman(int num) { String M[] = {"", "M", "MM"...原创 2019-02-24 12:53:26 · 129 阅读 · 0 评论 -
Leetcode 13. Roman to Integer
题目描述:罗马数字转换成整数。题目链接:Leetcode 13. Roman to Integer按照整数转罗马数字的套路,罗马数字只需要构建一个字典存储值,然后查看小的是否在大的前面,是的话就-不是的话就+。代码如下import java.util.HashMap;class Solution { public int romanToInt(String s) { ...原创 2019-02-24 13:15:26 · 160 阅读 · 0 评论 -
Leetcode 18. 4Sum
题目描述:找出数组中任意4个数和为target的组合,不得重复。题目链接:Leetcode 18. 4Sum思路:基于3Sum做待定,相当又套了一层循环。当然,也可以暴力列举 3 3 个的情况来达到目的。代码如下// Author: Huahuaclass Solution {public: vector<vector<int>> fourSum(...原创 2019-02-24 16:45:32 · 126 阅读 · 0 评论 -
Leetcode 260. Single Number III
题目描述:找出一个数组中仅仅出现1次的两个数字,其他数字都出现了2次。题目链接:Leetcode 260. Single Number III思路:这个跟第一题 136很相似,只不过这里面有2个出现一次的数字,那题可以用摩尔投票法,也可以用异或相同为0的记录法。这里就是要找出一个区分位,来区分不同的结果,这个区分就是diff参见下面解释:这道题是之前那两道 Single Numbe...原创 2019-02-20 14:47:19 · 148 阅读 · 0 评论 -
Leetcode 20. Valid Parentheses
题目描述:返回一个字符串是否符合括号匹配。({)}不符合,空为True.题目链接:Leetcode 20. Valid Parentheses思路就是用栈,弹栈压栈的判断就可以了。代码如下import java.util.HashMap;import java.util.Arrays;import java.util.LinkedList;class Solution { ...原创 2019-02-26 17:17:20 · 196 阅读 · 0 评论 -
Leetcode 1. Two Sum
题目描述:给定一个列表,返回一个数组中两个数相加为target的下标索引。题目链接:Leetcode 1. Two Sum开始我的思路是先排序,然后双指针向中间移动,然后记录此时的值,再到原数组去寻找对应值下标注意处理相同值的情况。正确的思路就是利用hashmap来记target-nums[idx]当出现的数在哈希表内时,证明已经找到了结果了。一般数组的题目都是用哈希表空间换时间的思...原创 2019-02-22 15:18:00 · 141 阅读 · 0 评论 -
Leetcode 397. Integer Replacement
题目描述:判断一个数字到1需要多少个步骤?题目链接:Leetcode 397. Integer Replacement其变换描述为:如果n是偶数,其n/2,如果是奇数,可以加1或者减1,找出最小变化步数。思路:深度优先搜索加上剪枝,判断奇数偶数用n&amp;1 看位数,除以2用移位的方法。代码如下:class Solution(object): def integerRep...原创 2019-01-21 16:50:28 · 213 阅读 · 0 评论 -
Leetcode 143. Reorder List
Leetcode 143. Reorder List问题描述:给定一个链表,要求把最后一位插入到第二位、倒数第二位插入到第三位…链表问题很直接的思路就是断链、连链、暂存节点、暂存下个节点、快慢指针等操作。继承前面142的思路,这里用快慢指针找到链表的中位数(index)位置,中位数后面的数字都是需要前插的,然后先进行链表的翻转,再进行合并得到最后的结果。代码如下:class So...原创 2019-01-06 18:55:56 · 129 阅读 · 0 评论 -
Leetcode 145. Binary Tree Postorder Traversal
Leetcode 145. Binary Tree Postorder Traversal问题描述二叉树的遍历后根序遍历,也就是左右根的顺序访问。分别提供以下方法以及python代码:递归的方式class Solution: def postorderTraversal(self, root): """ :type root: TreeNode...原创 2019-01-06 19:52:19 · 269 阅读 · 0 评论 -
Leetcode 94. Binary Tree Inorder Traversal
Leetcode 94. Binary Tree Inorder Traversal问题描述:给出二叉树,写出其中序遍历结果,也就是左根右的顺序访问。题目链接:Leetcode 94. Binary Tree Inorder TraversaL提供一下python版本的方法:递归的版本class Solution: def postorderTraversal(self, r...原创 2019-01-06 19:59:46 · 144 阅读 · 0 评论 -
Leetcode 144. Binary Tree Preorder Traversal
Leetcode 144. Binary Tree Preorder Traversal问题描述:给出二叉树,写出其前序遍历结果,也就是根左右的顺序访问。题目链接:144. Binary Tree Preorder Traversal提供一下python版本的方法:递归的版本class Solution: def postorderTraversal(self, root):...原创 2019-01-06 20:02:22 · 104 阅读 · 0 评论 -
Leetcode 146. LRU Cache
问题描述:实现LRU缓存算法。题目来源:146. LRU Cache这个是一种缓存策略以及页面置换淘汰策略。简单的来说就是最近使用的不淘汰,最近没有使用的就要被淘汰。题目要求put\set都要实现常数时间的操作,则很容易想到利用哈希去做,但是如何来定义最远没有使用的呢?1、加时间戳(timestamp),但是这样维护时间戳排序的时候很麻烦,时间复杂度很高2、利用链表来维护当前的节点状...原创 2019-01-07 13:03:21 · 164 阅读 · 0 评论 -
Leetcode 147. Insertion Sort List
问题描述:对链表进行插入排序,其效果如图。思路:跟在普通数组中的思路一样,但是唯一不同的就是数组移动元素的时间是线性的,但是链表断链、接链操作时间是常数时间,仍然需要扫描的线性时间。默认前面的是已经排好序的链表,只需要从头开始扫描,找到第一个比起大的元素,在其前方插入即可。核心:需要时刻记录最新的头节点,也可以指定一个指针,让其永远指向最新的头节点。代码实现如下:class Solu...原创 2019-01-07 14:23:18 · 125 阅读 · 0 评论 -
LeetCode 148. Sort List
题目描述:完成链表的排序,在nlogn时间复杂度内,且只用常数空间。题目链接:148. Sort List这题思路要求要用nlogn的时间复杂度的算法去完成这个操作,其实选择也就那么多:1、快排2、堆排3、归并排序在数组上完成这三个操作其实都不太难,但在链表上有一定难度。快排要找到pivot然后比较交换,双向链表比较合适,堆排要放到数组建堆,不满足。归并排序,在数组的情况下需要建...原创 2019-01-07 15:49:05 · 139 阅读 · 0 评论 -
Leetcode 150. Evaluate Reverse Polish Notation
Leetcode 150. Evaluate Reverse Polish Notation问题描述:求逆波兰式。这个问题在学习数据结构的时候很常见了,就是遇到数字压入栈,遇到符号从栈里弹出两个数计算结果、压入栈。代码实现如下:class Solution: def evalRPN(self, tokens): """ :type tokens:...原创 2019-01-07 17:00:51 · 105 阅读 · 0 评论 -
Leetcode 153. Find Minimum in Rotated Sorted Array
题目描述:给定一个在任意位置翻转一次的数组,找出其最小值。题目链接:153. Find Minimum in Rotated Sorted Array这个题目很有意思,第一次看的时候就是以为线性时间就是最好的了,谁曾想翻转一次的数组也是可以用二分法,二分查找来查找最小的值,但是要注意mid的计算方式。代码实现:class Solution(object): def find...原创 2019-01-08 23:07:02 · 113 阅读 · 0 评论 -
Leetcode 154. Find Minimum in Rotated Sorted Array II
问题描述:在153二分法的基础上,此题允许有重复元素出现。题目链接:154. Find Minimum in Rotated Sorted Array II这个题目需要克服的苦难就是有重复元素存在了,cheating的做法就是直接min()或者利用集合去重后二分,但是这其中的算法复杂度也是在线性时间了。肯定能AC~看到讨论区里面有一个思路就是当比较的时候,元素相等只需要让中位数向后退...原创 2019-01-08 23:07:43 · 177 阅读 · 0 评论 -
Leetcode 155. Min Stack
问题描述:实现一个栈的功能,并能返回最小值。题目链接:155. Min Stack偷懒的做法了,不过要想记录最小值,在pop之后就不得不重新整理最小值,每次push的时候还要比较,不值当。在讨论区看到了一种方法就是利用加减来实现记录最小值,还有的开辟另外一个空间存储当前数下的最小值。推荐答案迭代式记忆最小值:迭代式记忆最小值,加减操作。代码实现如下:class MinStack:...原创 2019-01-08 23:08:39 · 109 阅读 · 0 评论 -
Leetcode 191. Number of 1 Bits
题目描述:统计二进制中1的位数。题目链接:191. Number of 1 Bits初步想法就是沿用上题190的思路,右移n,然后不断按位与操作来进行计数。当然也可以用我以前面试的时候答的转成字符串哈哈哈~class Solution(object): def hammingWeight(self, n): """ :type n: int ...原创 2019-01-21 15:47:36 · 228 阅读 · 0 评论 -
Leetcode 22. Generate Parentheses
题目描述:给定一个数字n生成长度为n的合法的括号字符串。题目链接:Leetcode 22. Generate Parentheses这个题目一看用递归,但是怎么剪枝呢?就是(与)的关系,右括号一定不能大于左括号数,最终两个数一定相等,左右括号数各为一半,因为只有一种括号,所以不用考虑([)]这种情况。代码如下class Solution { public List<S...原创 2019-02-26 19:10:36 · 160 阅读 · 0 评论