Leetcode刷题日记(六)

2020-04-21  本文已影响0人  小璇voice

终于到刷题的最后一周了,这周每天2-3题

目前进度:

89/100

1.2020/04/20

a).题目:

遍历数组,得到数组的最大字符串长度。

如果字符串的长度小于最大长度,则直接加入有效字母。

若大于长度,则在最后添加空格。

最后使用rstrip()函数去掉右边的空格,并返回result。

答案:

b).题目:

每次循环只观察list中首尾两个元素,如果首尾相等,则删除一个元素。

没有新建元素,空间为O(1)

答案:

c).题目:

新建headList存储链表里所有元素。

存储0-m之间的所有元素

存储m-n之间的所有元素,并翻转m-n元素

存储n-len(headList)的所有元素

新建一个链表,将result reverse后(头插法)加入新链表并返回。

答案:

目前进度:

92/100

2.2020/04/21

a).题目:

将链表里所有元素存入headList中。

使用collections.Counter()函数将出现次数为1的元素存入tempList,并反转tempList(头插法)

新建一个链表,将tempList元素加入新建链表并返回

答案:

b).题目:

将l1和l2的所有值存入num1和num2两个list里,并反转list(个位数和最高位位置相反)

翻转后变为10进制数后,对两数进行相加,并将相加后的结果存入list。

新建一个链表,将list中所有元素加入新建链表(头插法,不需要再次翻转list,因为各位和最高为位置相反),并返回新链表。

答案:

c).题目:

解法1:将所有1-n的数存入list。

             遍历list,遇到1数count+1。

             遍历完成后返回count。

             (需要hard code长度大的数)

解法2:当最高位为1时,计算[0,999]中1的个数。

             计算234中1的个数

             最后加上最高位的情况

             当最高位为2时,计算[1000,1999]中1的个数

             计算234中1的个数

             加上高位为1时的情况

解法1答案:

解法二解析:

from:https://leetcode-cn.com/problems/1nzheng-shu-zhong-1chu-xian-de-ci-shu-lcof/solution/pythondi-gui-by-rainiee-pan/

解法二答案:

目前进度:

95/100

3.2020/04/22

a)题目:

新建数组left和right,并使left[0]=A[0],right[len(A-1)]=A[len(A)-1]。

left为从左向右数的某个点的最大值,right为从右向左数某个点的最小值。

当左边的值全部小于或等于右边时,返回索引值。

答案:

b).题目:

使用collections.Counter()函数,当counter[i]>len(nums)/3时,将num加入result,返回result。

答案:

c)题目:

使用双指针,设定返回值为最大。

当a[i]>b[j]时,i+1

当A[i]<=[b[j]时,j+1

答案:

目前进度:

98/100

明天过生日,可能鸽一天。    不鸽了,起来干💪。

4.2020/04/23

a).题目:

 将链表所有元素放入list后,删除list里倒数第n个元素。

注意,这里删除不能使用remove,remove删除是list中第一个该元素

应使用del删除倒数第n个元素。

例:list=[4,5,4], n=1

       使用remove后,第一个4被删除,list变为[5,4],而不是[4,5]。

翻转headList(头插法)后,新建链表并将headList加入新建链表并返回。

答案:

b)题目:

二分法。

新建left,right,使left=0,right=len(arr)-1

当arr中不存在target时,返回-1。

当left不等于right时,分三种情况进入循环。

情况1:当arr[left]<arr[mid],则左边区间为升序

             此时判断如果target在左边升序区间,则更新right=mid

             如果target在右半边区间,则更新left=mid+1

情况2:当arr[left]>arr[mid],则右边区间为升序

             此时判断如果target在左边升序区间,则更新right=mid

             如果target在右半边区间,则更新left=mid+1

情况3:如果arr[left]==arr[mid],则可能时找到了target,或者遇到了重复的target。

             如果arr[left]!=target,说明还没有找到,需要排除重复值。

             如果arr[left]=target,说明已经找到target,使right=left,并退出循环。

答案:

目前进度:

100/100

至此,Leetcode刷题100题目标完成,撒花。

总结下自己的还需要加强的地方:

树形结构

动态规划(动态转移方程)

这些之后有时间会继续刷题加强。

那么,就先这样。

上一篇 下一篇

猜你喜欢

热点阅读