数据结构与算法练习(学习笔记四)

数据结构

1.单链表结构与顺序存储结构优缺点

  • 存储分配方式
    • 顺序存储结构用一段连续的存储单元依次存储线性表的数据元素
      -单链表采用链式存储结构,用一组任意的存储单元存放线性表的元素
  • 时间性能:
    • 查找
      • 顺序存储结构O(1)
      • 单链表O(n)
    • 插入和删除
      • 顺序存储结构需要平均移动表长一半的元素,时间为O(n)
      • 单链表在计算出某位置的指针后,插入和删除时间仅为O(1)
    • 空间性能:
      • 顺序存储结构需要预测分配存储空间,分大了,容易造成浪费,分小了,容易发送溢出。
      • 单链表不需要分配存储空间,只要有就可以分配,元素个数也不受限制
    • 综上所述对比,我们得出一些经验性的结论:
      • 若线性表需要频繁查找,很少进行插入和删除操作。宜采用顺序存储结构
      • 若需要频繁插入和删除时,宜采用单链表结构。
  1. 单链表的插入删除操作
  2. 静态链表

每日一题

找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。

说明:

所有数字都是正整数。
解集不能包含重复的组合。
示例 1:

输入: k = 3, n = 7
输出: [[1,2,4]]
示例 2:

输入: k = 3, n = 9
输出: [[1,2,6], [1,3,5], [2,3,4]]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/combination-sum-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

代码如下:

k = 3
n = 9
nums = [i for i in range(1, 10)]
candidates = nums
target = n
# 对初始列表进行简化处理
res = []  # 记录结果


# 删除函数
def candidates_del(x, y):
    j = 0
    for i in x:
        j = j + 1
        if i >= y:
            del x[j:]
            break


candidates_del(candidates, target)
t = min(candidates)
n = len(candidates)


def backtrace(rs_candidates, rs_target, curr_res, s):
    # 跳出条件
    if (rs_target == 0) & (len(curr_res) == k):
        res.append(curr_res[:])
        return
    elif rs_target < t:
        return
    for i in range(s, n):
        curr_res.append(rs_candidates[i])
        backtrace(rs_candidates, rs_target - rs_candidates[i], curr_res, i + 1)
        curr_res.pop()


backtrace(candidates, target, [], 0)
print(res)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值