关闭

栈和队列

栈是限定仅在表尾进行插入和删除操作的线性表。         队列是只允许在一端(队尾)进行插入操作,而在另一端(对头)进行删除操作的线性表。         (1)顺序栈   #include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h" #defi...
阅读(102) 评论(0)

线性表

线性表(List):零个或多个数据元素的有限序列。            线性表的抽象定义:          线性表的顺序存储结构:用一段地址连续的存储单元依次存储线性表的数据元素。 线性表的链式存储结构:用一组任意的存储单元存储线性表的元素(存储数据和索引)     (1)单链表             (2)静态链表:用数组描述的链表...
阅读(127) 评论(0)

动态规划

什么叫做动态规划 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。 动态规划的思想 动态规划背后的思想很简单,和分治思想类似,将求解的问题分解成若干个子问题,按照顺序求解子问题,列出各种可能的局部解,通过决策(根据题意)保留那些有可能达到最优的局部解,丢弃其它局...
阅读(232) 评论(0)

思维拓展

(1)不使用额外的空间交换两个数           a. 方法一.   A=A+B                              B=A-B;(A+B-B=A)                              A=A-B;(A+B-A=B)           b.方法二.   A=A^B                             B=B^A   ...
阅读(95) 评论(0)

找出数组中第k大的数

给定一个数组,找出数组中第k大的数。其实现代码如下: package com.threeTop.www; /** * 找出数组中第k大的数 * @author wjgs * */ public class FindK { public static void find(int[]array,int begin,int end,int k) { int i=partition...
阅读(256) 评论(0)

寻找缺少的数字

有100个连续的数字(假设1-100),随机打乱顺序,随机取出这个数字,求最快在这个数组中快速找出缺少的数字。         (1)排序后挨个查找         (2)运用hash表存储每个值,再查找         (3)巧妙的计算办法,其实现代码如下: package com.threeTop.www; import java.util.Random; /** * 寻找缺失的...
阅读(159) 评论(0)

求数组中出现次数超过一半的数字

在一个数组中,某个数字出现的次数超过了数组元素总长度的一半,找出这个数字。 package com.threeTop.www; /** * 找出数组中超过一半的元素 * @author wjgs * */ public class MoreThanHalf { /** * O(n)时间复杂度解法 * @param array */ public static voi...
阅读(164) 评论(0)

荷兰国旗问题

有一个数组,长度为n,里面只有0、1、2(分别代表红、白、蓝色),现在要求通过两两交换的方式,使得0在最前面,1在中间,2在最后面。        代码实现如下: package com.threeTop.www; /** * 荷兰国旗问题 * @author wjgs * */ public class DutchFlag { /** * 荷兰国旗问题 * @...
阅读(113) 评论(0)

数组正负值排序

给定一个整型数组,把所有负值调到数组的左边,把所有正值调到右边。例如:1、-2、-4、5、9、-3、-8、6,调整后可以是-2、-4、-3、-8、1、5、9、6.    具体的实现代码如下: package com.threeTop.www; /*** * 数组正负值排序 * @author wjgs * */ public class ArraySort { /** ...
阅读(179) 评论(0)

求最大子矩阵的和

求最大子矩阵的和:实现代码如下 package com.threeTop.www; public class MaxSumMatrix { /** * 获取矩阵的最大和子矩阵 * @param matrix * @return */ public static int maxSumSubMatrix(int [][]matrix) { int[][]total...
阅读(180) 评论(0)

找出连加值最大的子数组

数组中连续的一部分称为原数组的子数组。比如3、-6、1、2、3、-1、2、-5、1、2,这个数组的的最大子数组就是1、2、3、-1、2。    实现代码如下: package com.threeTop.www; /** * 动态规划法 * @author wjgs * */ public class MaxSumSubArray { /** * 动态规划求最大子数组 *...
阅读(172) 评论(0)

数组的更多应用

从数组中找出其和为指定值得两个数:比如输入的数组为1、3、5、7、9、15,寻找的结果为10,那么输出下标0、4,或者1、3都可以。        (1)最直接的办法,遍历每一个元素,对于任意a[k],只需要遍历寻找是否存在值为sum-a[k]的数组元素。         (2)运用散列表,加快查找的时间        (3)运用排序两边查找。       实现代码如下: package...
阅读(157) 评论(0)

KMP字符串模式匹配详解

KMP字符串模式匹配通俗点说就是一种在一个字符串中定位另一个串的高效算法。简单匹配算法的时间复杂度为O(m*n);KMP匹配算法。可以证明它的时间复杂度为O(m+n).。 一.简单匹配算法 先来看一个简单匹配算法的函数: int Index_BF ( char S [ ], char T [ ], int pos ) { /* 若串 S 中从第pos(S 的下标0≤pos<StrLe...
阅读(206) 评论(0)

判断字符串包含的问题

有两个字符串str1和str2,假设str1比str2长,求str2中的所有字符是否被字符串str1包含,即str2是否是str1的真子集。    (1)用散列表进行实现         即把str1中的所有字符放入散列表中,然后依次判断str2中的每个字符是否在散列表中存在,其时间复杂度为O(n+m)。其实现的代码如下: package com.threeTop.www; import...
阅读(138) 评论(0)

寻找最大的回文字符串

寻找最大的回文字符串,例如字符串adcdedco,那么最大的回文子串就是cdedc。...
阅读(189) 评论(0)
53条 共4页1 2 3 4 下一页 尾页
    个人资料
    • 访问:167862次
    • 积分:5214
    • 等级:
    • 排名:第5558名
    • 原创:219篇
    • 转载:175篇
    • 译文:118篇
    • 评论:34条
    个人博客
    最新评论