PAT-1008 数组元素循环右移问题 python实现

1.题目

将最后M个数移到最前面也可以看成将前面N-M个数移到最后面,可以直接在列表后面再添加加一遍前N-M个数,然后最后从整个列表的N-M处开始截取
     输入:        1 2 3 4 5 6
     目标:        5 6 1 2 3 4
       1 2 3 4 | 5 6 1 2 3 4

2.代码如下

"""
输入:
6 2
1 2 3 4 5 6
输出:
5 6 1 2 3 4
"""
N, M = map(int, input().split())            # 获取N和M的值
M = M % N                                   # M对N进行取模(处理M>N的情况)
lst = list(map(int, input().split()))       # 输入用例按空格分割转换成int类型存到列表当中去赋值给lst
for i in range(0,N-M):                      # 循环前N-M个数作为下标
    lst.append(lst[i])                      # 将其继续添加到列表中
print(' '.join(list(map(str, lst[N-M:]))))  # 截取N-M之后的值转换成str类型存进列表再用空格连接

3.提交结果

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Python实现FP-growth算法的示例代码: ```python class TreeNode: def __init__(self, name, count, parent): self.name = name self.count = count self.parent = parent self.children = {} self.next = None def increment(self, count): self.count += count def display(self, ind=1): print(' ' * ind, self.name, ' ', self.count) for child in self.children.values(): child.display(ind + 1) def create_tree(dataset, min_support): header_table = {} for trans in dataset: for item in trans: header_table[item] = header_table.get(item, 0) + dataset[trans] for k in list(header_table.keys()): if header_table[k] < min_support: del(header_table[k]) freq_item_set = set(header_table.keys()) if len(freq_item_set) == 0: return None, None for k in header_table: header_table[k] = [header_table[k], None] root = TreeNode('Null Set', 1, None) for trans, count in dataset.items(): local_d = {} for item in trans: if item in freq_item_set: local_d[item] = header_table[item][0] if len(local_d) > 0: ordered_items = [v[0] for v in sorted(local_d.items(), key=lambda p: p[1], reverse=True)] update_tree(ordered_items, root, header_table, count) return root, header_table def update_tree(items, in_tree, header_table, count): if items[0] in in_tree.children: in_tree.children[items[0]].increment(count) else: in_tree.children[items[0]] = TreeNode(items[0], count, in_tree) if header_table[items[0]][1] is None: header_table[items[0]][1] = in_tree.children[items[0]] else: update_header(header_table[items[0]][1], in_tree.children[items[0]]) if len(items) > 1: update_tree(items[1:], in_tree.children[items[0]], header_table, count) def update_header(node_to_test, target_node): while node_to_test.next is not None: node_to_test = node_to_test.next node_to_test.next = target_node def ascend_tree(leaf_node, prefix_path): if leaf_node.parent is not None: prefix_path.append(leaf_node.name) ascend_tree(leaf_node.parent, prefix_path) def find_prefix_path(base_pat, header_table): # first node in linked list tree_node = header_table[base_pat][1] cond_pats = {} while tree_node is not None: prefix_path = [] ascend_tree(tree_node, prefix_path) if len(prefix_path) > 1: cond_pats[tuple(prefix_path[1:])] = tree_node.count tree_node = tree_node.next return cond_pats def mine_tree(in_tree, header_table, min_support, pre_fix, freq_item_list): big_l = [v[0] for v in sorted(header_table.items(), key=lambda p: p[1][0])] for base_pat in big_l: new_freq_set = pre_fix.copy() new_freq_set.add(base_pat) freq_item_list.append(new_freq_set) cond_patt_bases = find_prefix_path(base_pat, header_table) my_cond_tree, my_head = create_tree(cond_patt_bases, min_support) if my_head is not None: mine_tree(my_cond_tree, my_head, min_support, new_freq_set, freq_item_list) def load_dataset(): return [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]] def create_init_set(dataset): ret_dict = {} for trans in dataset: ret_dict[frozenset(trans)] = 1 return ret_dict if __name__ == '__main__': min_support = 2 dataset = load_dataset() init_set = create_init_set(dataset) fp_tree, header_table = create_tree(init_set, min_support) freq_items = [] mine_tree(fp_tree, header_table, min_support, set([]), freq_items) print(freq_items) ``` 这个示例代码实现了FP-growth算法的主要功能,包括创建FP树、查找条件模式基和挖掘频繁项集。在使用时,只需将数据集和最小支持度作为输入参数传递给函数即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值