编程自学记

记录自学编程,以谷歌微软金融机构为职位导向的学习过程。自我敦促导向。间断的自学过python的基本语句,for循环之类,以此为起点。

2023/2/20 1

nlp组进组破灭,学习编程二刷github上python100天的内容,在知乎上有配套的前15天课程,分解为50课,前25天是语法解释,后26天是应用。可以用连看带练习的方式迅速熟练前25课内容,然后重点复现26课以后的python内容,练习的项目要写进简历,所以用心练习。计划用电脑,所以中午会有两天,可能这个星期都不会回宿舍,而选择在实验室练习编程。争取5天搞定这看过的前15天课程,这周搞定,周末去故宫看看。

2022/9/20 2

发现一个nlp课题组有机会进入学习,决定希望进组,在进组希望破灭以前以nlp方向论文开题导向。我计划学nlp入门的顺序是西瓜书机器学习,深度学习圣经,之后是论文阅读。

力扣

【手把手带你刷力扣】【力扣算法】【二分查找法】视频配套代码文本 - 哔哩哔哩

从零开始学Python - 知乎

2022/8/21

leetcode开刷python,配合b站视频

从零开始学Python - 第005课:分支结构 - 知乎

语法易错点

注意for循环语句后加:

else:

循环结束最后一句后面什么也不用加

数组里的值按个循环只需要for num in nums:

两者取大可以不用比较用 result = max(result,count)

第一道题连刷带总结,看懂后重复比较快,不行就一句一句重复,但是必须以理解复现的部分为重复动手单元。

拼错result rersult

数组

 2022/8/22 1

易错点

for i in range(index, len(nums)):

range

nums打成num

用数组下标循环可以

for i in range(len(nums)-1,-1,-1):

发现一篇整理好的笔记。

