算法
为幸福写歌
热爱编程
展开
-
算法常用C++总结
栈(stack) stack实现了一种先进后出的数据结构,使用时需要包含stack头文件 C++定义stack语法: stack<int> s; //int为栈的数据类型,也可以为string,double等 C++中stack的基本操作有: 1、出栈:如 s.pop() 注意并不返回出栈的元素 2、进栈:如 s.push(x) 3、访问栈顶元素:如s.top(); 4、判断栈空:如 s.empty() 栈为空时返回true 5、返回栈中元素个数,如:s.size() 例...原创 2020-08-14 15:55:36 · 497 阅读 · 0 评论 -
最大子列和问题
问题如下:使用在线处理的方法,“在线”的意思是指每输入一个数据就进行即时处理,在任何一个地方中止输入,算法都能正确给出当前的解。算法每次向右累加一次,就进行处理,如果当前的子列和小于0,则再继续向右加也不会是最大值,所以将其抛弃,从下一个数当做果起点从新开始累加。如果当前子列和大于过去的最大子列和,更新之。代码如下:#include <stdio.h> #include <mal...原创 2018-04-23 16:46:38 · 227 阅读 · 0 评论 -
二分查找
二分查找比较简单,直接贴代码: Position BinarySearch( List L, ElementType X ) { Position left = 0; Position right = L->Last; Position mid; while(left <= right) { mid = (left+right)/2; if ( L->原创 2018-04-23 21:14:30 · 175 阅读 · 0 评论 -
LeetCode—两数相加
题目来自LeetCode:https://leetcode-cn.com/problems/add-two-numbers/description/注意几点:链表对应结点相加时增加前一个结点的进位,并保存下一个结点的进位;两个链表长度不一致时,要处理较长链表剩余的高位和进位计算的值;如果最高位计算时还产生进位,则还需要添加一个额外结点。/** * Definition for singly-li...原创 2018-04-24 10:13:46 · 166 阅读 · 0 评论 -
面试精选:链表问题集锦
下面是本文所要用到链表节点的定义:struct Node{ int data; Node* next; };1. 在O(1)时间删除链表节点题目描述:给定链表的头指针和一个节点指针,在O(1)时间删除该节点。[Google面试题]分析:本题与《编程之美》上的「从无头单链表中删除节点」类似。主要思想都是「狸猫换太子」,即用下一个节点数据覆盖要删除的节点,然后删除下一个节点。但是如果节...转载 2018-07-03 21:22:52 · 148 阅读 · 0 评论 -
KMP算法
介绍串的普通模式匹配算法大体思路是:模式串从主串的第一个字符开始匹配,每匹配失败,主串中记录匹配进度的指针 i 都要进行 i-j+1 的回退操作(这个过程称为“指针回溯”),同时模式串向后移动一个字符的位置。一次次的循环,直到匹配成功或者程序结束。"KMP"算法相比于"BF"算法,优势在于:在保证指针 i 不回溯的前提下,当匹配失败时,让模式串向右移动最大的距离;并且可以在O(n+m)的时间数量级...转载 2018-07-03 21:24:37 · 946 阅读 · 0 评论