算法和数据结构学习
free2o
这个作者很懒,什么都没留下…
展开
-
Beamforming c++实现
#include <iostream>#include <cmath>#define M_PI 3.14159265358979323846#define ANGLE_RESOLUTION 500 int main(){ int numElements = 4; double spacing = 0.2; double freq = 1000.0; d...原创 2020-04-08 20:07:58 · 644 阅读 · 0 评论 -
求整数数组中和最大的子数组
struct maxInfo{ int start; int end; int max;};bool maxValue(int a[], int n, maxInfo& mi ){ if( n < 0 ) { return false;} mi.start = mi.end = 0;原创 2013-05-30 13:07:28 · 750 阅读 · 0 评论 -
Hash 函数大全
看到了几个Hash 函数的计算方法,因此想把所见到的所有Hash code 的计算方法的算法罗列出来。会陆续追加看到的Hash 的算法。 第一种: 这是MySql 中计算Hash Code 的一个代码 inline Uint32 Hash( const char* str ){ Uint32 h = 0; Uint32 len = strlen(str); while(原创 2008-03-20 13:22:00 · 1175 阅读 · 0 评论 -
Tea 任何长度数据加密的一个实现
如下为tea 加密的一个实现,可以实现任何长度数据的加密。TEA 是八字节分组,加密之后的长度不是和原来输入明文数据的长度。把原明文数据长度作为加密数据的一部分存储,在解密的时候还原原始明文的长度。不记得原作者copyright 声明了,如果使用如下代码,自己承担相关风险。 用法,你知道的! 头文件如下:#pragma once/* -Input data: 8 by转载 2014-03-26 10:15:42 · 2390 阅读 · 0 评论 -
Leetcode - Two Sum
Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution.Example:Given nums =原创 2016-06-22 22:09:29 · 954 阅读 · 0 评论 -
Leetcode - Add Two Numbers
You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a link原创 2016-06-22 22:46:32 · 1063 阅读 · 0 评论 -
Leetcode - Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters.Examples:Given "abcabcbb", the answer is "abc", which the length is 3.Given "bbbbb", the answer is "原创 2016-06-23 08:24:57 · 912 阅读 · 0 评论 -
Leetcode - Roman to Integer
Given a roman numeral, convert it to an integer.Input is guaranteed to be within the range from 1 to 3999.这个程序类似int romanToInt(string s) { string symbols[] = { "M", "CM", "D", "C原创 2016-10-14 21:36:28 · 793 阅读 · 0 评论 -
Leetcode - Integer to Roman
Given an integer, convert it to a roman numeral.Input is guaranteed to be within the range from 1 to 3999. 可以在网上自行搜索一下罗马数字的编码规则。string intToRoman(int num) { string symbols[] = {原创 2016-10-14 21:02:24 · 846 阅读 · 0 评论 -
Leetcode - Container With Most Water
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Fin原创 2016-10-17 15:16:22 · 823 阅读 · 0 评论 -
Leetcode - Remove Nth Node From End of List
Given a linked list, remove the nth node from the end of list and return its head.For example, Given linked list: 1->2->3->4->5, and n = 2. After removing the second node from the end, the原创 2016-10-17 16:36:44 · 821 阅读 · 0 评论 -
Leetcode - 3Sum
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.Note: The solution set must not contain原创 2017-09-14 20:00:45 · 527 阅读 · 0 评论 -
leedcode - Valid Parentheses
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.The brackets must close in the correct order, "()" and "()[]{}" are all vali原创 2017-09-15 15:49:32 · 564 阅读 · 0 评论 -
C 语言设计模式(三) 双链表
在C 语言中双链表的实现,已经有很多经典的实现,下面的代码,从 android 中摘取,事实上这段代码可能 google 的人最初从linux 的代码中学得,其实设置到了极限,都达到了设计的完美,那么大家几乎说就是一样了,因我完美是唯一的,对于同一个事物的抽线,最完美的表达是唯一的。 struct listnode{ struct listnode *n原创 2013-05-05 17:14:02 · 996 阅读 · 0 评论 -
C 语言设计模式(二) 单链表操作
需要单独实现 :void list_element_destroy(struct list *ele)int list_element_cmp(void* l1 , void* l2)这两个函数,就可以构成一个通用的list,操作代码struct list{ void * datas; struct list * next;};struct list * g_first原创 2008-11-26 22:56:00 · 970 阅读 · 0 评论 -
C 语言设计模式(一) 动态数组
C 语言中也有很多经典的设计,这些设计被大量的用在软件中。 下面的动态数组的设计比较经典,其实自己也设计过,这次在flex 的源代码中发现这个设计方法,认为是一个可以提炼出来的模式。 头文件:#ifndef __BUF_H__ #define __BUF_H__ #include struct Buf { void * elts; int nelts;原创 2008-06-03 22:24:00 · 1815 阅读 · 0 评论 -
判断一个数字是否是回文
据说是HuaWei 面试试题,不知道真假了。#include stdio.h>int check(int m){ int n =m ,i,d = 0; while(n) { d = d * 10 + n %10; n /= 10 ; } return (d ==原创 2008-03-18 21:43:00 · 731 阅读 · 0 评论 -
一个分糖果游戏的解法
所有学生以圆形围着老师,每个学生开始时均有偶数块糖果,老师每吹一次哨子,每位学生拿出手中一半糖果给右侧的同学,对任何一个学生,吹哨后,当手中的糖果数为奇数块时,由老师补一块给他(她),这样下去,当每个学生手中的糖果数相同时,游戏结束.输入要求:游戏测试不止一个,对于每个游戏测试,输入学生人数N,开始时每个学生手中的糖果数分别为多少(EVEN),输入学生人数为"0"时,测试结束.输出要求:对每个游原创 2008-03-15 21:07:00 · 1858 阅读 · 0 评论 -
找出整数数组中两个数差值的绝对值最小
有一个整数数组,请求出两两之差绝对值最小的值,记住,只要得出最小值即可,不需要求出是哪两个数。 下面是一个结发了,利用了stl 的sort 来晚成排序。#include iostream>#include vector>#include ctime>#include cstdio>#include cmath>using namespace std;#define N 100原创 2008-03-19 16:29:00 · 9201 阅读 · 2 评论 -
Auction
Problem A: AuctionRecently the auction house has introduced a new type of auction, the lowest price auction. In this new system, people compete for the lowest bid price, as opposed to what they did原创 2008-03-16 14:02:00 · 759 阅读 · 0 评论 -
任意长度正整数加法
任意长度加法的实现,没有考虑负数的情况。#include iostream>#include stack>#include string>using namespace std;int inline cti(char c){ return (c - 0);}int main(){ string a,b,max,min; int i, len ,cr ,tmp; stackint原创 2008-03-19 09:53:00 · 663 阅读 · 0 评论 -
lzw 压缩算法源代码
lzw 压缩算法源代码: /************************************************************************ Copyright (c) 1989 Mark R. Nelson**** LZW data compression/expansion demonstration program.**** April 13,转载 2008-03-20 22:00:00 · 2403 阅读 · 2 评论 -
Floyd-Warshall 算法
Floyd-Warshall 算法用来找出每对点之间的最短距离。它需要用邻接矩阵来储存边,这个算法通过考虑最佳子路径来得到最佳路径。 注意单独一条边的路径也不一定是最佳路径。 从任意一条单边路径开始。所有两点之间的距离是边的权,或者无穷大,如果两点之间没有边相连。 对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从 u 到 w 再到 v 比己知的转载 2008-03-26 13:27:00 · 888 阅读 · 0 评论 -
Longest Common Subsequence
递归的解法是:#include stdio.h>int inline max(int a,int b){ return a >= b ? a : b;}int lcs(char * a, int la, char *b, int lb){ if(la 0 || lb 0 ) return 0; if(a[la] == b[lb])转载 2008-03-25 20:53:00 · 583 阅读 · 0 评论 -
一个典型的动态规规划用
DP 有两种类型,一种是:Top-Down 一种是:Bottom-Up 。 DP 的典型的应用有几种: 1、Coin change : is the problem of finding the number of ways of making changes for a particular amount of cents,n, using a given set of denominatio转载 2008-03-26 21:58:00 · 602 阅读 · 0 评论 -
Longest Increasing Subsequence
传统上解决longest incresing subsequence 的算法的时间复杂度是O(n^2) ,算法如下:int lcs( int* a, int N ) { int *best, *prev, i, j, max = 0; best = (int*) malloc ( sizeof( int ) * N ); prev = (int*) malloc ( si转载 2008-03-26 18:01:00 · 891 阅读 · 0 评论 -
Josephus问题的数学方法
转载 2008-03-26 15:27:00 · 764 阅读 · 0 评论 -
数独的一个解法
公司茶水间打扫卫生的人很喜欢研究数独问题,经常一个人拿着报纸解上面的数独问题,一次遇到了一个难度为四级的问题拿来问我,我研究了一会没做出来,真是没面子,因此想到写一个小程序来解决。程序只是简单的尝试每一个可能的数字。根据输入数据的情况,来排除一些无效的数字情况。#include stdio.h>#define N 9#define VALID (1)#define INV原创 2008-05-19 20:09:00 · 1400 阅读 · 0 评论 -
数组求和的一个解法
在csdn 看到了这样一个问题:给定一个整形数组和一个整形数,求出数组中的数相加等于给定整形数的所有组合 如int a[4]={1,2,5,10},int sum=100 组合如下: 1,1.........(100)/*100个1*/ 2,2..........(50)/*50个2*/ 1,1,2,2......(2,49)/*2个1,49个2*/ 想到了这样的原创 2008-05-22 21:14:00 · 1219 阅读 · 0 评论 -
如何编写从M中选N的组合数程序,一个不用递归方法设计,一个用递归方法设计
看到有人写帖子问如果从m个数组中取N个原始的算法,要求一个是递归的,一个不是递归的。递归的解法:(比较笨)void getn(int a[], int b[] , int m, int n, int index,int lastindex){ int i = lastindex + 1; if(index == n ) {原创 2008-05-22 22:46:00 · 2557 阅读 · 3 评论 -
Revser single link example code
单链表倒序: #include stdio.h>struct link{ int value; struct link * next;} ;void output_link(struct link * head){ printf(" "); while(head != NULL) { printf(" [%d] ", head->value); head = head->n原创 2008-03-15 15:40:00 · 925 阅读 · 1 评论