gpt4 book ai didi

python - 从数量小于或等于N的数字列表中最小化或找到n个理想子和

转载 作者:行者123 更新时间:2023-12-01 14:54:00 25 4
gpt4 key购买 nike

给定一个数字列表,lst = [1, 1, 2, 4, 3, 2, 1, 1, 1, 2, 1, 4, 3, 1]我如何找到小于或等于4的理想列表数量?

这里有很多可能性。目标是最大程度地减少可能的列表数量。该程序将需要创建类似于以下内容的子集列表:{4}, {4}, {3, 1}, ... , {1, 1}

请注意,最后一个列表子集不等于4,而是更少。由于以下原因,此问题很困难:

  • 程序必须能够找到小于或等于和的subset-sums
  • 该程序需要首先通过首先查看最大
  • 将原始列表中的值从子列表中删除

    最佳答案

    这是我的尝试。
    总体思路是对列表进行排序,然后从左向右移动,并在每次迭代中贪婪地选择最大的子集。时间复杂度为O(n)

    #include <iostream>
    #include <vector>
    #include <algorithm>

    int main()
    {
    std::vector<int> lst{1, 1, 2, 4, 3, 2, 1, 1, 1, 2, 1, 4, 3, 1};
    std::sort(lst.begin(),lst.end()); //sort the list
    int target = 4;

    int left = 0;
    int right = lst.size()-1;

    std::vector<std::vector<int>> solutions;
    while (left<right ){
    if(lst[left] > target) // break if no solutions
    break;

    if(lst[right] > target) // ignore larger right values
    right--;


    if(lst[right]<=target){ // while the total sum is less than target, keep adding the elements
    std::vector<int> subset;
    subset.push_back(lst[right]);
    int sum = lst[right];
    while(left<right && lst[left]+sum<=target){
    sum+=lst[left];
    subset.push_back({lst[left]});
    left++;
    }
    solutions.push_back(subset);
    right--;
    }

    }

    for(auto& ss : solutions){
    std::cout<<'{';
    for(auto n:ss){
    std::cout<<n<<',';
    }
    std::cout<<"\b}";
    std::cout<<std::endl;
    }

    }

    关于python - 从数量小于或等于N的数字列表中最小化或找到n个理想子和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59316074/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com