本人目前是大三计算机专业学生,准备在优快云上发表总结关于每日学习,今天是打卡第一天!!
一、数据结构与算法
1.复习了数组和链表:(1)数组方便查询,但是删除和添加需要移动大量元素;链表反之;
(2)存储相同的数据,链表需要的存储空间多些,因为它还要存储指向数据的指针。
2.相对应的习题:
(1)盛最多水的容器 
解题思路:
1>首先能想到的是暴力求解(朴素算法),记录每条垂线与后面垂线所构成的面积,然后取最大值,如图
2>本题还可以采取双指针思想(左右夹逼),首先在首尾垂线处定义指针,记录他们所构成的面积,然后比较两处垂线大小,若左边小则左边指针往中间移动,反之则右边,因为两个指针指向的垂线只有小的那一方往中间移动才可能遇到更大的垂线,直到两个指针相遇停下,最后得出最大值。如图
(2)移动0
解题思路:
1>可以使用快慢指针解答。定义快慢指针,快指针用于遍历数组,慢指针用于记录非零元素的位置,在遍历数组时,当快指针所指的数据不为0,则将它放到慢指针地方,同时慢指针向前移动一步;最后当快指针遍历完成后,将慢指针所指后面的数据添为0。如图
2>还可以一次遍历得出结果。同样定义两个快慢指针,当快指针所指数据不为0时,则将它与慢指针所指数据交换,同时慢指针向前进一步,直到快指针遍历完数据。如图
(3)反转链表
解题思路:
本题使用三个指针来解答。分别定义记录上一个位置的、当前位置的、下一个位置的指针为pre、curr、next,先将pre指针和next指针指向null,将curr指针指向头结点,然后遍历链表,当curr指针不为null时,用下一个next指针记录当前curr指针的下一位置(next=curr.next;);然后将当前curr指针指向上一个pre指针(curr.next=pre;),将二者相连,再将上一个pre指针往下移,也就是指向当前curr指针(pre=curr;),同理将当前curr指针往下移,也就是指向下一个next指针(curr=next;)。如图
(4)环形链表
解题思路:
本人在此只记录一个我认为最简单的方法,同样利用快慢指针。快指针往前走2步(步数只要比慢指针大就行),而慢指针往前走一步,如果这个链表有环,则两者必然会相遇,反之无环。如图
补充:还有微信小程序和英语四级没记录,但关于小程序的知识点感觉很混乱,等我晚上梳理好了之后重新编写,四级的话就听力和单词同样晚上来记录吧。