一些想说的话:
本人情况:是大一上了C语言的课,现在大三从2月17这样才开始准备蓝桥杯。
搜了一下网上没有那种短期可以全程跟的教程,但总结准备比赛过程就是熟悉基础语法,学经典算法,刷题这三个步骤。
搜到川川菜鸟老师的视频和知乎,说可以写成博客记录,我觉着这个想法非常好就开始记录了。看到有人点赞很惊喜,我学的比较粗糙,笔记不能拿来当范文学习,都是一些我自己的所思所想,怕误导大家,特此说明一下。
我的进展:先看了黑马教程的速成课,感觉有些和之前重合,老师讲的很好,但学了两天感觉太慢了,而且不知道要学哪里、掌握哪些语法,就没有继续做学习笔记。而是转来刷题,边刷边学知识点,这两天就学了哈希表,链表。
现在准备先写简单题,我拿到题目要么没想法,要么有想法但是基础不好,编的语法总出错,或者是编出来不全对。但无论如何,我会先尝试自己写,不对就把我的想法喂给AI,让他教我怎么改。如果我的想法行不通,会出经常出现什么超出索引范围,就再看AI的写法,不懂得就一点点问他,最后再自己打一遍。笔记是留着自己看,就写的非常简单。
下面我会尽量记录的详细一点,写下我看的视频和我的理解,但还是会以让自己学习复习为主,所以可能看起来会比较抽象。如果大家有什么建议,想法,或者是我哪里出现了问题,欢迎大家评论留言,让我们一起学习,互相进步吧!
练习一
这种是看b站一个视频的思路写的,这个很好理解。知识点:掌握滑动窗思想
一道算法题理解滑动窗思想!【趣刷Leetcode】 No.3 无重复字符的最长子串_哔哩哔哩_bilibili
注意.pop[0],可以这么写,是因为每次移除第一个位置的字符后,列表的特性会使整体迁移,也就是原本的1位置的字符变成了0位置,所以要想还是不符合while要求的话,还是删除下标索引0的位置的元素。
这种可以理解,还可以用哈希表,会更加简洁
错误案例:
我的错误在于,比如这个例子里,右指针指到最后一个a,左指针在上一个a出现的索引值0的基础上,向右移动一个索引值,这样会导致原本在2位置b处的左指针反而向左移了将重复的元素也包含进来了。
左右索引值再做一个这样的判断“left = max(left, hashtable[s[right]] + 1)”,使左指针不会往回走
练习二
这个题没什么思路,注意特殊情况是要作为条件去考虑
练习三
学会用切片,将字符串,或者列表里的元素通过for历遍取出来
练习四
想尝试自己的想法,使用字典做好配对,如果有匹配的括号,就在列表中删除这一对括号,但是忽略了嵌套顺序的条件,应该使用栈来做
知识点学习——数据结构:栈(stack)
速学数据结构-栈的原理与实现(Python)_哔哩哔哩_bilibili
笔记速看:
栈的中心思想就是后入先出(LIFO),如图:
常见用法
初始化一个栈:stack=[]
入栈:stack.append(元素)
出栈:stack.pop(元素)
检查栈是否为空:is_empty=len(stack)==0
获取栈的大小:stack_size=len(stack)
题目思路分析:
为了使左右括号配对,使用哈希表,通过左括号为键,右括号为值,实现不同类型的左括号和右括号的一一对应
需要按照顺序匹配,最先遇到的左右括号判断
豆包给出为什么用栈的的分析:
括号匹配的规则
在括号匹配问题中,要求每个左括号都必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。例如,在字符串 "([{}])"
中,从左到右看,先出现的左括号 (
需要最后被匹配,而最后出现的左括号 {
要最先被匹配,也就是需要遵循一种 “后进先出” 的匹配顺序。
栈的操作特点
栈是一种数据结构,它支持两种主要操作:入栈(Push)和出栈(Pop)。入栈操作将元素添加到栈的顶部,出栈操作则移除并返回栈顶元素。这种操作方式天然地遵循了后进先出的原则,即最后进入栈的元素会最先被移除
明天整理一下常用数据结构,总是书写不出来。