美文网首页
Leetcode刷题日记(六)

Leetcode刷题日记(六)

作者: 小璇voice | 来源:发表于2020-04-21 04:53 被阅读0次

    终于到刷题的最后一周了,这周每天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题目标完成,撒花。

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

    树形结构

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

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

    那么,就先这样。

    相关文章

      网友评论

          本文标题:Leetcode刷题日记(六)

          本文链接:https://www.haomeiwen.com/subject/ufejihtx.html