一个整型数组里除了两个数字之外,其他的数字都出现了两次。请找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1).例如:输入{2,7,3,10,3,2,5,5}
, 输出 7 和 10 。大家首先想到的是顺序扫描法,但是这种方法的时间复杂度是O(n2)。接着大家又会考虑用哈希表的...
分类:
其他好文 时间:
2014-05-24 01:10:20
阅读次数:
286
package merge;
import javax.lang.model.element.Element;
/**
* 归并排序:
* 归并排序的效率是比较高的,设数列长为N,将数列分开成小数列一共需要logN步,每步都是一个合并有序数列的过程,时间复杂度为O(N),故一共为
* O(NlogN).
* @author AbuGe
*
*/
public class Merge...
分类:
其他好文 时间:
2014-05-20 14:40:39
阅读次数:
320
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。菜鸟的写法是顺序扫描,时间复杂度是O(n2)。下面给出一种大牛的写法,时间复杂度只需O(n)。
分类:
其他好文 时间:
2014-05-20 08:19:22
阅读次数:
285
二叉树中任意左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。两种解法。第一种:菜鸟的解法,出现重复遍历,时间复杂度高。第二种:大神的解法,只遍历一次,高端大气上档次。
分类:
其他好文 时间:
2014-05-19 13:47:09
阅读次数:
244
#includeusing namespace std;bool solver(const int
a[],const int n, int & num){ if(NULL == a || 0>= n) return false;
////注意,是小写~ int count = 0; ...
分类:
其他好文 时间:
2014-05-19 12:11:20
阅读次数:
335
出题:输入一个已经升序排序的数组和一个数字;要求在数组中查找两个数,这两个数的和正好等于输入的那个数字,输出任意一对数字就可以,要求时间复杂度是O(n);分析:对于升序排序的数组{…i…j…k…m……},只有可能是i+m=j+k(j和k可能是同一个数),所以可以从两边往中间收缩而忽视其他交叉相加的情...
分类:
其他好文 时间:
2014-05-19 12:04:14
阅读次数:
357
1、算法思想描述: 1)将相邻的两个数进行比较,如果前面的一个大于后面的一个,则将他们交换。每次循环能使一个数达到有序状态。2、时间复杂度: 平均O(n^2)3、实现及优化。以下给出三种实现方式/*
* bubblesort.cpp
*
* Created on: 2014年5月17日
* Author: pc
*/
#include
#include
#inc...
分类:
其他好文 时间:
2014-05-18 15:34:55
阅读次数:
198
能使用STL的sort系列算法的前提是容器的迭代器必须为随机迭代器。所以,vector和deque天然适用。STL的sort算法采用了一些策略,在不同情况下采用不同的排序算法,以达到各种算法优势互补的效果。基本的原则是:数据量大时采用快速排序,数据量小时采用插入排序(这是对快排常用的一种优化策略),递归层次过深改用堆排序。
首先是插入排序。它的平均和最坏时间复杂度都为O(N²),量级小于...
分类:
其他好文 时间:
2014-05-18 14:40:31
阅读次数:
241
题目:给定一个数组和一个目标值,返回所有不重复的3元组,每个元组的和等于目标值,且元组中,各元素按飞递减顺序。
先对其进行排序,在利用2sum,在2sum中,要求和为0,这里可以将数组中的元素的相反数作为和,找到另外两个数,那么三者的和为0。
在2sum中,经过排序后,总的时间复杂度是排序算法的复杂度占主导O(NlogN),在查找时是遍历数组,复杂度为O(n)。那么在3sum中,首先进行排序,...
分类:
其他好文 时间:
2014-05-18 14:02:28
阅读次数:
249
统计一个数字在排序数组中出现的次数。例如输入{2,2,2,2,2,3,5,5}和数字2,输出5.常规的顺序扫描法时间复杂度是O(n),可以进一步优化。用二分查找的方法进行查找可以把时间复杂度降为O(logn)。
分类:
其他好文 时间:
2014-05-17 22:22:39
阅读次数:
256