随笔分类 - 算法与数据结构
摘要:方法一:双指针法 采用就地反转,不用额外开辟空间 注意:接收链表的head节点,返回当前节点 方法二:递归法 代码如下: class Node(object): def __init__(self, item, next=None): self.item = item self.next = nex
阅读全文
摘要:问题:对于n个非负整数,如何拼接它们使得他们得到整数结果值最大?如:32, 64, 12, 118, 11829, 10 拼接的最大整数是:6432121182911810 解决:将应当拼接的顺序排列好直接join。直接上,首字数大的排在最前,但如果首字数相同如何比较呢,如:718和71819谁要放
阅读全文
摘要:类别:1)0-1背包;2)分数背包 0-1背包使用贪心算法无法获得最优解 分数背包代码如下: def fractional_package(goods, w): """ :param data: [(价值,重量),...] :param w: 要拿取的总重量 :return:(拿走的数量,拿走的总价
阅读全文
摘要:问题:店家现有纸币:100元、50元、20元、5元、1元,对于某一商品的费用找钱,如何使得找的纸币数量最少 解决:贪心算法 代码: def change_money(data, num): """ :param data: 纸币面值 :param num: 当前费用 :return: 对应纸币面值数
阅读全文
摘要:class Node(): def __init__(self, item): self.item = item self.next = None def create_linklist_head(li): head = Node(li[0]) for e in li[1:]: node = Nod
阅读全文
摘要:在已有排序的列表中,如果需要高性能查找特定数,使用二分查找;即使是无序列表,也可以先采用O(nlogn)时间复杂度下排序,再二分查找也是不错的选择 def binary_search(li, left, right, num): while left < right: mid = (left + r
阅读全文
摘要:def partition(data, left, right): tmp = data[left] while left < right: while left < right and data[right] >= tmp: right -= 1 data[left] = data[right]
阅读全文
摘要:""" Function: do it """ li = [3, 4, 2, 9, 1, 7, 6, 5, 8] def select_sort(data): for i in range(len(data)-1): min_loc = i # 假设当前位是最小值位置 for j in range(
阅读全文
摘要:li = [3, 4, 2, 9, 1, 7, 6, 5, 8] def insert_sort(data): for i in range(1, len(data)): tmp = data[i] # 拿到手里的数 j = i - 1 # 开始往前比较的开始位 while j >= 0 and d
阅读全文
摘要:li = [3, 4, 2, 9, 1, 7, 6, 5, 8] def bubble_sort(data): for i in range(len(data)-1): exchange = True for j in range(len(data)-i-1): if data[j] > data[
阅读全文