算法与数据结构
周闖
沧海横流,方显出英雄本色。
展开
-
哈希映射和集合练习
哈希映射和集合练习1. 有效的字母异位词给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: falseclass Solution: def isAnagram(self, s: str, t: str) -> bool: # 1. 哈希 set if len原创 2020-05-09 23:15:31 · 265 阅读 · 0 评论 -
栈和队列练习题
栈和队列的练习题1. 有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:看把你们,快慢左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: trueclass Solution: def isValid(self, s:...原创 2020-05-05 17:46:16 · 479 阅读 · 0 评论 -
[leetcode] 数组、链表练习题
数组与链表Array 实战题目1. 盛最多水的容器class Solution: def maxArea(self, height: List[int]) -> int: # 1. 双指针法, 用max_area保存最大值 left_point = 0 right_point = len(height) - 1 ...原创 2020-04-22 12:43:06 · 288 阅读 · 0 评论 -
递归算法
To iterate is human, to recurse, divine.人理解迭代,神理解递归。什么是递归递归算法(英语:recursion algorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归式方法可以被用于解决很多的计算机科学问题,因此它是计算机科学中十分重要的一个概念。简单地说,就是如果在函数中存在着调用函数本身的情况,这种现象...原创 2020-03-02 21:54:32 · 767 阅读 · 0 评论 -
二叉树
class Node: """节点类""" def __init__(self, elem=-1, lchild=None, rchild=None): self.elem = elem # elem本身值 self.lchild = lchild # 左孩子 self.rchild = rchild # 右孩子clas...原创 2020-02-27 16:57:21 · 158 阅读 · 0 评论 -
栈和队列
栈结构实现栈的操作Stack() 创建一个新的空栈push(item) 添加一个新的元素item到栈顶pop() 弹出栈顶元素peek() 返回栈顶元素is_empty() 判断栈是否为空size() 返回栈的元素个数class Stack: """栈""" def __init__(self): self.items = [] d...原创 2020-02-26 16:12:30 · 127 阅读 · 0 评论 -
双向链表
# encoding=utf-8class Node: """双向链表节点""" def __init__(self, item): self.item = item self.next = None self.prev = Noneclass DLinkList: """双向链表""" def __i...原创 2020-02-25 20:48:40 · 121 阅读 · 0 评论 -
单链表
# encoding=utf8class SingleNode: """单链表的结点""" def __init__(self, item): # item存放数据元素 self.item = item # next 是下一个节点的标识 self.next = Noneclass SingleLinkLi...原创 2020-02-25 16:01:51 · 160 阅读 · 0 评论 -
动态规划入门
动态规划入门动态规划(Dynamic programming, 简称DP), 通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。DP常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所消耗的时间往往远小于朴素解法。1. 基本思想与策略基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息...原创 2020-01-31 21:05:03 · 461 阅读 · 0 评论 -
接雨水
42. 接雨水题目描述给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6来源:力扣(Le...原创 2020-01-31 20:56:41 · 228 阅读 · 1 评论 -
[数组]N数之和问题
leetcode_1. 两数之和题目描述给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9...原创 2020-01-15 18:44:56 · 788 阅读 · 0 评论 -
经典排序算法总结
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。在各个领域中考虑到数据的各种限制和规范,要得到一个符合实际的优秀算法,得经过大量的推理和分析。评价标准时间复杂度:即从序列的初始状态到经过排序算法的变换移位等操...原创 2019-09-11 00:09:30 · 364 阅读 · 0 评论 -
二分查找
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。算法要求1.必须采用顺序存储结构2.必须按关键字大小有序排列python代码实现def binary_search(list,item): low = 0 #low和high用...原创 2018-07-23 22:08:00 · 182 阅读 · 0 评论 -
快速排序
快速排序(Quicksort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。python代码实现def quicksort(array)...原创 2018-07-26 21:56:00 · 141 阅读 · 0 评论