二分查找与二分答案
# 二分查找
二分查找(Binary Search),也称折半查找,是一种在有序数组中查找某一特定元素的搜索算法。其思想非常简单:每次将待查找区间缩小一半,直到找到目标元素或者区间为空为止。
具体来说,假设我们要在升序数组 arr 中查找目标元素 target 。我们可以设置两个指针 left 和 right 分别指向数组的左右两端,然后每次取中间位置 mid = (left + right) / 2 的元素进行比较。如果 arr[mid] == target ,则直接返回 mid ;如果 arr[mid] < target ,说明目标元素在右半部分,我们将 left 更新为...
more...
递归与递推
# 递推思想
递推思想是一种通过已知的初始条件和递推关系来逐步推导出问题的解的算法思想。
解题步骤:
定义初始条件:确定最简单的情况,即问题规模最小的情况下的解答。
确定递推关系:找出问题规模与规模更小的子问题之间的关系,其中子问题的解是已知的。
# 题目:数楼梯
假设有 n 级楼梯,每次可以走 1 级或 2 级台阶,请问走完这 n 级楼梯共有多少种不同的走法?
# 分析:
当 n=1 时,只有 1 级台阶,即只有一种走法。
当 n=2 时,有两种走法:一次走 1 级台阶,一次走 2 级台阶。
当 n>2 时,走完这 n 级楼梯的走法数量等于走完前 n-1...
more...
暴力枚举
暴力枚举是一种简单直接的问题解决方法,它通过穷举所有可能的情况来求解问题。具体来说,暴力枚举会尝试遍历问题的所有可能解,然后对每个解进行验证或者比较,找到满足特定条件的解。
暴力枚举的基本思路是通过嵌套循环来遍历所有可能的情况。对于每一层循环,我们选择一个合适的范围来考虑当前情况下的所有可能取值。通过嵌套多个循环,我们可以穷举所有可能的组合。
# 循环枚举
循环枚举是一种基于循环的暴力枚举方法。它和普通的暴力枚举相似,都是通过遍历所有可能的情况来求解问题。不同之处在于,循环枚举通常使用循环来生成可能的情况,而不是嵌套多个循环来穷举所有情况。
# 题目:统计方形
有一个 n×m...
more...
模拟与高精度
# 模拟
在算法竞赛中,"模拟" 是指通过编写程序来模拟现实中的某个过程或问题。通常情况下,参赛者需要根据题目要求,利用编程语言实现一个模拟器,然后使用这个模拟器来模拟特定的场景或操作。
模拟题目可以涉及各种不同的领域和问题,如模拟物理系统、模拟游戏规则、模拟网络通信等。具体而言,参赛者需要根据题目描述和输入数据,在程序中模拟所需的场景和操作,并输出符合题目要求的结果。
下面举例几道题自己体会
# 题目:乒乓球
华华和朋友打乒乓球, 得到了每一球的输赢记录: w 表示华华得一分, L 表示对手得一分, E 表示比赛信息结束。一局比赛刚开始时比分为 0 : 0...
more...