一.通过刷题总结的新知识点
1.提升个人的编程语言基础:在刷题过程中,会更加熟练地掌握编程语言的基础语法,如变量定义、数据类型、控制流语句(条件判断、循环等)、函数的定义和调用等。不同的题目会要求灵活运用这些基础语法来实现各种功能,从而加深对语言本身的理解和运用能力。
2.掌握一些新的算法:接触到各种基础算法思想,如排序、搜索、贪心算法等。例如,通过排序算法题,了解冒泡排序、插入排序、快速排序、归并排序等不同排序算法的原理、时间复杂度和空间复杂度,以及它们各自的适用场景;在搜索算法中,掌握深度优先搜索和广度优先搜索的实现方式和应用范围,能够运用这些算法解决迷宫问题、图的遍历等相关问题。
比如说插入排序,算法原理如下:
-
从第一个元素开始,该元素可以认为已经被排序。
-
取出下一个元素,在已经排序的元素序列中从后向前扫描。
-
如果该元素(已排序)大于新元素,将该元素移到下一位置。
-
重复步骤 3,直到找到已排序的元素小于或者等于新元素的位置。
-
将新元素插入到该位置后。
-
重复步骤 2~5,直到处理完所有未排序的元素。
def insertion_sort(arr): n = len(arr) for i in range(1, n): key = arr[i] j = i - 1 while j >= 0 and arr[j] > key: arr[j + 1] = arr[j] j -= 1 arr[j + 1] = key return arr
比如说归并排序,算法原理如下:
(1)分治策略
- 把待排序的序列分成若干个子序列,每个子序列的长度为 1 时,认为这些子序列已经是有序的。
- 然后,将相邻的两个有序子序列合并成一个更大的有序序列,这个过程称为归并。
- 重复这个过程,直到所有的子序列都被合并成一个完整的有序序列。
(2)归并过程
-
假设我们有两个已排序的子序列 left 和 right,要将它们合并成一个有序序列。
-
创建一个新的空序列 result,同时使用两个指针分别指向 left 和 right 的开头。
-
比较两个指针所指元素的大小,将较小的元素放入 result 中,并将相应指针向后移动一位。
-
重复这个过程,直到 left 或 right 中的所有元素都被放入 result 中。
-
最后,如果 left 或 right 中还有剩余元素,将它们全部放入 result 中。
def merge_sort(arr): if len(arr) <= 1: return arr mid = len(arr) // 2 left = merge_sort(arr[:mid]) right = merge_sort(arr[mid:]) return merge(left, right) def merge(left, right): result = [] i = j = 0 while i < len(left) and j < len(right): if left[i] < right[j]: result.append(left[i]) i += 1 else: result.append(right[j]) j += 1 result.extend(left[i:]) result.extend(right[j:]) return result`
二.对入门同学的学习建议
1.掌握基础语法:认真学习编程语言的基础语法,包括变量、数据类型、运算符、控制流语句(如条件判断、循环)、函数等。这些是编程的基石,只有熟练掌握,才能更好地进行后续的学习和实践。可以通过阅读教材、在线教程等方式系统地学习语法知识,并通过编写简单的代码示例来加深理解和记忆。
2.多实践多练习:可以利用AI进行大量的刷题练习,提供了丰富多样的题目,涵盖了各种知识点和难度级别。从简单的基础题目开始,逐步提升难度,通过不断地练习,拓宽编程思路,提高解决问题的能力。在刷题过程中,要注重分析题目要求,设计合理的算法,优化代码实现。
3.坚持不懈地学习:编程能力的提升需要不断地积累和实践,不能一蹴而就。要养成每天学习和练习编程的习惯,坚持不懈地努力。即使每天只学习一点,长期积累下来也会取得很大的进步。同时,要不断总结学习经验和教训,反思自己的不足之处,及时调整学习方法和计划,不断提高学习效果。