随笔分类 -  数据结构与算法

摘要:贪心算法 特征: • 在对问题求解时,总是做出在当前看来是最好的选择 • 基本思路: • 建立数学模型来描述问题。 • 把求解的问题分成若干个子问题。 • 对每一子问题求解,得到子问题的局部最优解。 • 把子问题的解局部最优解合成原来解问题的一个解。 • 贪心策略适用的前提是:局部最优策略能导致产生 阅读全文
posted @ 2020-06-11 10:27 oldby 阅读(409) 评论(0) 推荐(0)
摘要:四、子序列 ž 1.最长子序列 ž 给定一个字符串‘s’和一个整数k,找到其他字符串‘t’,使得‘t’是给定字 符串‘s’的最大子序列,同时‘t’的每个字符在字符串s中必须至少出现k次。 ž Input: s = "baaabaacba“, k = 3 ž Output : baaabaaba im 阅读全文
posted @ 2020-05-30 11:32 oldby 阅读(201) 评论(0) 推荐(0)
摘要:一、基于字符计数的问题 1.偶数子串的数量 ž 给定一串0到9的数字。任务是计算在将整数转换为偶数时的子串的数量。 ž Input : str = "1234". ž Output : 6 ž “2”, “4”, “12”, “34”, “234”, “1234是6个子字符串,它们是偶数。 def 阅读全文
posted @ 2020-05-30 10:52 oldby 阅读(247) 评论(0) 推荐(0)
摘要:位操作 Bit Operation 一、按位操作是在单个字节的层面上对一个或多个位模式或二进制数字符号进行 的操作。处理器支持这种快速简单的操作,而且可以用来比较和计算数值。 l按位操作比除法快得多,是乘法的几倍速度,有时候也比加法快得多。 二、基本技巧 1.XOR — myBits ^ 0 : 不 阅读全文
posted @ 2020-05-16 14:11 oldby 阅读(1081) 评论(0) 推荐(0)
摘要:一、0/1 背包 • 你背着一个背包闯入一家珠宝店,店里有林林总总的格式珠宝,各不重样。每一个珠 宝都有重量和价值。但是你的书包有承载上限。 • 想成为江湖老大,你需要找到一种装包方法使得包内物品的重量不超过其限定值且使 包内物品的价值最大 def knapSack(W, wt, val, n): 阅读全文
posted @ 2020-05-07 12:21 oldby 阅读(155) 评论(0) 推荐(0)
摘要:一:买卖股票 I • 给定一个数组,表示每天的股票价格。 • 你可以进行一次交易(先买再卖),问如何能得到最大利润。 def maxProfit(prices): if len(prices) < 2: return 0 min_price = prices[0] max_profit = 0 fo 阅读全文
posted @ 2020-05-07 12:00 oldby 阅读(190) 评论(0) 推荐(0)
摘要:动态规划 Dynamic Programming • 拆分(Divide): 将一个复杂问题拆分成一系列的简单子问题,每一次解决一个子 问题并将其结果存储起来。理想情况下用基于内存的数据结构。 • 查找(lookup):在下一次遇到相同的子问题的时候,直接查找之前计算过的结果 而不是重新计算。理想情 阅读全文
posted @ 2020-05-05 09:20 oldby 阅读(133) 评论(0) 推荐(0)
摘要:恢复内容开始 选择排序 O(N^2) class Solution { public int[] sortArray(int[] nums) { int len = nums.length; for(int i = 0; i < len -1; i++){ int minIndex = i; for 阅读全文
posted @ 2020-04-03 09:32 oldby 阅读(128) 评论(0) 推荐(0)
摘要:哈希表 关联数组(Associative Array),映射(Map),特征表(Symbol Table),字典( Dictionary) 可作为哈希的对象是不能改变的,string,int,float,tuple,object set,dict,list可以改变不能作为key,想将list放入哈希 阅读全文
posted @ 2019-12-24 18:50 oldby 阅读(206) 评论(0) 推荐(0)
摘要:栈: 用数组实现栈: class ArrayStack(object): def __init__ (self): self._data = [] def __len__ (self): return len(self._data) def is_empty(self): return len(se 阅读全文
posted @ 2019-12-06 17:51 oldby 阅读(214) 评论(0) 推荐(0)
摘要:补充: 1、哨兵节点 在某些实现中,可能会在第一个数据记录之前,或者最后一个数据记录之后添加 一个额外的哨兵节点或者哑元节点。 简化和加快一些列表处理的算法 。 2、对比 链表vs.动态数组 都需要动态分配内存块 动态数组: 通过索引访问和分配非常快速,时间复杂度为O(1) 添加元素(插入到数组的末 阅读全文
posted @ 2019-12-03 10:45 oldby 阅读(179) 评论(0) 推荐(0)
摘要:分治法 描述: 1、分:将问题柴分为几个子问题,这些子问题和原问题相似只是量级上小一些。 2、治:递归地解决每一个子问题,然后结合这些子问题的解决方案构造出原问题的解决方案。 例:二分搜索、快速排序、归并排序 习题 一、快速指数 题:计算 an def fast_power(x, n): if n 阅读全文
posted @ 2019-11-27 21:55 oldby 阅读(385) 评论(0) 推荐(0)
摘要:当给定一个数组,要想到一些点: 1、是否已排序 2、是否有重复数字 3、是否有负数 一:常规二分搜索 def bi_search_iter(alist, item): left, right = 0, len(alist) - 1 while left <= right: mid = (left + 阅读全文
posted @ 2019-11-25 21:58 oldby 阅读(1237) 评论(0) 推荐(0)
摘要:搜索 一、顺序查找 def search(num_list, val): # If empty if num_list == None: return -1 for i in range(0, len(num_list)): if (num_list[i] == val): return i ret 阅读全文
posted @ 2019-11-22 18:25 oldby 阅读(300) 评论(0) 推荐(0)
摘要:题17: 方法一:回溯 class Solution: def letterCombinations(self, digits: str) -> List[str]: res = [] dic ={"2":"abc","3":"def","4":"ghi","5":"jkl","6":"mno"," 阅读全文
posted @ 2019-10-18 20:09 oldby 阅读(162) 评论(0) 推荐(0)
摘要:题目169: 分治:O(nlgn) class Solution: def majorityElement(self, nums: List[int]) -> int: def majorE(lo,hi): if lo == hi: return nums[lo] mid = (lo + hi)// 阅读全文
posted @ 2019-10-10 10:41 oldby 阅读(349) 评论(0) 推荐(0)
摘要:似然概率https://blog.csdn.net/u014182497/article/details/82252456 极大似然https://blog.csdn.net/qq_32742009/article/details/81460815 最大后验概率估计https://blog.csdn 阅读全文
posted @ 2019-04-11 12:14 oldby 阅读(99) 评论(0) 推荐(0)