算法
命中无时必强求
这个作者很懒,什么都没留下…
展开
-
算法笔记
1.如何判断一个链表是否有环经典解法是快慢指针typedef struct _Link{ Node *head; int data;} Link;typedef struct _Node{ struct _Node *next; int data;}Node;int checkCircle(Link *link){ Node *fast, *slow; if(link-&g...原创 2020-02-20 11:48:28 · 173 阅读 · 0 评论 -
[算法]给出一个数组,算出出现在一个固定大小的滑动窗口中的最大值的结果集
<?php$arr = [1,4,5,8, 100, 20, 30 , -1, 9, 6, 70, 35, 48, 90];function maxSlidingWindow($arr, $k){ if(!$arr) return []; $window = []; $res = []; foreach($arr as $index => $val){ ...原创 2019-11-28 19:20:54 · 192 阅读 · 0 评论 -
[算法]在二叉树上查找任意两个节点的公共祖先
#include <stdio.h>typedef struct _treeNode{ struct _treeNode *left, *right; int data;}treeNode;treeNode *findPorQ(treeNode *root, treeNode *p, treeNode *q){ if(root==NUll || r...原创 2019-11-28 11:51:21 · 561 阅读 · 0 评论 -
[算法]如何判断一棵二叉树是二叉搜索树
方法一:中序遍历#include <stdio.h>typedef struct _node{ struct _node *left, *right; int data;}node;int helper(node *left, node *root, node *right){ if(root == NULL) return 1...原创 2019-11-28 10:40:00 · 215 阅读 · 0 评论 -
[算法]堆排序
#include <stdio.h>void swap(int *arr, int i, int j){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp;}void printArr(int arr[], int len){ printf("======================================...原创 2019-11-05 09:29:31 · 107 阅读 · 0 评论 -
[算法面试]如何实现一个数组每个元素依次向右移动k位
本着节省内存,减少时间复杂度的原则,用c实现如下:void swap(int *x, int *y){ int tmp = *x; *x = *y; *y = tmp;}void right_k(int arr[], int len, int k){ int i; for (i = 0; i < len; i++){ if (i + k < len - 1){...原创 2019-10-30 11:04:55 · 308 阅读 · 0 评论 -
数据结构笔记-二叉排序树的增删查
//二叉排序树的插入和删除status searchBST(BiTree T, KeyType key, BiTree f, BiTree p) //查{ if(!T)p = f;return false; if(key == T.data.key) p = T;return true; else if(key > t.data.key) return searchBST(T原创 2014-01-16 16:52:36 · 683 阅读 · 0 评论 -
折半查找的迭代与递归实现
以此纪念2013年12月18日在百度面试失败,其中写出了二分法的迭代查找却没写出递归查找#include #define LEN 10int bin_search(int array[], int low, int high, int key);//迭代int bin_search2(int array[], int low, int high, int key);//递归in原创 2013-12-25 18:01:48 · 1680 阅读 · 0 评论 -
动态规划:求子数组的最大连续和
#include #define MAX(A,B) (A>B ? A:B)int main(){ int arr[] = {1, -10, 20, 5, 7, -9, 13, -2, 30, 6, -7, 4}; int sum = max = i = 0, len = 12; for(i=0;i<len;i++){ sum += arr[i];原创 2013-12-24 18:41:33 · 551 阅读 · 0 评论 -
数据结构笔记-构造次优查找树
//构造次优查找树void secondOptmal(BiTree &T, Elemtype R[], float sw[], int low, int high){ int i = low, j; float min = sw[high] - sw[low]; float dw = sw[high] + sw[low+1]; for(j=low+1;j<high;j++)//找原创 2014-01-03 18:02:28 · 902 阅读 · 0 评论 -
数据结构笔记-KMP算法
/** * KMP算法:每当一趟匹配过程中出现字符比较不等时,不需要回溯i指针,而是利用已经得到的部分匹配的结果将模式向右滑动尽可能远的一段距离后,继续比较 设主串为 s1s2s3...sn,模式串为p1p2p3..pm需要解决的问题: 当主串中第i和字符与模式串中第j个字符失配时,需要和模式串中哪个字符再比较?假设需要和模式串中第k个字符比较,则 p1p2p3...pk-1 =原创 2014-01-03 11:59:30 · 565 阅读 · 0 评论 -
数据结构笔记--创建一个无向图
//图的数组表示法#define INFINITY INT_MAX //权值最大值#define MAX_VERTEX_NUM 20 //最大顶点数typedef enum {DG, DN, UDG, UDN};//{有向图,有向网,无向图,无向网}typedef struct ArcCell{//弧结点结构 VRType adj; //权值,无权图用1/0表示是否相邻 Inf原创 2014-01-03 11:22:12 · 5563 阅读 · 0 评论 -
23种设计模式总集-个人培训记
原创 2013-09-29 13:49:02 · 615 阅读 · 0 评论 -
简单的折半查找
function find2(arr, needle){ var len = arr.length, s=0,e = len -1, m = parseInt(e/2); while(s!=e){ if(arr[m]>needle){ e = m; } if(arr[m]<needle){ s = m; } if(arr[m]==needle){ ret原创 2013-09-12 11:31:49 · 446 阅读 · 0 评论 -
有意思的快速排序
快速排序是一种分治法,先找到一个中点,然后对分别对两段数据进行排序原创 2013-08-30 11:50:30 · 475 阅读 · 0 评论