![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构
文章平均质量分 68
zz7549094
这个作者很懒,什么都没留下…
展开
-
寻找链表的中间节点
创建快速指针与慢速指针,快速指针移动速度为慢速指针的2倍,当快速指针移动到链表尾部时,慢速指针的位置就是链表的中间位置。原创 2016-12-21 11:49:38 · 258 阅读 · 0 评论 -
最长子序列
求一个数组的最长递增子序列,如果数组为1,4,2,3,5,那么最长子序列为1,2,3,5,长度为4,求任意数组的最长子序列长度。 可以用一个数组来保存当前位置的最小子序列,如果r[i]>r[j],那么r[i]处的最长递增子序列就是r[j]处加1,所以要求一个n长数组的最长递增子序列,可以先求n-1长度的最长递增子序列,以此类推,可以算出,算法复杂度O(n*n)。 private static原创 2017-03-21 21:59:15 · 197 阅读 · 0 评论 -
PermutationsI II
Permutations Given a collection of distinct numbers, return all possible permutations. For example, [1,2,3] have the following permutations: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1],原创 2017-03-20 22:36:30 · 249 阅读 · 0 评论 -
leetcode题目整理
注:此分类仅供大概参考,没有精雕细琢。有不同意见欢迎评论~ 利用堆栈: http://oj.leetcode.com/problems/evaluate-reverse-polish-notation/ http://oj.leetcode.com/problems/longest-valid-parentheses/ (也可以用一维数组,贪心) http://oj.leetcod转载 2017-03-20 15:26:53 · 344 阅读 · 0 评论 -
链表相关操作
class ListNode{ int val; ListNode next; public ListNode(int val){ this.val=val; } } 1.链表反转,遍历原链表,采用头插法将数值插入新链表 public ListNode reverse(ListNode p){原创 2017-03-20 15:21:15 · 288 阅读 · 0 评论 -
马踏棋盘问题
#include "stdafx.h" #include #include #define X 8 #define Y 8 int chess[X][Y]; int nextxy(int *x,int *y,int count){ switch (count) { case 0: if(*x+2=0 && chess[*x+2][*y-1]==0){ *x +=2原创 2016-12-22 17:00:20 · 302 阅读 · 0 评论 -
KMP算法
#include "stdafx.h" #include typedef char* String; void get_next(String T,int *next){ next[1]=0; int j=0; int i=1; while(i<T[0]){ //i是后缀,j是前缀 if(j==0||T[i]==T[j]){ i++; j++; if(T[i]!原创 2016-12-22 13:24:25 · 191 阅读 · 0 评论 -
八皇后问题
#include "stdafx.h" #include int count=0; int notDanger(int row,int j,int (*chess)[8]){ int i,k,flag1=0,flag2=0,flag3=0,flag4=0,flag5=0; //判断列方向是否有危险 for(i=0;i<8;i++){ if(chess[i][j]!=0){原创 2016-12-21 21:05:52 · 214 阅读 · 0 评论 -
汉诺塔问题
#include //将n个盘子从x借助y移动到z void move(int n,char x,char y,char z){ if(n==1){ printf("%c--->%c\n",x,z); } else{ move(n-1,x,z,y); //将n-1个盘子从x借助z移动到y上 printf("%c--->%c\n",x,z);//将第n个盘子从x移动到z上原创 2016-12-21 16:35:16 · 223 阅读 · 0 评论 -
拉丁方阵问题
问题描述: n阶方针,每行每列的值不同。 例如3阶方针,应打印: 123 231 312 循环链表解决,第一次打印1到n,第二次打印2到n到1,一次循环,最后打印n到1到n-1。原创 2016-12-21 15:43:20 · 652 阅读 · 0 评论 -
魔术师发牌问题
循环链表解决,初始化循环链表为0,将链表第一个赋值为1,然后往下数2个,赋值为2,数3个,赋值为3,当遇到元素值不为0的时候,跳过该元素,直到所有链表上的值赋值完毕,即为魔术师手里牌的顺序。原创 2016-12-21 15:38:53 · 279 阅读 · 0 评论 -
约瑟夫问题
用环形链表解决,每数到3,将该位置的节点删除,输出该元素,然后继续数,直到环形链表仅剩一个元素,循环结束,将最后一个元素输出。原创 2016-12-21 15:20:33 · 203 阅读 · 0 评论 -
旋转数组查找指定的数
思路:在有序的范围内使用二分法查找。 int search(int A[], int n, int target) { int beg = 0; int end = n - 1; while (beg <= end) { int mid = beg + (end - beg) / 2;原创 2017-03-31 10:09:57 · 693 阅读 · 0 评论