• C/C++编程基础算法总结


    使用王道机试指南的电子书也有几天的时间了,终于看完了第二章《经典入门》,下面就来总结回顾一下最常见的六种算法/问题,为下一步刷题打好坚实基础。

    套路是:先概述这种题型,然后总结我学到的和易错点。

    ************************************题目都是九度OJ上的**********************************************

    先提一句!时间复杂度!王道一直在提这一点,必须有根据题目中变量的范围来估算时间复杂度的意识。

    一、排序问题

    • 基本的冒泡、选择排序自不必说,必须掌握。
    • C语言的qsort,C++的sort,我都是第一次知道。。
    • sort的两种使用方法,要么重载<运算符,要么自己写cmp函数,总之就是让sort函数知道比较规则是什么。cmp函数的写法,比如降序排列,第一个参数比第二个参数大时返回true就好。
    • 1061题,结构体排序,也没啥,还是用sort,可在结构体里面定义重载运算符,即规则定义在里面。也可在外面写cmp函数。注意重载的写法。
    • 1185题特殊排序,其实很简单,如果逆向思维的话:先排序,自然最大的就出来了,而且题目没说清删一个还是全删,我刚开始全删了,一直WA,结果根本没那么复杂。。。删一个就行。
    • 1023,自己写的代码总是RE,至今未明。但大概知道,比较规则应写的简洁明晰,不要太长更不要跟全局变量什么的扯上关系。。我目前只能这么理解了,说的不对的话欢迎大神给我指出错误

    二、日期类问题

    • 重要的思想:预处理。解决区间类问题的统一思想:把原区间问题统一到固定起点的区间问题上去
    • 1096,第一次接触类编程。可以用struct定义类,类里有一个成员函数,即一个方法。大内存数组定义成全局变量。
    • 1043,注意取余运算的应用。

    三、Hash

    • 适用的类型:某变量范围有限、固定、有特点。1431大范围整数排序、1156根据读书判断潜在朋友、1088拔树 这些问题都适合Hash

    四、排版题

    两类,一种是简单排版,即几何规律与输出顺序有联系。另一类难一点,没联系,要先排版再输出。1161题Repeater,简直虐心。。关键是找到规律,迭代时候注意分不同情况,不要有冲突

    五、查找

    • 线性查找:遍历,简单
    • 二分查找:先用sort变成有序数组,再查找。复杂度会从n变log。典型条件:while(a<=b)

    六、贪心算法

    思想很简单,就是总获取最好的。(最符合目标要求的)但是有时候不容易找到合适的贪心策略

    • 1433,硕鼠换粮题,抽象成为一个以性价比为贪心标准的问题。即:总是优先买性价比最高的商品,直到金钱花完或者这种物品被买完,那就换性价比次高的,以此类推
    • 1434的今年暑假不AC,目标是尽可能多的看到完整的节目,那么贪心的标准是以结束时间最早的节目优先,因为这样总是能节约时间以增大更多的节目机会被看的可能性。1435的迷瘴,1436的修墙的贪心标准比较明显。

    贪心算法中,while循环的判断条件要仔细斟酌,明确要输出几个变量,有几个变量作为辅助,初始条件是什么,循环过程中会怎么样变化等等。

    七、我的常见错误

    • 最坑爹的肯定是scanf()函数,首先它是有返回值哒,返回成功读取变量的个数;传入变量地址虽然很小儿科,但为了不忘记再说一句。。格式控制字符串中的一个空格可以抵消输入中的n个空格,6不6.尤其注意输入字符格式的时候,注意空格属不属于待输入字符之内(排版题)属于的话格式控制字符串中不能加空格;要不要用getchar()吸收。。注意回车符也是需要吸收的,尤其排版题要注意。。。
    • 常见WA的原因
    1. 标志位!标志位!计数器!计数器!是不是没清零!!?!我最爱犯的错误,没有之一。甚至有时莫名其妙的话你就应该想到看看标志位清没清,试着清一下。。。
    2. 算法是否有错
    3. 边界数据是否有错
    4. 是不是多组测试用例你只按一组编的
    5. 是不是某变量/数组声明位置不对,导致第一次用完之后历史数据没清除,本质跟1一样。所以变量随用随定义。

    以上就是一周以来的学习总结。想要进一步强化编程,以上基础必须打牢。

  • 相关阅读:
    spring cloud/spring boot同时支持http和https访问
    解决to the cache because there was insufficient free space available after evict
    国外天气api 国际天气预报今天、未来3天、未来7天的天气预报信息接口
    java 访问get接口请求外部的json数据
    IDEA创建基于Maven的SpringBoot项目-多模块
    PostgreSQL提取每个ID的最后一行(Postgresql extract last row for each id)
    Vue项目引入百度地图
    Vue 引入天地图 & 地图类型切换
    js在新窗口打开链接
    mysql使用小数注意
  • 原文地址:https://www.cnblogs.com/cjf1699-dut/p/7281256.html
Copyright © 2020-2023  润新知