Leetcode升级之路(数据结构更新完毕)增加C++版本ing_unspoken0714的博客-CSDN博客时间复杂度常见的时间复杂度O(1):执行常数次,和输入无关def O1(num):i = numj = num*2return i+jO(N):def ON(num):total = 0for i in range(num):total+=ireturn totalO(logN):def OlogN(num); i = 1 while(i < num): i = i*2return iO(M+N)def OMN(https://blog.csdn.net/unspoken0714/article/details/110286517链表的顺序主要搞next指针,删除就让等于.next.next

练习题

203

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def removeElements(self, head: ListNode, val: int) -> ListNode:
        dummy = ListNode(0)
        dummy.next = head
        temp = dummy
        while(temp.next):
            if(temp.next.val ==val):
                temp.next = temp.next.next
            else:
                temp = temp.next
        return dummy.next

2022/8/23 2

链表创建deque

linkedlist = deque()

 查找元素

index = linkedlist.index(99)
# 2

队列

  • 先进先出
  • 基于链表创建的
  • 遍历队列
# 变删除边遍历
while len(queue) !=0:
	temp = queue.popleft()
	print(temp)

https://leetcode.cn/problems/number-of-recent-calls/submissions/

易错点

定义队列:

# 创建队列
# 该方法为双端队列
queue = deque()

self.q =deque

不是queue

大于号需要两段空格 > 3000

添加一个元素

self.q.append(t)

不用等于号

Stack

# 向末尾添加
stack.append(1)

# 获取即将stack的元素 O(1)
temp1 = stack[-1]
  • 先进后出
  • 基于链表创建的
  • 创建stack
  • # 创建stack
    stack = []
    
  • 删除即将stack的元素
# 删除即将出stack的元素 O(1)
# 会返回元素
temp = stack.pop()

 l练习题

【手把手带你刷力扣】【数据结构】【栈】代码文本 - 哔哩哔哩

2022/8/24 3

昨天看GitHub - jackfrued/Python-100-Days: Python - 100天从新手到大师

配套配套视频在day2讲hello word

今天看int(input(‘a1 = ’))

496易错点:

对于nextmax = -1和isfound = True这种循环里的赋值要放到循环里面写在for下面

Hash

  • Key - Hash Function - Address
  • Key - Value

可以用数组或字典map创建

2022/8/25 4

今天看leetcode三道例题,知乎github100链接从零开始学Python - 第005课:分支结构 - 知乎

力扣217

易错点:for的势力范围在与for并排的指令,想让for循环结束后如果没有true就返回false要并排写!

class Solution:
    def findTheDifference(self, s: str, t: str) -> str:

class Solution:
    def findTheDifference(self, s: str, t: str) -> str:
        mapping = {}
        for i in s:
            if i not in mapping:
                mapping[i] = 1
            else:
                mapping[i]+=1
        
        for i in t:
            if i not in mapping or mapping[i] is 0:
                return i
            else:
                mapping[i]-=1
        
        return "a"

                                                                 “a”什么意思?

return list(Counter(t) - Counter(s))[0]

Set集合
(小众数据结构)

  • 无序
  • 不重合

主要作用:检查某一个元素是否存在
有没有重复元素

添加是:s = set()

 s.add(2)

github100day分支结构005if else

比如我们设计一个游戏,游戏第一关的通关条件是玩家获得1000分,那么在完成本局游戏后,我们要根据玩家得到分数来决定究竟是进入第二关,还是告诉玩家“Game Over”,这里就会产生两个分支,而且这两个分支只有一个会被执行。类似的场景还有很多,我们将这种结构称之为“分支结构”或“选择结构”。

006课 循环结构 for while

https://zhuanlan.zhihu.com/p/123384479

2022/8/27 6

昨天去了姥姥家,没干活。

今天联系set 217力扣

练习705力扣

def contains(self, key: int) -> bool:
        return bool(self.hashset[key])

树(堆是树的一种)

  • 节点:除了根节点和叶子节点外的节点
  • 根节点:第一个开始的节点
  • 叶子节点:最底层的节点,没有孩子

堆(heap)

  • 完全二叉树
  • 每个节点>=(最大堆) or <=(最小堆)孩子节

从零开始学Python - 第008课:函数和模块 - 知乎

之后的数据结构内容和饲养员视频重复,跳过看(明天)

从零开始学Python - 第016课:面向对象编程入门 - 知乎

 2022/8/28 7

取出数组里最大的第k个元素 215力扣

heap = []
heapq.heapify(heap)
for num in nums:
  heapq.heappush(heap, num*-1)

while k > 1:
  heap.heappop(heap)
  k = k-1

return heap.heappop(heap)*-1

 取最小堆开头结尾都要*-1

  • 无向图

  • 有向图

  • 权重图

  • 入度:多少边指向该顶点

  • 出度:多少边从这个点指向别的顶点

数据结构知识点回顾

各种数据结构:增删查改

从零开始学Python - 第019课:使用PyCharm开发Python应用程序 - 知乎

以上是数据结构部分结束

2022/8/29 1

算法部分

双指针

快慢双指针,对撞双指针

141panduan环形链表

class Solution:
    def hasCycle(self, head: Optional[ListNode]) -> bool:
        if head is None:
          return False
        slow = head
        fast = head
        while fast is not None and fast.next is not None:
            fast = fast.next.next
            slow = slow.next
            if fast == slow:
                return True
        return False 

 head is None

循环条件没有用while 误用if

881 救生艇https://leetcode.cn/problems/boats-to-save-people/submissions/

用对撞指针要排序

people.sort()

2022/8/30

二分查找

适用场景

一般适用场景是有序数组中查找指定元素。

【手把手带你刷力扣】【力扣算法】【二分查找法】视频配套代码文本 - 哔哩哔哩

 看书跳读,理解没有看视频深刻,克服困难,连续阅读

从零开始学Python - 第026课:用Python处理图像 - 知乎

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        s = 0
        b = len(nums) - 1
        
        while s <= b:
            m = s  + (b - s) // 2
            if nums[m] < target:
                s = m + 1
            elif nums[m] == target:
                return m
            elif nums[m] > target:
                b = m - 1
        return -1

二分查找m的取法 m = left + (right - left)// 2

m处值大于 target的时候

right = m - 1 否则超时

力扣  704

力扣 35

未找到的值应该插入的位置就是最后循环的s处。

寻找峰值力扣162

凡是非左吉友的题目都可以用二分法查找,时间复杂度logN

class Solution:
    def findPeakElement(self, nums: List[int]) -> int:
        l = 0
        r = len(nums) - 1
        while l < r:
            m = l + (r - l)//2
            if nums[m] > nums[m+1]:
                r = m
            else:
                l = m+1
        return l

 数组二分查找https://leetcode.cn/problems/search-a-2d-matrix/

 滑动窗口

2022/8/31 3

字符串的循环范围是0,k  k,len(s)

class Solution:
    def maxVowels(self, s: str, k: int) -> int:
        res = 0
        i = 0
        count = 0
        hashset = set(['a','e','i','o','u'])
        for i in range(0,k):
            if s[i] in hashset:
                count += 1
            res = max(res,count)
        for i in range(k,len(s)):
            out = s[i-k]
            inc = s[i]
            if out in hashset:
                count -= 1
            if inc in hashset:
                count += 1
            res = max(res,count)
        return res

https://leetcode.cn/problems/maximum-number-of-vowels-in-a-substring-of-given-length/submissions/

python可以处理文件发邮件 爬虫 from 100Days前十五天

递归

关键字符是 self.函数名(n-1)

class Solution:
    def fib(self, n: int) -> int:
        if n < 2:
            return 0 if n ==0 else 1
        m = self.fib(n-1)+self.fib(n -2)
        return m

翻转链表力扣

class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        if not head or not head.next:
            return head
        p = self.reverseList(head.next)
        head.next.next = head
        head.next = None
        return p

翻转字符串 344 力扣

class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        self.recursion(s, 0, len(s)-1 )
    def recursion(self, s, left, right):
        if left >= right:
            return
        self.recursion(s,left+1, right-1)
        s[left], s[right] = s[right], s[left]

 分治法

2022/9/2 5

169力扣

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        counts = collections.Counter(nums)
        return max(counts.keys(), key=counts.get)

动态规划 

509力扣

        dp = [0]*(n+1)
        dp[0] = 0
        dp[1] = 1
        for i in range(2,n+1):
            dp[i] = dp[i-1] + dp[i-2]
        return dp[n]

 62路径数力扣

class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        dp = [[0]*n for i in range (m)]
        dp[0][0] = 1
        for i in range(m):
            for j in range(n):
                if (i-1 >=0 and i-1<m):
                    dp[i][j] += dp[i-1][j]
                if (j-1 >=0 and j-1<n):
                    dp[i][j] += dp[i][j-1]
        return dp[m-1][n-1]

2022/9/3 6

今天周六,刷爱学习的饲养员视频已经刷到最后一天了,今天就可以看完手把手带你刷leetcode其余算法部分。复习回顾以后,开刷热门推荐里的100道题。加深理解内核很重要。

2022/9/20

在b站发现up致敬大神,她有完整学习的b站视频收藏夹,是学习nlp的途径。

猜你喜欢

转载自blog.csdn.net/weixin_43413070/article/details/126448127