解题方法类
根号二点五
胜天半子
展开
-
【小练习】shell 程序设计 读取一个整数n,输出斐波那契数列的前n项及它们的和
这里就是简单的shell程序,没有进行输入判断,可以先判断输入是否为数再进行运算#!/bin/bashread -p " > " var1a=1b=1c=0s=0for((i=0;i<$var1;++i));doecho "$a"((s+=a))((c=a+b))((a=b))((b=c))doneecho "sum=$s"原创 2020-08-26 21:02:33 · 1642 阅读 · 0 评论 -
【特殊类】设计一个类,该类只能在栈上创建对象 & 设计一个类,该类只能在堆上创建对象
设计一个类,该类只能在堆上创建对象方法一:构造函数私有化将类的构造函数私有,拷贝构造声明成私有。防止调用拷贝在栈上生成对象。提供一个静态的成员函数,在该静态成员函数中完成堆对象的创建class HeapOnly{public: static HeapOnly* CreateObject() { return new HeapOnly; }private: HeapOn...原创 2020-03-12 15:49:17 · 169 阅读 · 0 评论 -
队列的实现与运用(设计循环队列)
定义队列是只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为队头实现队列可以数组和链表的结构实现,使用链表的结构实现好一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低代码此处我们使用链表实现一个支持动态增长的栈Queu...原创 2020-02-13 00:15:35 · 288 阅读 · 0 评论 -
栈的实现与运用(括号匹配 最小栈)
定义栈是一种特殊的线性表,只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈,出数据也在栈顶实现栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数...原创 2020-02-12 18:02:49 · 350 阅读 · 0 评论 -
常见单链表题型(十)链表深度拷贝
题目要求给一个链表,其中每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点,题目要求为返回这个链表的深拷贝(深拷贝即将链表完完全全复制下来,包括除链表结构外的随机指针)/*// Definition for a Node.class Node {public: int val; Node* next; Node* random; ...原创 2019-10-19 23:07:44 · 558 阅读 · 0 评论 -
常见单链表题型(九)判断环形链表
题目要求判断链表中是否有环。若有环,将环起始位置读入 pos ,否则 pos 为 -1示例:输入:head = [3,2,0,-4],pos = 1输出:true/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * };...原创 2019-10-19 21:03:01 · 249 阅读 · 1 评论 -
常见单链表题型(八)链表的回文结构
题目要求对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。示例:输入:1->2->2->1输出:是/*struct ListNode { int val; struct ListNode *next; ...原创 2019-10-19 19:25:29 · 250 阅读 · 0 评论 -
常见单链表题型(七)删除重复结点
题目要求在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针示例:输入:1->2->2->3->4->4->5输出:1->3->5/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : ...原创 2019-10-17 23:39:57 · 377 阅读 · 0 评论 -
常见单链表题型(六)链表分割
题目要求编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针注意:分割以后保持原来的数据顺序不变示例:输入:1->9->8->3->6->5->10 x=7输出:1->3->6->5->9->8...原创 2019-10-17 21:17:25 · 475 阅读 · 0 评论 -
常见单链表题型(五)合并两个有序链表
题目要求将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的示例:输入:1->2->4 , 1->3->4输出:1->1->2->3->4->4/** * Definition for singly-linked list. * struct ListNode { * int val...原创 2019-10-14 13:09:20 · 297 阅读 · 0 评论 -
常见单链表题型(四)输入一个链表,输出该链表中倒数第k个结点
题目要求输入一个链表,输出该链表中倒数第k个结点示例:输入:[1,2,3,4,5,6] , k = 3输出:4/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/解题思路方法:设有两个指针low,fast,fast先走k-1...原创 2019-10-13 10:39:19 · 484 阅读 · 0 评论 -
常见单链表题型(三) 给定一个带有头结点 head 的非空单链表,返回链表的中间结点;如果有两个中间结点,则返回第二个中间结点
题目要求反转一个单链表。示例1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。示例2:输入:[1,2,3,4,5,6]输出:此列表中的结点 4 (序列化形式:[4,5,6])由于该列表有两个中间结点,值分别为 3 和 4,我们返回第二个结点。/** * Definition for singly-linked lis...原创 2019-09-27 18:11:57 · 858 阅读 · 0 评论 -
常见单链表题型(二) 反转一个单链表
题目要求反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL先决条件:/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListN...原创 2019-09-27 16:45:23 · 299 阅读 · 0 评论 -
常见单链表题型(一) 删除链表中等于给定值 val 的所有节点
题目要求删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5先决条件:/** * Definition for singly-linked list. * struct ListNode { * int val; * ...原创 2019-09-22 20:10:50 · 951 阅读 · 0 评论 -
斐波那契数列 问题分析及运用(兔子繁殖问题)
Fibonacci 定义斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。具体是这样一个数列:1、1、2、3、5、8、13、21、34、……可以定义为以下关系:当n>1时,这个数列第n项的值是前两项之和实现 Fibonacci 代码由 Fibon...原创 2019-09-11 23:56:47 · 6514 阅读 · 0 评论 -
如何用两个栈(队列)实现一个队列(栈)
用两个栈实现一个队列,这是一道很经典的面试题…emmm…然而怎么解决呢首先明确解题思路:队列的特性是:“先入先出”,栈的特性是:“先入后出”1)建立两个栈A、B栈A用来入队列栈B用来出队列2)入队出队操作入队:将元素进栈A出队:判断栈B是否为空,如果为空,则将栈A中所有元素pop,并push进栈B,栈B出栈, 如果不为空,栈B直接出栈。void push(int node) ...原创 2019-09-02 23:50:47 · 408 阅读 · 0 评论 -
函数的递归与迭代(青蛙跳台阶与汉诺塔问题)
递归函数定义程序调用自身的编程技巧称为递归( recursion)。 递归作为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。注意递归的两个必要条件:存在限制条件,当满足这个...原创 2019-08-16 23:50:38 · 507 阅读 · 0 评论 -
时间戳设置随机数实现猜数字游戏
时间戳也被称为Unix时间戳(UnixTimestamp)。Unix时间戳(Unixtimestamp),或称Unix时间(Unixtime)、POSIX时间(POSIXtime),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数。Unix时间戳不仅被使用在Unix系统、类Unix系统中(比如Linux系统),也在许多其他操作系统中被广泛采用猜...原创 2019-08-15 20:17:29 · 371 阅读 · 0 评论