数据结构与算法
算法学习笔记
coming back
这个作者很懒,什么都没留下…
展开
-
1------双指针
指针问题 1.用指针合并两个数组 # 用指针合并两个数组 arr_1 = [1, 4, 3, 6, 10] arr_2 = [2, 5, 8, 11] arr_1.sort() # 对两个数组进行排序 arr_2.sort() ind = 0 # 指针初始为0 ans = arr_1.copy() for i in range(0, len(arr_2)): while ind < len(arr_1): if arr_2[i] <= arr_1[ind]:原创 2021-07-20 18:35:47 · 52 阅读 · 0 评论 -
2-----------哈希算法
解法一的时间浪费在排序和寻找两个数据的位置上了,哈希算法不需要排序和寻找原始位置。 解法二(哈希算法): # 解法一(双指针解法) def twosum(nums, targe): res = [] # 储存结果编号数据 newnums = nums[:] newnums.sort() left = 0 right = len(newnums) - 1 while left < right: if newnums[left] + new原创 2021-08-02 09:56:24 · 108 阅读 · 0 评论 -
3-------深度优先遍历算法
深度优先算法的本质就是“一条路走到黑” 比如:小明要去旅游,右四个目的地(三亚,山东,哈尔滨,新疆),深度优先算法就是小明先查去三亚的机票再查三亚酒店的价格根据都不合适再回到起点,重新出发去查去山东的机票和酒店的价格… 三个问题的答案 详解后面更新 1.小偷在该小区中不能偷两家相邻的住户,找出最大收益且最省力的偷法 # 二叉树别墅的小偷 # 节点的偷=左侧子节点不偷的值+右侧子节点不偷的值+节点的财富;节点的不偷=左侧子节点的最大值+右侧子节点的最大值 def helper(self, root): .原创 2021-07-23 10:04:31 · 96 阅读 · 0 评论 -
4-------------广度优先遍历算法
广度优先遍历算法:与深度优先遍历算法比较来看,拿深度优先算法那个例子来说就是:先查4个地方的机票价格再查各个地方的酒店价格,一层一层的查。 1. # 利用广度优先遍历解决选课的烦恼 def bfs(numcourses, prelist): prelistcount = [0] * numcourses for line in prelist: for i in range(len(line)): if line[i] == 1: .原创 2021-07-23 20:24:47 · 197 阅读 · 0 评论 -
5---------回溯算法
回溯算法又称为试探发 排序问题: 普通方式解决 def solvepermutationbadway(array): solution = [] for i in range(len(array)): newsolution1 = solution + [array[i]] newarray1 = array[:i] + array[i + 1:] for i in range(len(newarray1)): ne原创 2021-08-02 10:05:21 · 61 阅读 · 0 评论 -
6-------贪心算法
有0.05 0.1 0.2 0.5 1 2 的硬币 例如需要支付0.55 付:1+0.05 找 0.5 所使用的硬币和最少 求min(支付硬币数 + 找零硬币数) 支付值-找零值=商品值 贪心算法:max(消费者拥有的硬币面值-商店拥有的硬币面值)优先使用 需要验证贪心选择性和最优子结构性质,来证明贪心算法可以获得最优解 def Solution(): d = [0.05, 0.1, 0.2, 0.5, 1, 2] d_num = [原创 2021-08-02 09:55:13 · 68 阅读 · 0 评论