首页 > 其他 > 详细

leetcode--1004最大连续1的个数 III

时间:2021-02-20 00:24:00      阅读:38      评论:0      收藏:0      [点我收藏+]

1.第一题就给我整蒙了

技术分享图片

 

 

1.1我的思路,看能不能获取到一个列表的(里面全是0,1)的最大连续长度

def get_max_one(A):
    A = [str(i) for i in A] 
    s1 = ‘‘.join(A)   #我想把列表变成字符串,然后按0 split ,列表里必须都是字符串 
    A = s1.split(‘0‘)
    num = max([len(i) for i in A])
    return num  

1.2能够获取到最大连续长度了,我只要把所有替换的可能都获取到,分别求出最大连续长度,比较一下就行了

1.2.1获取到所有替换的可能,(0换1,找到为0的下标,根据K,穷举所有情况)

def get_list(self, a, k):
    li = []
    n = 0
    m = k
    while 1:
        l1 = a[n:m - 1]
        for j in range(m - 1, len(a)):
            l1.append(a[j])
            li.append(l1)
            l1 = a[n:m - 1]
            n = n + 1
            m = n + k
            if m > len(a):
                return li       #这个函数是 返回所有的情况,假如[1,2,3] 根据 K,假如就是2
            						只要取1,2  1,3 2,3 一次类推 
                
现在只要获取到为0的下标,调用上述函数,就能返回所有结果
    def longestOnes(A, K):
        zero_num = []
        for i in range(len(A)):
            if A[i] == 0:
                zero_num.append(i)
        all_case = get_list(zero_num, K)
        print(all_case)   #所有情况 

  

1.2.2,循环所有情况,求最大连续长度

max_len = 0  #每次和这个比较,长的就放在这
for case in all_case:
    a = A.copy()   
    for num in case:
        a[num] = 1
        max_len1 = get_max_one(a)  # type: int  get_max_one(a)为上文的获取最大值的函数
        if max_len1 > max_len:
            max_len = max_len1

1.3,面向对象 版本

class Solution:

    def longestOnes(self, A, K):
        zero_num = []
        max_len = 0
        for i in range(len(A)):
            if A[i] == 0:
                zero_num.append(i)
        all_case = self.get_list(zero_num, K)   
        print(all_case)

        for case in all_case:
            a = A.copy()
            for num in case:
                a[num] = 1
            max_len1 = self.get_max_one(a)  # type: int
            if max_len1 > max_len:
                max_len = max_len1

        print(A)
        return max_len

    def get_max_one(self, A):
        A = [str(i) for i in A]
        s1 = ‘‘.join(A)
        A = s1.split(‘0‘)
        num = max([len(i) for i in A])
        return num

    def get_list(self, a, k):
        li = []
        n = 0
        m = k
        while 1:
            l1 = a[n:m - 1]
            for j in range(m - 1, len(a)):
                l1.append(a[j])
                li.append(l1)
                l1 = a[n:m - 1]
            n = n + 1
            m = n + k
            if m > len(a):
                return li

3总结

1. ‘’.join(list) 时,必须要时list里都是字符串才可以
2. a = [1,2,3]
   b = a
   b[0] = 111
   a 也会变,由于时指向同一个内存地址,用浅copy就以了
3. 没有考虑优化,我太难了

 

leetcode--1004最大连续1的个数 III

原文:https://www.cnblogs.com/liqiangwei/p/14418818.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!