3.12
发现自己真的多少有点废物点心了,连这么简单的题都不会做,甚至语法都不是很清楚。
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
终于开始收拾心情走上正轨了,可是还是很懒,今天也没有怎么做题,属于是废物自己也毫无进度了,快振作起来!!不准当妈妈的小米虫!!一定要快快成长成一个合格的大人为父母遮风避雨呀
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状态也不是很对,错误的时间跟错误的人做了错误的决定在一起吧,现在也算是拨乱反正了。做好自己,那更好更适合的人就会到来吧。
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
第二行,所有子数组和中选取最大的
被家教?小姐姐告知“子数组的题目起码十几个变形”“复杂一点的子数组多用滑动窗口,双指针,前缀和”
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
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)
假设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