数据结构与算法
小怡情ifelse
百度搬砖中
展开
-
剑指 Offer 48. 最长不含重复字符的子字符串 (滑动窗口)
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。参考博客:https://www.cnblogs.com/kongzimengzixiaozhuzi/p/13308702.htmlclass Solution: def ..原创 2020-12-12 00:36:50 · 186 阅读 · 0 评论 -
剑指 Offer 42. 连续子数组的最大和(动态规划)
连续子数组的最大和输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。参考题解:https://leetcode-cn.com/problems/lian-xu-zi-shu-zu-de-zui-da-he-lcof/solution/mian-shi-ti-42-lian-x原创 2020-12-12 00:32:12 · 157 阅读 · 0 评论 -
剑指 Offer 04. 二维数组中的查找
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例: 现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22]]给定 target=5,返回true。给定target=20,返回false。class Solution:...原创 2020-08-17 23:43:29 · 156 阅读 · 0 评论 -
剑指 Offer 22. 链表中倒数第k个节点
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.解法:第一种::利用栈的特性,首先遍历一次链表,插入栈中,然后pop栈,pop第k个节点就是我们想要的了。第二种:利用双指针,具体流程原创 2020-08-04 19:55:20 · 108 阅读 · 0 评论 -
剑指 Offer 18. 删除链表的节点
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。示例一:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例二:输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为1的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -&g...原创 2020-08-04 00:09:29 · 97 阅读 · 0 评论 -
剑指offer58 - II. 左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例1:输入: s = "abcdefg", k = 2输出: "cdefgab"class Solution: def reverseLeftWords(self, s: str, n: int) ->str: res = []原创 2020-07-21 00:00:50 · 80 阅读 · 0 评论 -
LeetCode 20: 有效的括号
https://leetcode-cn.com/problems/valid-parentheses/solution/you-xiao-de-gua-hao-by-leetcode/class Solution(object): def isValid(self, s): """ :type s: str :rtype: bool """ # The stack to keep track of opening原创 2020-07-18 00:49:15 · 100 阅读 · 0 评论 -
LeetCode 9: 回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。class Solution: def isPalindrome(self, x: int) -> bool: intValue = x string = str(in.原创 2020-07-14 23:21:19 · 82 阅读 · 0 评论 -
LeetCode 1: . 两数之和
给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]nums = [2, 7, 11, 15]target = 9def search(nums: [int], target...原创 2020-07-14 16:04:54 · 92 阅读 · 0 评论 -
AQY:查找二叉树中值为k的节点
class TreeNode(): def __init__(self, x: int): self.val = x; self.left = None self.right = Noneclass Tree(): def __init__(self, k: int): self.k = k self.searchedNode = None # DFS 深度遍历 - 先序遍历 def s.原创 2020-07-01 23:41:51 · 379 阅读 · 0 评论 -
剑指 Offer 68 II:二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树:root =[3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点 5 ...原创 2020-06-24 23:54:36 · 111 阅读 · 0 评论 -
LeetCode445: 两数相加 II
给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。示例:输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 8 -> 0 -> 7class LinkNode(): def __init__(self, value, next = None):原创 2020-06-20 23:51:41 · 95 阅读 · 0 评论 -
剑指offer:反转链表
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULLclass LinkNode(): def __init__(self): self.value = None self.next = Noneclass Solution(): def creatLink(se原创 2020-06-17 23:52:23 · 92 阅读 · 0 评论 -
剑指Offer42 连续子数组的最大和 (分治算法)
输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。第一种:暴力解法采用for循环遍历,时间复杂度O(n^3)第二种:分治算法时间复杂度O(nlog(n))class Solution(): def searchMaxValue(sel...原创 2020-06-09 20:19:30 · 186 阅读 · 0 评论 -
剑指offer I:从上到下打印二叉树
class Solution: def levelOrder(self, root: TreeNode) -> List[int]: queue = [] // 使用list模拟队列 result = [] if root == None: return result queue.append...原创 2020-04-13 23:57:23 · 71 阅读 · 0 评论 -
LeetCode146:LRU算法
运用你所掌握的数据结构,设计和实现一个LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 write。获取数据 get(key) - 如果key存在于缓存中,则获取key的值(总是正数),否则返回 -1。写入数据 write(key, value) - 如果key不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从...原创 2020-03-17 23:56:23 · 137 阅读 · 0 评论 -
剑指Offer39:数组中出现次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2哈希表解法:遍历列表,将数的出现次数保存在对应的哈希表中,当某个数出现的次数大于列表的一半时,则找到了。class Solution(object): def se...原创 2020-03-15 23:44:48 · 123 阅读 · 0 评论 -
LeetCode136:只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例2:输入: [4,1,2,1,2]输出: 4class Solution(object): def searchFirstTimeNumbe...原创 2020-03-15 22:28:17 · 135 阅读 · 0 评论 -
LeetCode 20:有效的括号
给定一个只包含'(',')','[','],'{','}'的字符串,判断字符串是否有效。示例:输入:"()", true输入:"()[]{}", true输入:"(]", false输入:"([)]", false输入:"([])", trueNSString *string = @"{()}";NSMutableArray *array = [NSMutableArray a...原创 2020-03-03 17:29:36 · 67 阅读 · 0 评论 -
算法题:输入任意十进制正整数,将此十进制数转为二进制,求二进制中1的个数。
int a = 10; // 10模拟任意整数 NSMutableArray *array = [NSMutableArray array]; while (a != 1) { int remainder = a % 2; [array addObject:@(remainder)]; a = a / 2; } ...原创 2020-02-27 18:09:10 · 2283 阅读 · 0 评论 -
查找二叉树的节点(某一值的节点)
#include <iostream>#include <stdio.h>#include <stdlib.h>struct BinaryTreeNode{ char value; struct BinaryTreeNode *lchild, *rchild;};// 输入值依次是:a、b、#、#、c、#、#struct Bin...原创 2020-01-01 23:32:54 · 1409 阅读 · 0 评论 -
剑指offer48 最长不含重复字符的子字符串
题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度,假设字符串中只包’a’~’z’字符。例如,在字符串’arabcacfr’中,最长的不含重复字符的子字符串是’acfr’,长度是4摘自力扣一个比较好的解决方案:https://leetcode-cn.com/problems/longest-substring-without-repeating-characte...原创 2019-11-30 23:43:09 · 106 阅读 · 0 评论 -
剑指offer49 丑数
我们之把只包含因子2、3和5的数称作丑数。例如,6和8是丑数,但14不是,因为它包含因子7。习惯上我们把1当作第一个丑数。求任意数是否是丑数。(稍微对原题题目做了变种)题解:所以一个数m是另一个数n的因子,是指n能被m整除,也就是n%m=0,根据丑数的定义,丑数只能被2、3和5整除。也就是说,如果一个数能被2整除,就连续除以2,如果能被3整除,就连续除以3,如果能被5整除,就连续除以5,如果最...原创 2019-11-27 00:18:09 · 87 阅读 · 0 评论 -
剑指offer50 第一个只出现一次的字符
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写)解题思路:第一:利用python特性string.count(str)返回 str 在 string 里面出现的次数,利用python此特性可以几行代码搞定class Solution: def FirstNo...原创 2019-11-19 19:44:23 · 108 阅读 · 0 评论 -
剑指offer52 两个链表的第一个公共节点
输入两个链表, 找出它们的第一个公共节点。解体思路公共结点的意思是相同的点,不仅值相同,next也相同,包括公共结点后面的节点也是完全相同,所以可以把两条链表看成Y字型了,某一个结点后面的点全部一样。例如3->2->1和4->2->1,2就是他们的第一个公共结点。我们先把全部结点分别压入两个栈,利用栈的特性后进先出特性,同时pop出栈,一开始两边的元素肯定是相同...原创 2019-10-31 00:50:19 · 93 阅读 · 0 评论 -
剑指offer58 翻转字符串
输入字符串“the sky is blue”,输出“blue is sky the”string = 'the sky is blue'class Solution(object): def reverseWords(self, s): s = s.strip() res = "" i, j = len(s) - 1, len(s...原创 2019-10-28 00:16:17 · 97 阅读 · 0 评论 -
剑指offer57 和为s的数字
题干:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一堆即可。例如:输入【1,2,4,7,11,15】和数字15,由于4+11=15,因此输出4和11解体思路:最简单暴力的解决办法是两个for循环,先在数组中固定一个数字,再一次判断数组中其余的n-1个数字和它的和是不是等于s,不过是件复杂度是O(n^2),更优的解法是...原创 2019-10-26 00:04:02 · 88 阅读 · 0 评论 -
剑指offer56 数组中数字出现的次数
一组数据[1, 2, 1, 3, 2, 5],只有两个数是不重复的,其余数都出现了两次,求不重复的两个值扩展知识:异或运算符”∧”,它的规则是若参加运算的两个二进位同号,则结果为0(假)异号则为1(真)即 0∧0=0,0∧1=1, 1^0=1,1∧1=0解体思路:如果其中只有一个数字不重复,很好解决,直接来一轮异或,得到的值就是不重复的值先将数组所有元素进行一次异或运算,可以...原创 2019-10-24 00:53:05 · 85 阅读 · 0 评论 -
剑指offer55 二叉树的深度 (python实现)
class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Noneclass Tree: def TreeDepth(self, pRoot): if pRoot is None: ...原创 2019-10-23 00:44:56 · 159 阅读 · 0 评论 -
剑指offer54 二叉搜索树的第k大节点 (python实现)
题目:给定一棵二叉搜索树,请给出第k大节点。例如:二叉搜索树已经按照节点数值大小顺序排列了k = 5 # 寻找第k大的数 暂时k=3count = 0class BinaryTreeNode(object): def __init__(self, value=None, left=None, right=None): self = self ...原创 2019-10-22 01:30:57 · 239 阅读 · 0 评论 -
剑指 Offer 53 - I. 在排序数组中查找数字 I (python实现)
用常规的二分法去查找,实践复杂度O(N),如果用二分法配合直接找第一个K和最后一个K,减少时间复杂度为 log(N)k = 7array = [1, 2, 3, 4, 5, 6, 7]length =len(array)mid = len(array) // 2count = 0def getStarttK(left, right): if left > right...原创 2019-10-20 02:45:01 · 158 阅读 · 0 评论 -
python实现简单二分法
k = 7array = [1,2,3,4,5,6,7]mid = len(array) // 2count = 0def searchValue(left, right): global mid global count global k count = count + 1 mid = (left + right) // 2 print(...原创 2019-10-18 01:51:32 · 162 阅读 · 0 评论 -
LintCode 第35题 翻转链表 【链表】
样例给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null解题思路:1.首先利用尾插法建立单链表。2.定义preNode节点和curNode节点,然后利用while循环,定义tempNode节点用于存储preNode节点的下一个节点。具体看代码更易于理解。还有另外一种思路就是在建立链表的时候建立成双链表,这样简单很多,但是只限于题目原创 2017-12-07 11:54:05 · 308 阅读 · 0 评论 -
LintCode 第82题 落单的数 【贪心算法】
题目描述:给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。样例给出 [1,2,2,1,3,4,3],返回 4解题思路:其实这道题,刚开始拿到你可能会觉得是在考查找算法。可能还会想到二分查找,但是这道题 不适用于二分查找,因为里面是有重复数字的,如果使用遍历,写上两个for循环再配合数组去记录已经出现的数字,这样来判断是否是单原创 2017-12-06 12:28:24 · 436 阅读 · 0 评论 -
LintCode 第172删除元素
题目描述:给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度。元素的顺序可以改变,并且对新的数组不会有影响。样例给出一个数组 [0,4,4,0,0,2,4,4],和值 4返回 4 并且4个元素的新数组为[0,0,0,2]实现代码:int removeElement(int a[],int element){ int nu原创 2017-12-19 14:44:36 · 276 阅读 · 0 评论 -
LintCode 第100题 删除排序数组中的重复数字
题目描述:给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。样例给出数组A =[1,1,2],你的函数应该返回长度2,此时A=[1,2]。思路:既然是已经排好序的,我们可以定义一个变量temp,初始值为0,然后遍历数组,将不相同的元素都从放到temp的位原创 2017-12-19 16:34:44 · 374 阅读 · 0 评论 -
线索二叉树 --->树
为什么需要线索二叉树呢?我想正如程序员发觉单链表并不总能满足他们设计的程序某些要求的时候,发明了双向链表来弥补一样,线索二叉树也是在需求中被创造的!那普通的二叉树到底有什么缺陷呢?一,浪费空间。二,浪费时间,三,浪费青春一共浪费了40个字节的空间。32b位的机器用32除以8等于4,这是代表一个指针用4个字节来表示。结合上图我们发现一个树通过中序遍历,每隔开一个都原创 2016-06-11 17:11:03 · 389 阅读 · 0 评论 -
LintCode 第413题 反转整数 【整数】
题目描述:将一个整数中的数字进行颠倒,当颠倒后的整数溢出时,返回 0 (标记为 32 位整数)。样例给定 x = 123,返回 321代码实现:#include int reverseInteger(int n){ if (n == 0) { return 0; } int sum = 0; while (原创 2017-12-04 13:52:50 · 429 阅读 · 0 评论 -
LintCode 第56题 两数之和 【排序算法】
题干描述:给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 1 到 n,不是以 0 开头。样例给出 numbers = [2, 7, 11, 15], target = 9, 返回 [1, 2].代码实现:其实这里用的原创 2017-12-03 23:16:30 · 219 阅读 · 0 评论 -
LintCode 第366题 斐波纳契数列 【枚举法】
查找斐波纳契数列中第 N 个数。所谓的斐波纳契数列是指:前2个数是 0 和 1 。第 i 个数是第 i-1 个数和第i-2 个数的和。斐波纳契数列的前10个数字是:0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ...样例给定 1,返回 0给定 2,返回 1给定 10,返回 34代码实现:#includ原创 2017-12-02 16:07:17 · 369 阅读 · 0 评论