算法
文章平均质量分 68
12小白
这个作者很懒,什么都没留下…
展开
-
C++实现的构建二叉树
1. 由前序和中序构造二叉树#include <stdio.h>#include <stdlib.h>/** * Definition for a binary tree node.*/ struct TreeNode { int val; struct TreeNode *left; struct TreeNode ...原创 2019-04-07 15:54:47 · 4694 阅读 · 0 评论 -
剑指offer刷题之c++实现的求链表中倒数第k个值
#include "myHead.h"#include "allListNode.h"/*返回链表中倒数第k个节点(k=1,2,。。。) 设总共n个节点。倒数第k个就是正数第n-k+1.如n=6,k=3,倒数第三个就是正数第4个。为了减少两趟链表遍历(主要是减少一趟链表遍历求n),则牺牲空间拯救时间。搞两个指针,一个向前走k-1步,当他准备走第k步的时候,另一个指针才开始走第一步。这样原创 2015-08-08 12:13:48 · 621 阅读 · 0 评论 -
剑指offer刷题之c++实现的反转链表
#include "myHead.h"#include "allListNode.h"/*反转链表 。不采用头插法。采用尾插法直接将指针掉头 */ListNode* ReverseList(ListNode* pHead) { if(pHead == NULL){ return NULL; } ListNode *pre; ListNode *p; pre = NULL;原创 2015-08-08 12:17:36 · 555 阅读 · 0 评论 -
剑指offer刷题之c++实现的根据二叉树的前序和中序遍历重建二叉树
#include "myHead.h"#include "allConstructBinaryTree.cpp" /*利用前序和后序遍历,构造二叉树。前序第一个节点就是根节点,然后根据这个节点去后序中找到这个数,并记下这个数的下标作为划分的标准。这个数划分了两个范围。左边一拨全是左子树,右边一拨全是右子树。 可以统计左子树的个数,下一次,在前序中去掉第一个再开始,以这个中序序列的第二个原创 2015-08-08 12:34:59 · 2034 阅读 · 0 评论 -
剑指offer刷题之c++实现的合并两个有序的链表
#include "myHead.h"#include "allListNode.h"/*输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。*/ ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { //简化代码 // if(pHead1 == NULL&& pHe原创 2015-08-08 12:16:17 · 545 阅读 · 0 评论 -
剑指offer刷题之c++实现的调整数组顺序使奇数位于偶数前面
#include "myHead.h" /**调整数组顺序,使得奇数全部放左边,偶数全部放右边,不考虑原来数组中的奇(偶)数之间相对顺序 */int condition(int x); void reOrderArray(vector &array) { int i = 0,j=array.size()-1,temp; while(i<j){原创 2015-08-08 12:22:57 · 712 阅读 · 0 评论 -
leetcode之Min Stack
Min Stackpush(x) -- Push element x onto stack.pop() -- Removes the element on top of the stack.top() -- Get the top element.getMin() -- Retrieve the minimum element in the stack.class MinSta原创 2015-08-09 09:19:29 · 496 阅读 · 0 评论 -
剑指offer刷题之c++实现的旋转数组的最小数字
#include "myHead.h" /* 输入一个递增排序数组的一个旋转。其中旋转指将一个数组的最开始的几个元素搬到数组的末尾。 求这个数组的最小值。 仿照二分查找。设两个指针,指向头和尾。设mid为中间那个位置。那么中间那个位置将确定最小的数在左边还是右边。 一旦头尾指针相差为1,则尾指针指向的数就是最小的。返回。否则: 如果中间那个数和头指针比较,大于等于头指针,那么最小数肯原创 2015-08-08 12:26:58 · 433 阅读 · 0 评论 -
剑指offer刷题之java实现的二维数组中的查找
/** * * @author 毛二 * @data 2015-8-8 * @comments * 二维数组中的查找。其中二维数组,每行数递增。每列数也递增。 * 那么,二维数组右对角线上每一个数(x)构成了一个边界值。 * 所有x那行,在他左边 都是比他小的;所有x那列在他下面的都是比他大的。 */public class FindTarget { public原创 2015-08-08 11:16:05 · 791 阅读 · 0 评论 -
leetcode之Find Minimum in Rotated Sorted Array
Suppose a sorted array is rotated at some pivot unknown to you beforehand.(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).Find the minimum element.You may assume no duplicate exists in原创 2014-10-25 17:47:01 · 781 阅读 · 0 评论 -
剑指offer刷题之c实现的跳台阶
/*一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。*/int jumpFloor(int number) { int a = 0; int b = 1; int i = 0; int res = 0; for(i=0;i<number;i++){原创 2015-08-08 12:49:30 · 731 阅读 · 0 评论 -
剑指offer刷题之c++实现的树的子结构
c参考文档:c语言中判断一个字符串是否包含另一个字符串深入分析C++中char* str和char str[]的区别C++及C中的 string char指针及char数组思路:遍历一棵树,花费O(n)的时间复杂度。判断一个字符串是否是另一个字符串的子串,可以使用c中的库函数 char *strstr(char *str1, char *str2); 。原创 2015-08-08 15:54:59 · 499 阅读 · 0 评论 -
剑指offer刷题之java实现的把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。参考文献:把数组排成最小的数以及Java中的Comparable接口comparator接口与Comparable接口的区别import java.util.Array原创 2015-09-04 20:39:40 · 611 阅读 · 0 评论 -
剑指offer刷题之c、c++实现的翻转单词顺序列
题目:翻转单词顺序 参考文献:剑指offer 何海涛老师 P220第4题 颠倒一个句子中的词的顺序C++ string学习1.翻转整个句子如 I am alex! ---> !xela am Ivoid reverseSentence(char *sen,int n){ int start=0;// !int end1 = sizeof(sen)/size原创 2015-09-01 11:31:05 · 2193 阅读 · 0 评论 -
剑指offer刷题之c实现的二叉搜索树转换成双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。参考文献:剑指offer 何海涛老师 P152思路:将该二叉搜索树转换成一个排序的双向链表,这整个转变过程,抓住排序的二叉搜索树特征,可以类似二叉树的中序遍历。只不过中序遍历中间处理过程只是输出下根节点。而这里中间处理过程变成了将二叉搜索树转换成双向链表原创 2015-08-31 16:49:04 · 670 阅读 · 0 评论 -
leetcode之Maximum Product Subarray
题目:Find the contiguous subarray within an array (containing at least one number) which has the largest product.For example, given the array [2,3,-2,4],the contiguous subarray [2,3] has the l原创 2014-10-25 18:58:16 · 773 阅读 · 0 评论 -
剑指offer刷题之java实现的二叉搜索树的后序遍历序列
package mine;/** * * @author 毛二 * @data 2015-8-9 * @comments 二叉搜索树的后序遍历序列 * 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。 * 如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 */public class PostSeqOfTwoSearchTre原创 2015-08-09 19:19:16 · 575 阅读 · 0 评论 -
剑指offer刷题之java实现的从上往下打印二叉树
package mine;import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;/** * * @author 毛二 * @data 2015-8-9 * @comments 层次遍历二叉树 * 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 * 访问根节点原创 2015-08-09 17:29:18 · 3152 阅读 · 0 评论 -
剑指offer刷题之java实现的栈的压入、弹出序列
package mine;import java.util.LinkedList;import java.util.Stack;/** * * @author 毛二 * @data 2015-8-9 * @comments 栈的压入、弹出序列 * 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。 * 假设压入栈的所有数字均不相等。例原创 2015-08-09 16:23:16 · 481 阅读 · 0 评论 -
leetcode之二叉树的镜像
Invert Binary TreeInvert a binary tree. 4 / \ 2 7 / \ / \1 3 6 9to 4 / \ 7 2 / \ / \9 6 3 1几周前,我用的是递归解法,如下/** * Definition for a binary t原创 2015-08-08 20:31:51 · 832 阅读 · 0 评论 -
剑指offer刷题之c++实现的替换空格
#include /*将字符串中的空格替换成%20 */ void replaceBlank(char *str,int length){ int i=0,count=0,j=0; while(str[i]!='\0'){ if(str[i] == ' ') count++; i+原创 2015-08-08 12:14:23 · 729 阅读 · 0 评论 -
c实现的求质数几种方法总结
质数:一个自然数,如果只有1和它本身两个约数,这个数叫做质数(也称素数).方法:通常两类,一是试除法,二是筛选法。一、试除法1.0 # include #include #include /*质数:一个自然数,如果只有1和它本身两个约数,这个数叫做质数(也称素数). 试除法1.0 要判断n是否为质数,就从2一直尝试到 n-1。时间复杂度为O(n)。在n非原创 2014-04-12 02:01:25 · 2546 阅读 · 0 评论 -
java实现的棋盘覆盖
算法设计与分析 第二版原创 2014-04-25 09:58:30 · 8029 阅读 · 0 评论 -
c解决八皇后问题
问题描述:这是一个经典的关于组合学的问题:在一个国际象棋中的的棋盘上放置8个皇后, 为了使其中的任何2个皇后都不能相互“攻击”,希望寻求8个皇后的安全放置位置。 该问题的不能相互“攻击”相当于要求任意两个皇后不能在同一行、同一列或同一斜线上。求解可能的方案及方案数。思路:一般采用回溯法。易知,每行肯定有一个皇后,但是放在哪一列需要查找。这样,可以采用回溯法试探。当某一列找不到合原创 2014-03-25 22:52:56 · 2956 阅读 · 0 评论 -
c实现农夫过河问题
问题描述:一个农夫带着一只狼、一只羊和一棵白菜,身处河的南岸。他要把这些东西全部运到北岸。问题是他面前只有一条小船,船小到只能容下他和一件物品,另外只有农夫能撑船。另外,因为狼能吃羊,而羊爱吃白菜,所以农夫不能留下羊和白菜或者狼和羊单独在河的一边,自己离开。请问农夫该采取什么方案才能将所有的东西运过河呢?思路:此题与通常的过河问题不同之处是,不考虑过河时与物品花费的时间,而是考虑河两岸物品是否原创 2014-03-17 02:31:01 · 7252 阅读 · 0 评论 -
c实现任给两日期计算相隔天数问题
/* 标准文档模板 */#include "stdio.h" int IsLeap(int year)//判断闰年。能被4整除且又能不能被100整除 是闰年,能直接被400整除也是闰年 { if(year%4==0&&year%100!=0||year%400==0) return 1; else return 0; } int PastedD原创 2014-03-15 23:38:15 · 1085 阅读 · 0 评论 -
c实现字符串的完美度
字符串的完美度题目详情:我们要给每个字母配一个1-26之间的整数,具体怎么分配由你决定,但不同字母的完美度不同,而一个字符串的完美度等于它里面所有字母的完美度之和,且不在乎字母大小写,也就是说字母F和f的完美度是一样的。现在给定一个字符串,输出它的最大可能的完美度。例如:dad,你可以将26分配给d,25分配给a,这样整个字符串最大可能的完美原创 2014-03-09 11:05:53 · 1126 阅读 · 0 评论 -
Java实现的对无序数组进行的二分查找法
public class TwoDepart{ public static int quickSortOneTime(int[] a, int i, int j) { int high,low,key; high = j; low = i; key = a[low]; while(low < high原创 2014-03-08 16:31:14 · 2376 阅读 · 0 评论 -
c实现哥德巴赫猜想
著名的哥德巴赫猜想是说:任一大于2的偶数,都可表示成两个质数之和(质数,又称素数,指在大于1的自然数中,除了1和此整数自身外,无法被其他自然数整除的数)。现在给定一个大于等于4的偶数,请输出它能表示成多少种两个质数的和。输入:偶数n (4#include "stdio.h"#include int GoldbachConjecture(int n){ int count,i; c原创 2014-03-13 21:09:27 · 1181 阅读 · 0 评论 -
java实现的快速排序
快速排序,基本的算法单元是每一趟能找出一个下标,使得数组左边的数全部小于数组右边的数,而不管左边或者的一排数内部是否有序。这样,在分布针对左边的整体和右边的整体分别再进行快速排序,其实是一个递归。二叉树的很多遍历算法都是类似这种思想。针对每一趟排序:1.不妨先假定数组首元素(程序中设为key)为一次划分比较的值,始终不变并且一次划分只比较这个值。即,只要找到数组首元素最终一趟在数组中的下标原创 2014-03-06 11:03:04 · 790 阅读 · 0 评论 -
c实现的求最小公倍数
弄了几天终于做出了。csdn 编程挑战题目如下:问题描述:给你n组测试数据,每组测试数据有m(0Input:输入n,随后有n行,每行开头输入m,m之后有m个正整数,相邻数之间用空格隔开。Output:每行输出一个数(该数在int范围内,同时,数前面加个“Case 1: ”,表示第几个Case,如“Case 1: 6”),相邻两组结原创 2014-03-08 01:09:18 · 1296 阅读 · 0 评论 -
c实现字符串消除
题目详情:给定一个字符串,仅由a,b,c 3种小写字母组成。当出现连续两个不同的字母时,你可以用另外一个字母替换它,如有ab或ba连续出现,你把它们替换为字母c;有ac或ca连续出现时,你可以把它们替换为字母b;有bc或cb 连续出现时,你可以把它们替换为字母a。你可以不断反复按照这个规则进行替换,你的目标是使得最终结果所得到的字符串原创 2014-03-09 16:21:57 · 1004 阅读 · 0 评论 -
c实现倒水问题和过桥问题
http://blog.sina.com.cn/s/blog_ac9074a201018uyf.html感谢这位大人精彩思路的分享。一、倒水问题1.只有两个容器,容量分别为a,b,要量出c升的水。穷举法实现其基本思想为:用小桶容量的倍数对大桶的容量进行取余。比如3升的桶和5升的桶得到4升水可以这样做: 3 % 5 = 3 //小桶装水倒入大桶,小桶空,大桶有小桶的水量,不等原创 2014-03-13 15:21:53 · 1647 阅读 · 0 评论 -
我要学算法
学习算法之路第一阶段:练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码, 因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打出来. 1.最短路(Floyd、Dijstra,BellmanFord) 2.最小生成树(先写个prim,kruscal要用并查集,不好写) 3.大数(高精度)加减乘除 4.二分查找. (代码转载 2014-04-01 10:43:44 · 762 阅读 · 0 评论 -
c解决图的涂色问题
图的m-着色判定问题——给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色,是否有一种着色法使G中任意相邻的2个顶点着不同颜色?图的m-着色优化问题——若一个图最少需要m种颜色才能使图中任意相邻的2个顶点着不同颜色,则称这个数m为该图的色数。求一个图的最小色数m的问题称为m-着色优化问题。原创 2014-05-14 20:15:00 · 4751 阅读 · 0 评论 -
大整数的乘法
模仿笔算乘法代码如下:转载 2014-04-22 21:22:40 · 838 阅读 · 0 评论 -
c实现对给定线性链表head按节点值非递减次序输出所有节点,并把刚输出的节点从链表中删除
问题描述:对给定线性链表head按节点值非递减次序输出所有节点,并把刚输出的节点从链表中删除 思路:给定的链表不知道带头结点还是不带头结点。分情况讨论。1 带头结点的单链表#include #include #define MAXSIZE 6#define DataType inttypedef struct node{ DataType data; s原创 2014-04-03 17:06:30 · 881 阅读 · 0 评论 -
C语言实现整数划分问题
输入一个正数n,输出所有和为n连续正数序列。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。转载 2014-04-21 21:51:37 · 6440 阅读 · 0 评论 -
c实现按访问频度非递增有序的带头节点的双向链表检索关键字
问题描述:按访问频度非递增有序的带头节点的双向链表检索关键字为x的节点。对该访问频度原创 2014-04-03 22:01:08 · 882 阅读 · 0 评论 -
c实现逆转单向循环链表
1.带头结点实现原创 2014-04-07 10:54:15 · 1775 阅读 · 0 评论