Python|每日一练|数组|数学|矩阵|单选记录:将一组数尽可能均匀地分成两堆,使两个堆中的数的和尽可能相等|加一|螺旋矩阵 II

1、将一组数尽可能均匀地分成两堆,使两个堆中的数的和尽可能相等(算法初阶,基础知识)

贡献者:doreen08

麦克叔叔去世了,他在遗嘱中给他的两个孙子阿贝和鲍勃留下了一堆珍贵的口袋妖怪卡片。遗嘱中唯一的方向是尽可能均匀地分配纸牌的价值。作为Mike遗嘱的执行人,你已经为每一张口袋妖怪卡片定价,以获得准确的货币价值。你要决定如何将口袋妖怪卡片分成两堆,以尽量减少每一堆卡片的价值总和的差异。
例如,你有下列n=8 个口袋妖怪卡片:


经过大量的工作,你发现你可以用下面的方法来划分卡片:

这给了安倍10美元的牌给了鲍勃11美元的牌。这是最好的除法吗?
你要做的是解决n张牌的问题其中每张牌ci都有一个正整数值vi.你的解决方法是计算牌应该如何被分割以及每摞牌的价值。
输入输出示例如下:


1.通过检查所有可能的桩以蛮力解决此问题。 对这种蛮力算法的时间复杂度进行分析,并通过实施和实验验证您的分析结果(既写出来算法的设计思路等),并用python算法实现编程
2.通过动态编程开发更有效的算法。 您应该首先通过动态编程的思想来分析此问题,并编写相应的递归属性。 对这种算法的时间复杂度进行分析,并通过实施和实验验证您的分析结果。并用python代码实现动态编程

以下程序实现了这一功能,请你填补空白处内容:

def deal(data,flag):

        a=[]

        for i in data:

               if i>=flag:

                       return [i]

               elif a==[]:

                       a.append([i])

               else:

                       _______________________;

                       a.append([i])

        target=sum(max(a,key=sum))

        return list(filter(lambda x:sum(x)==target,a))

if __name__=='__main__':

        c=[2,1,3,1,5,2,3,4]

        flag=sum(c)//2

        res=deal(c,flag)

        print(res)

选项代码:

a=a+[k+[i] for k in a if k+i<=flag]

执行结果:

[[2, 3, 5], [1, 3, 1, 5], [2, 1, 5, 2], [3, 5, 2], [2, 1, 5, 2], [2, 1, 3, 1, 3], [2, 5, 3], [1, 1, 5, 3], [2, 3, 2, 3], [1, 3, 1, 2, 3], [5, 2, 3], [2, 1, 3, 4], [2, 3, 1, 4], [1, 5, 4], [1, 5, 4], [1, 3, 2, 4], [2, 1, 1, 2, 4], [3, 1, 2, 4], [2, 1, 3, 4], [3, 3, 4], [2, 1, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]

2、加一(数组,数学)

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1

输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123

示例 2

输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321

示例 3

输入:digits = [0]
输出:[1]

 

提示:

3、螺旋矩阵 II(数组,矩阵)

给你一个正整数 n ,生成一个包含 1  n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 

示例 1

https://i-blog.csdnimg.cn/blog_migrate/38cd7064d7d838cc5762c6131e67a562.jpeg

输入:n = 3

输出:[[1,2,3],[8,9,4],[7,6,5]]

示例 2

输入:n = 1

输出:[[1]]

 

提示:

  • 1 <= n <= 20

选项代码:

class Solution(object):
    def generateMatrix(self, n):
        """
        :type n: int
        :rtype: List[List[int]]
        """
        res = [[0] * n for _ in range(n)]
        pos = [0, 0]
        move = (0, 1)
        for index in range(1, n * n + 1):
            res[pos[0]][pos[1]] = index
            if res[(pos[0] + move[0]) % n][(pos[1] + move[1]) % n] > 0:
                move = (move[1], -1 * move[0])
            pos[0] = pos[0] + move[0]
            pos[1] = pos[1] + move[1]
        return res
if __name__ == '__main__':
    s = Solution()
    print (s.generateMatrix(3))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

打酱油的工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值