Leetcode刷题 day1~day3

3.12

剑指 Offer 03. 数组中重复的数字

发现自己真的多少有点废物点心了,连这么简单的题都不会做,甚至语法都不是很清楚。

class Solution:
    def findRepeatNumber(self, nums: List[int]) -> int:
        arr = [0 for x in range(len(nums))]
        for n in nums:
            arr[n] += 1
            if arr[n] > 1:
                return n

第一天写代码,感觉自己什么都不懂,甚至问了同学哪段代码到底在说啥

arr = [0 for x in range(len(nums))]

是在说对于nums的长度, 生成0,比如 nums = 3,arr = [0 0 0]

3.13

终于开始收拾心情走上正轨了,可是还是很懒,今天也没有怎么做题,属于是废物自己也毫无进度了,快振作起来!!不准当妈妈的小米虫!!一定要快快成长成一个合格的大人为父母遮风避雨呀

剑指 Offer 04. 二维数组中的查找

class Solution:
    def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:
        n = len(matrix)
        if n <= 0:
            return False
        
        m = len(matrix[0])
        i,j = n - 1,0
        while i >= 0 and j < m:
            if target == matrix[i][j]:
                return True
            elif target > matrix[i][j]:
                j += 1
            else:
                i -= 1
        return False

从左下角或者右上角索引的方式

        n = len(matrix)
        if n <= 0:
            return False

其实不是很懂这段的判定方式,经过同学解答是“保证输入数组不为空”

另外比较疑惑的点在于为什么只判定matrix的情况,不判定matrix[0]的情况,“你一维都是空的,还判断第二维干嘛呢”“你输入[[],[],[]]看看会不会报错”,结果发现这段代码放到pycharm里没办法跑哈哈哈哈,搜索了一番

class Solution:
    def findNumberIn2DArray(self, matrix, target):
        n = len(matrix)
        if n <= 0:
            return False

        m = len(matrix[0])
        i, j = n - 1, 0
        while i >= 0 and j < m:
            if target == matrix[i][j]:
                return True
            elif target > matrix[i][j]:
                j += 1
            else:
                i -= 1
        return False

a = Solution()
print(a.findNumberIn2DArray([[], [], []],7))

相对于leetcode,头尾都需要修改。

不过这次遇到这个问题,以后就不会再遇到这些问题了呢

3.14

一天一道题估计这辈子都找不到工作上岸了,突然想起挽回某人的时候说过已经在看实习了,他想去的北京,甚至他的家乡都看过了,隔离期的时候却一点作为也没有,还说十月毕业不着急这种话,可能他当时会觉得我的承诺是一纸空谈了,难怪会分开吧。其实我是真的想做到的,但是是以我自己的进度4月投递,可即使是这样也让人失望了吧。加上隔离期间顶级恋爱脑附身,除了emo就是逃避,整个人在HK状态也不是很对,错误的时间跟错误的人做了错误的决定在一起吧,现在也算是拨乱反正了。做好自己,那更好更适合的人就会到来吧。

53. 最大子数组和

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        if max(nums) < 0:
            return max(nums)

        local_max, global_max = 0, 0
        for num in nums:
            local_max = max(0, local_max + num)
            global_max = max(global_max, local_max)

        return global_max

贪心算法,感觉确实有点东西

            local_max = max(0, local_max + num)
            global_max = max(global_max, local_max)

第一行是说如果当前子数组和小于0,则立马放弃,重新计数,就是local小于0的话,令local=0

第二行,所有子数组和中选取最大的

被家教?小姐姐告知“子数组的题目起码十几个变形”“复杂一点的子数组多用滑动窗口,双指针,前缀和”

剑指 Offer 05. 替换空格

class Solution:
    def replaceSpace(self, s: str) -> str:
        lens = len(s)

        cnt = 0
        for c in s:
            if c == ' ':
                cnt += 1
        
        arr_lens = lens + cnt * 2
        arr = [None] * arr_lens

        i = 0
        for c in s:
            if c ==' ':
                arr[i] = '%'
                arr[i + 1] = '2'
                arr[i + 2] = '0'
                i += 3
            else:
                arr[i] = c
                i += 1
        
        return ''.join(arr)

1)有参考过别人的第一句:

n_counts = sum([1 for char in s if char == ' '])

当时不太懂1 for是什么意思,方括号中是一个循环(这个写法,节省行数,但其实不是特别好,因为开辟了一块空间来存放tmp,空间大小是1的个数,多开辟了一个空间来存放这个列表,然后进行sum运算,当然这种写法,在算完以后就释放了空间)和

tmp = []
for char in s:
    if char == ' ':
        tmp.append(1)
n_count = sum(tmp)

 是等价的,但以上在算完之后,没有释放空间。

append()是列表往后加,list末尾加上一个元素。被建议“去看看python的栈相关的题目”“append pop”“时间复杂度是O(1)”

或者还有一种写法就是字符串的count

Python3 count()方法 | 菜鸟教程

n_count = s.count(' ')

在解题的时候可以这么写,不过面试的时候最好不要,面试喜欢看你们自己造轮子,而不是用现成的

to conclude,老老实实写以下就行:

cnt = 0
for c in s:
    if c == ' ':
        cnt += 1

 2)

        arr = [None] * arr_lens

他算新的数组的长度为什么前面要乘个[none]

因为python不像其他语言可以指定length和capacity来塑造,就是arr = [0] * 10,这个0可以是任何东西,一般我们用0可能比较多,但是用None也一样的,之后再赋值。如果写[]那就是长度为0了,之后不能通过arr[1]这种操作来修改,只能append或者extend

eg:

arr = [None] * 10
print(arr)

 输出是:

[None, None, None, None, None, None, None, None, None, None]

3)不理解的

return ''.join(arr)

Python3 join()方法 | 菜鸟教程

假设s是字符串,seq是一个列表,里面的元素都是字符串或者字符(在python里没有严格区分),那么我们用s把seq里的字符串连接起来就是这样写的

s = '-'
seq = ['welcome', 'to', 'China']
print(s.join(seq))

输出:welcome-to-China

s = ''
seq = ['welcome', 'to', 'China']
print(s.join(seq))

输出:welcometoChina

不能直接print而要选择''.join(),是因为print出来是列表格式

seq = ["Welcome", "to", "China"]
print(seq)

输出:['Welcome', 'to', 'China']

btw力扣是核心代码模式,print是显示在终端,不是返回,如果acm模式才用print打印,print只会返回None

seq = ["Welcome", "to", "China"]
res = print(seq)
print(res)

输出:

['Welcome', 'to', 'China']
None

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值