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一样。所以变量随用随定义。

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

时间: 2024-12-04 22:02:15

C/C++编程基础算法总结的相关文章

多线程编程基础知识

多线程编程基础知识 http://www.cnblogs.com/cy163/archive/2006/11/02/547428.html 当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义.现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的.因此掌握

用Netty开发中间件:网络编程基础

用Netty开发中间件:网络编程基础 <Netty权威指南>在网上的评价不是非常高,尤其是第一版,第二版能稍好些?入手后高速翻看了大半本,不免还是想对<Netty权威指南(第二版)>吐槽一下: 前半本的代码排版太糟糕了,简直就是直接打印Word的版式似的. 源代码解析部分的条理性和代码排版好多了,感觉比其它部分的质量高多了. 假设你是刚開始学习的人可能会感觉非常具体,差点儿每部分都会来一套client和服务端的Demo.假设你不是入门者的话可能会感觉水分比較多. 最后一部分高级特性

Matlab编程基础

平台:Win7 64 bit,Matlab R2014a(8.3) "Matlab"是"Matrix Laboratory" 的缩写,中文"矩阵实验室",是强大的数学工具.本文侧重于Matlab的编程语言侧面,讲述Matlab的基本语法,以及用Matlab语言进行程序设计.值得一提的是,Matlab从R2014a版本开始支持中文语言了! 1.基本概念 Matlab默认启动后界面: Matlab有关的文件后缀: File Extension Des

shell编程基础一(多种方法求值1+2+..+100)

#SHELL编程基础一(多种方法求值1+2+..+100)##为什么要学好shell shell脚本语言是实现linux系统管理及自动化运维所必备的重要工具,linux系统的底层及基础应用软件的核心大都涉及shell脚本的内容. 每一个合格的linux系统管理员或运维工程师,都需要能够熟练地编写shell脚本语言,并能够阅读系统及各类软件附带的shell脚本内容. 只有这样才能提升运维人员的工作效率,适应日益复杂的工作环境,减少不必要的工作,从而为个人的职场发展奠定较好的基础.# 本文的宗旨是熟

编程基础知识——Java JNI开发流程(2)

android中使用jni调用本地C++库 android平台上的本地库文件后缀 .so.类似windows上的dll文件. 要在android上使用jni,首先需要下载android ndk. 操作步骤,正常建立android工程,然后在android工程那里右键,属性,选择Android Tools -> Add Native Support.就可以为android工程增加本地库支持. 添加支持后的android工程,会增加jni目录,C++代码就写在这个目录里. 新建一个类,并且使用nat

Linux程序设计学习笔记----Socket网络编程基础之TCP/IP协议簇

转载请注明出处: ,谢谢! 内容提要 本节主要学习网络通信基础,主要涉及的内容是: TCP/IP协议簇基础:两个模型 IPv4协议基础:IP地址分类与表示,子网掩码等 IP地址转换:点分十进制\二进制 TCP/IP协议簇基础 OSI模型 我们知道计算机网络之中,有各种各样的设备,那么如何实现这些设备的通信呢? 显然是通过标准的通讯协议,但是,整个网络连接的过程相当复杂,包括硬件.软件数据封包与应用程序的互相链接等等,如果想要写一支将联网全部功能都串连在一块的程序,那么当某个小环节出现问题时,整只

DNET编程基础教程

1.跟我学DNET编程系列-.NET OOP编程[爸爸去哪儿] http://edu.ibeifeng.com/view-index-id-25.html 2.跟我学DNET编程系列-CSharp十种语法糖 http://edu.ibeifeng.com/view-index-id-26.html 3.跟我学DNET编程系列-跟我一起学EF5.0 http://edu.ibeifeng.com/view-index-id-22.html 4.零基础入门系列-跟微软认证专家学ASP.NET MVC

编程基础知识分享——编程开始之前

对我来说,编程这件事与其说是工作,不如说是兴趣.尽管和自己理想中的编程比,自己的所谓编程只不过是小打小闹,但是现在又有多少所谓的IT从业者是做真正的编程?产业化的今天,其实真的没有必要区分所谓的程序员和码农,每个人的路线和生活都不相同,也不可能相同,有人学编程只是为了一份工作,有人纯粹为了爱好.我的理解,无论出发点如何,只要尊重自己的选择,能够有所收获就够了. 这系列文章,是自己当初学习编程的一些方法和经验,整理了一下,可以分成几块记录.对于专业的程序员,我的经验并不适合,一些计算机专业出身的朋

(转)Windows驱动编程基础教程

版权声明 本书是免费电子书. 作者保留一切权利.但在保证本书完整性(包括版权声明.前言.正文内容.后记.以及作者的信息),并不增删.改变其中任何文字内容的前提下,欢迎任何读者 以任何形式(包括各种格式的文档)复制和转载本书.同时不限制利用此书赢利的行为(如收费注册下载,或者出售光盘或打印版本).不满足此前提的任何转载. 复制.赢利行为则是侵犯版权的行为. 发现本书的错漏之处,请联系作者.请不要修改本文中任何内容,不经过作者的同意发布修改后的版本. 作者信息 作者网名楚狂人.真名谭文.在上海从事W