![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法题目
文章平均质量分 77
jngxiao
这个作者很懒,什么都没留下…
展开
-
给定链表的头指针和一个结点指针,在O(1) 时间删除该结点
题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};函数的声明如下:void DeleteNode(ListNod转载 2008-09-07 10:21:00 · 2071 阅读 · 0 评论 -
回溯算法之0-1背包问题
0-1背包问题:给定n种物品和一背包.物品i的重量是wi, 其价值为ui,背包的容量为C. 问如何选择装入背包的物品,使得装入背包中物品的总价值最大? 分析: 0-1背包是子集合选取问题,一般情况下0-1背包是个NP问题. 第一步 确定解空间:装入哪几种物品 第二步 确定易于搜索的解空间结构: 可以用数组p,w分别表示各个物品价值和重量。 用数组x记录,是否选种物品 第三步 以深度优先转载 2008-09-07 10:59:00 · 841 阅读 · 0 评论 -
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。分析:这是一道很新颖的关于位运算的面试题。首先我们考虑这个问题的一个简单版本:一个数组里除了一个数字之外,其他的数字都出现了两次。请写程序找出这个只出现一次的数字。这个题目的突破口在哪里?题目为转载 2008-09-07 11:35:00 · 3638 阅读 · 1 评论 -
用两个栈实现一个队列
题目:某队列的声明如下:templatetypename T> class CQueue{public: CQueue() {} ~CQueue() {} void appendTail(const T& node); // append a element to tail void deleteHea转载 2008-09-07 17:54:00 · 1556 阅读 · 0 评论 -
两个单向链表,找出它们的第一个公共结点
题目:两个单向链表,找出它们的第一个公共结点。链表的结点定义为:struct ListNode{ int m_nKey; ListNode* m_pNext;};分析:这是一道微软的面试题。微软非常喜欢与链表相关的题目,因此在微软的面试转载 2008-09-07 09:32:00 · 809 阅读 · 0 评论 -
回溯算法的框架和基础
回溯法其实也是一种搜索算法,它可以方便的搜索解空间。 回溯法解题通常可以从以下三步入手: 1、针对问题,定义解空间 2、确定易于搜索的解空间结构 3、以深度优先的方式搜索解空间,并在搜索的过程中进行剪枝 回溯法通常在解空间树上进行搜索,而解空间树通常有子集树和排列树。 针对这两个问题,算法的框架基本如下: 用回溯法搜索子集合树的一般框架: Cpp代码 void back转载 2008-09-07 10:35:00 · 1098 阅读 · 0 评论 -
回溯算法之八皇后问题
八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上.问题分析:第一步 定义问题的解空间这个问题解空间就是8个皇后在棋盘中的位置.第二步 定义解空间的结构可以使用8*8的数组,但由于任意两个皇后都不能在同行,我们可以用数组下转载 2008-09-07 10:39:00 · 580 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。要求时间复杂度为O(n)。分析:如果不考虑时间复杂度,最简单的思路应该是从头扫描这个数组,每碰到一个偶数时,拿出这个数字,并把位于这个数字后面的所有数字往前挪动一位。挪完之后在数组的末尾有一个空位,这时把该偶数放入这个空位。由于碰到一个偶数,需要移动O(n)个数字,因此总的时间复杂转载 2008-09-07 13:59:00 · 1063 阅读 · 0 评论 -
fibonacci 数列的非递归算法
fibonacci 数列定义:n = 1,2 时,fib(n) = 1n > 2 时,fib(n) = fib(n-2) + fib(n-1)如果用递归计算则包含非常多的重复计算量,因此不可考虑。换一个思路,只要从 f(1) 计算到 f(n-1),那么这个过程是不会有重复计算的。很多算法用了数组来保存 f(1)到 f(n) 的值,如果 n 很大,则这个空间开销会很大,好处是在需要计算很转载 2008-09-07 22:24:00 · 718 阅读 · 0 评论