leetcode摸鱼日记
算法刷题日记
波心冷血
入坑NLP的渣渣
展开
-
动态规划超详细长文
动态规划本文搬运自天池leetcode刷题组对学习,仅用于个人学习,笔记。附上以前写的三篇day1day2day3后面补,待续!!!原创 2020-08-23 23:17:26 · 283 阅读 · 0 评论 -
分值算法(三)
实现归并排序def merge_sort(nums) n = len(nums) if n <= 1: return nums mid = n //2 left_li = merge_sort(nums[:mid]) # 嵌套递归,且上一级函数的执行需要下一级函数的返回值 right_li = merge_sort(nums[mid:]) left_pointer,right_pointer = 0,0 result =原创 2020-08-23 22:32:23 · 330 阅读 · 0 评论 -
分治算法(二)
1 实现归并排序def merge_sort(nums): n = len(nums) mid = n // 2 if n <= 1: return nums # 分 left_li =merge_sort(nums[:mid]) right_li = merge_sort(nums[mid:]) # 治 left_pointer,right_pointer = 0,0 result = [] while left_pointer < len(left_li) an原创 2020-08-21 23:14:06 · 135 阅读 · 0 评论 -
数据结构与算法之分治思想
分治1. 主要思想分值算法的主要思想是将一个规模很大的问题化简为n个规模较小的问题,这些子问题虽然独立而不同,但是问题的本质是一致的,从而达到分而治之的目的。2. 分值算法的步骤分:递归的将问题分解为各个子问题(性质相同,相互独立的子问题)治:将这些规模更小的问题逐个击破合:将已解决的子问题逐层合并,最终得出原问题leetcode 169.多数元素给定一个大小为n的数组,找到其中的众数,众数是指在数组中出现次数大于 n/2 的元素def majorityelement(self,num原创 2020-08-19 22:56:49 · 213 阅读 · 0 评论 -
树(二)之二叉搜索树
class Node(object): def __init__(self,item,left=None,right=None): self._item = item self._left = left self._right = rightclass binary_search_tree(object): def __init__(self,root=None): self._root = root原创 2020-08-15 23:48:54 · 93 阅读 · 0 评论 -
刷题day6
1 二叉树的最大深度一般来说涉及二叉树的题目都是使用递归。class Node(object): def __init__(self,node): self.elem =node self.left = None self.right = Noneclass solution(object): def maxdeepth(self,root): if root == None: return 0 else: return 1 + max(max(self.maxde原创 2020-08-09 21:50:02 · 139 阅读 · 0 评论 -
数据结构与算法之树(一)
1. 树的概念树(tree)是一种抽象的数据结构,用来模拟具有树状结构性质的的数据集和。它是由n个有限节点组成具有层次关系的集合。每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点;除了根节点外,每个子节点可以分为多个不相交的子树;下面是霍夫曼树的结构图1.2 树的术语节点的度:一个节点含有的子树的个数称为该节点的度;树的度:一棵树中,最大的节点的度称为树的度;叶节点或终端节点:度为零的节点;父亲节点或父节点:若一个节点含有子节点,则这个节原创 2020-08-09 18:52:14 · 167 阅读 · 0 评论 -
数据结构与算法学习 day 6
1.二分查找二分查找类似于查字典,先翻译版,判断目标在那一半,然后再翻一半,再进行判断。缺点是要求待查表为有序表,首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。最坏时间复杂度 0(logN)def binary_search(a原创 2020-08-08 23:26:21 · 99 阅读 · 0 评论 -
刷题 day5
1.矩阵搜索(1)编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行中的整数从左到右按升序排列。思路:矩阵中的元素的全部按照顺序排列的,所以如果展成排序的列表,使用二分查找即可。其中:row = idx // nclo = idx % ndef search_matrix(matrix,target): m = len(matrix) if m == 0: return False n = len(mat原创 2020-08-06 00:32:00 · 183 阅读 · 0 评论 -
基础算法之排序(一)
1 冒泡排序按照一个列表中从左到右,依次的将list[i] 和list[i+1]进行比较,将大的数放到右边,直至最大数被排到最大的位置。将上述循环执行直到所有数都已经正确的排序def bubble_sort(alist): n = len(alist) for j in range(n-1):#这里的j表示已经有j个数已经排好了 count = 0 for i in range(n-1-j):#每排好一个数,需要比较的数就少一个 if alist[i] > alist[i+1]原创 2020-08-05 19:27:04 · 150 阅读 · 0 评论 -
动态规划day3
1.最大子序列和给定一个数组nums,找到一个具有最大和的连续子序列(子数组最少包含一个元素),返回最大和。转移方程f[i]--------->第i个数的和f[i] = max(f[i-1] + nums[i],nums[i])def max_array(nums): for i in range(1,len(nums)): nums[i] = nums[i] + max(nums[i-1],0) return max(nums)2. 买卖股票(2)假设一组数据nums,不原创 2020-07-29 17:56:17 · 138 阅读 · 0 评论 -
动态规划day2
1.爬楼梯问题有一个n级楼梯,每次可以上1级或者2级,有多少种方法登顶?dp[i]------->第i级有多少种方法转移方程每次可以上1级或者两级,站在第n级有两种方法,走到。 1)从n-2过里 2)从n-1过来即 dp[i] = dp[i-1]+dp[i-2]边界条件num1------------->1种num2------------->2种 从num1 和 num0 虽然0不存在,但是作为边界需要填1num3------------->3种原创 2020-07-27 23:03:21 · 110 阅读 · 0 评论 -
动态规划day1
1.抢劫问题职业罪犯打算洗劫一条街道,每一个房子中都有不同的钱数,但是不能抢劫相邻的房子,求解可以抢到的最多钱数。钱 : 1 2 3 4 5 6抢: 1 2 4 6 9 12不: 0 1 2 4 6 9数组:f[i][j] 某一间房子抢不抢,i:房间编号 j=0,1不抢/抢转移方程:y(i) = n(n-1)+a(i)n(i)=max[y(n-1),n(n-1)]def rob(self,n原创 2020-07-26 23:22:03 · 110 阅读 · 0 评论 -
动态规划基础简介
磨人的动态规划准备秋招,从数据结构开始!看了一大堆视频、教程都没搞懂,没办法回归本源吧!我发现了一本书,我觉得讲的不错。你也看得懂的python算法书下边就是自己的笔记动态规划算法是将要解决的问题拆分成一系列相互交叠的子问题,通过推导关系定义子问题的求解策略,并随时记录子问题的解,最终获得原始解,避免子相互交叠子问题的重复求解(这里骂的是递归)动态规划的三要素(中间结果保存数组)#擅自加上的最优子结构状态转移方程边界条件(计算顺序) # 同1最优子结构每个阶段最优状态,可以从之原创 2020-07-26 21:38:16 · 89 阅读 · 0 评论