笔试强训(算法)
文章平均质量分 80
Man9Oo
做想做的事,成为想成为的人 [shawyxy.github.io](网站第一时间更新,正在建设中...)
展开
-
【C++笔试强训】day05
由递归进行的子问题分析可以知道:忽略环形链表的下标,可以认为它的任意一个节点都是起点和终点的交界处。对于第i个人,认为它上一个人的编号是链表的起点,那么上一个人的编号+报数,就是第i个人的编号。经典的约瑟夫问题可以通过递归或迭代的方式来解决,并且时间复杂度为 O(n),空间复杂度为 O(1)。每个腐烂的苹果每分钟会将相邻的苹果腐烂,类似于层层扩散的波浪,因此 BFS 是非常适合的。由于填充DP数组是一个根据上一个结果来推出现在的结果的过程,而旧状态只被使用一次,所以我们不需要用数组保留原先的旧状态。原创 2024-07-26 18:24:46 · 1204 阅读 · 0 评论 -
【C++笔试强训】day04
如果要优化的话,可以用二分找到第一个不小于 n 的元素的位置,比较 n 与这个元素及其前一个元素的差值,找到最小的差值。由于第i个数只依赖前两个数,所以只需要3个变量就可以迭代地计算,打一个斐波那契数的表,然后再查表。注意要遍历棋盘的每一个单元格作为起始点。原创 2024-07-26 18:22:11 · 456 阅读 · 0 评论 -
【C++笔试强训】day03
用sum维护窗口中的元素之和,i枚举左区间,j枚举右区间,j遍历过的元素都累加到sum中(加入到窗口),i遍历过的元素都从sum中剔除(移出窗口);用len维护一个满足窗口内元素之和大于等于x的最小区间的长度,一旦发现有更小的窗口长度,那就将窗口区间的下标保存在l和r中,最后打印。每轮取出最大的偶数,然后将其减半后的值从sum减去,如果它也是偶数,那么继续加到堆中,直到堆中没有元素或者k等于0时,打印sum。遍历字符串s的同时,如果遇到了空格,就把空格后面的字符(转大写)加到t中。原创 2024-07-26 18:20:19 · 437 阅读 · 0 评论 -
【C++笔试强训】day02
爬楼梯问题是一个典型的具有重叠子问题的模型,自上而下地思考,将大问题转化为规模更小的子问题,对于任意第i阶,它可能是从i-1爬上来的,也可能是从i-2爬上来的,由于本题是要求总的最低花费,所以选择花费最小的那个。用数组统计并保存str1和str2在strs中出现的下标x和y。然后枚举所有可能的x和y的组合,得到一个最小差值。起步价20,注意超出的费用要向上取整,最后再根据是否加急外付5元。将记忆化搜索翻译成递推。原创 2024-07-26 18:18:52 · 357 阅读 · 0 评论 -
【C++笔试强训】day01
首先将两个数组去重,然后把第一个数组的元素加到哈希表中。遍历第二个数组,如果在哈希表中已经存在,那就加到返回值中。用%10取出个位的数字,用/10迭代。原创 2024-07-26 18:17:09 · 517 阅读 · 0 评论