算法

作者: xymspace | 来源:发表于2020-04-23 16:27 被阅读0次

划分两个相等的子序列

问题描述

给定一个整数序列,将数组分割成两个子序列,若和相等,返回两个子序列,反之返回false

问题分析

  1. 将数组从中间拆分,对比两数组的和,若相等,结束.
  2. 若不相等,将较大数组中的最小值移动到较小的数组中
  3. 循环比较,如果不相等,重复步骤2
  4. 如果循环到等于初始结果,则跳出循环,输出false;反之则相等,输出两个数组

代码

解法一

def main(data):
    total_sum = sum(data)
    if total_sum % 2 != 0:
        print("没有结果")

    if int(total_sum / 2) in data:
        print(int(total_sum / 2))

    index = int(len(data) / 2)
    # 分成两列
    left_list = data[:index]
    right_list = data[index:]

    left_sum = sum(left_list)
    right_sum = sum(right_list)

    # 判断重复节点
    result_node = []

    # 动态调整
    while left_sum != right_sum:
        # 把最小值放到较小的那一列
        if left_sum > right_sum:
            right_list.append(left_list.pop(0))
        else:
            left_list.append(right_list.pop(0))

        # 排序
        list.sort(right_list)
        list.sort(left_list)

        # 判断重复点
        if right_list in result_node:
            print("没有结果")
            break
        else:
            print('左:' + str(left_list) + ' <===>' + '右:' + str(right_list))
            result_node.append(list(right_list))

        left_sum = sum(left_list)
        right_sum = sum(right_list)

    print('结果为:' + str(left_list) + '  ' + str(right_list))


if __name__ == '__main__':
    data = [1, 5, 5, 9, 12, 14, 16, 18, 24, 23, 2, 1]
    main(data)

解法二

import itertools
import random


def canPartition(list):
    sum = 0
    for i in range(len(list)):
        sum += list[i]
    if sum % 2 == 1:
        print("无解")
        return
    count = len(list) // 2
    for i in range(1, count + 1):
        for j in itertools.combinations(list, i):
            temp = 0
            for k in range(len(j)):
                temp += j[k]
                if temp == sum / 2:
                    print(j)
                    return
    print("无解")


if __name__ == "__main__":
    list = [1, 5, 5, 9, 12, 14, 16, 18, 24, 23, 2, 1]
    # for i in range(0, 5):
    #     list.append(random.randint(1, 10))
    print(list)
    canPartition(list)

相关文章

  • 匈牙利算法

    算法思想 算法流程 算法步骤 算法实现 python 算法应用

  • web开发需要知道的几个算法

    算法分类 快速排序算法 深度优先算法 广度优先算法 堆排序算法 归并排序算法

  • 机器学习算法

    机器学习的算法分监督算法和无监督 算法。监督算法包括回归算法,神经网络,SVM;无监督算法包括聚类算法,降维算法。...

  • 字符串匹配

    BF 算法和 RK 算法BM 算法和 KMP 算法

  • 垃圾回收算法有几种类型? 他们对应的优缺点又是什么?

    常见的垃圾回收算法有: 标记-清除算法、复制算法、标记-整理算法、分代收集算法 标记-清除算法 标记—清除算法包括...

  • 头条-手撕代码

    [toc] 图算法 以及最短路径算法 树算法 手写LRU 排序算法 链表算法

  • 关于一些算法

    我们平常说的算法按照使用方向加密算法,排序算法,搜索算法,优化算法,音视频处理算法,图片处理算法 1.加密解密算法...

  • 给我巨大影响的技术书籍

    算法《算法概论》《算法设计与分析基础》 Anany Levitin《算法引论》Udi Manber《算法导论》《什...

  • 缓存相关

    cache淘汰算法:LIRS 算法 缓存那些事 Redis缓存淘汰算法,LRU算法,LRU算法讲解

  • LZW压缩算法

    参考链接:超级简单的数据压缩算法—LZW算法压缩算法——lzw算法实现LZW算法 LZW 压缩算法正确图解

网友评论

      本文标题:算法

      本文链接:https://www.haomeiwen.com/subject/rzibyftx.html