zoukankan      html  css  js  c++  java
  • 编程之美-2.18 数组分割

    对这篇博客,自己实现其中的第一种解法如下:

    def array_split(arr):
        half_sum = sum(arr) // 2  # 只找不大于sum/2的和
        dp = [[] for _ in range(len(arr) + 1)]  # dp[len(arr)][len(arr)//2][half_sum]
        for i in range(len(arr) + 1):
            for j in range(len(arr) // 2 + 1):
                row = [False for k in range(half_sum + 1)]
                dp[i].append(row)
        # print(len(dp),len(dp[0]),len(dp[0][0])) # for debug
        for i in range(1, len(arr) + 1):
            j_max = min(i, len(arr) // 2)
            for j in range(0, j_max + 1):
                for s in range(half_sum + 1):
                    if i == 1:
                        if j == 0:
                            dp[i][j][0] = True
                        if j == 1:
                            dp[i][j][arr[i-1]] = True
                            smaller_sum = arr[i-1]
                    else:
                        if j <= i - 1:
                            if dp[i-1][j][s] == True:
                                dp[i][j][s] = True
                                smaller_sum = s
    
                        if s >= arr[i-1] and dp[i - 1][j - 1][s - arr[i-1]] == True:
                            dp[i][j][s] = True
                            smaller_sum = s
    
        smaller_arr = []
        i = len(arr)
        j = len(arr) // 2
        curr_sum = smaller_sum
        while i > 0 and j > 0:
            if dp[i - 1][j - 1][curr_sum - arr[i-1]] == True:
                smaller_arr.append(arr[i-1])
                j -= 1
                curr_sum -= arr[i-1]
            else:
                i -= 1
        return smaller_arr[::-1]
    
    if __name__ == '__main__':
        arr = [2,3,3,6]
        res = array_split(arr)
        print(res)
    
    
    

    这篇博客中提出了另一个不同于动态规划的O(NlogN)的解法,不过缺点就是不能保证分成的两个数组的长度相等。

  • 相关阅读:
    Task 和 Function
    FPGA中双向端口的设计原理及仿真
    EDK实用实例之LED
    分频电路设计(笔记)
    你了解Promise么
    配置vue多页
    Chrome控制台console的那些属性
    关于读书
    django常用命令
    django 简易博客开发 2 模板和数据查询
  • 原文地址:https://www.cnblogs.com/ZeroTensor/p/10825362.html
Copyright © 2011-2022 走看看