算法数据结构
Balalalalalalalala
Details makes perfect
展开
-
二维数组(矩阵)对角线输出
{ 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 }, { 13, 14, 15, 16 },原创 2014-05-20 11:52:40 · 6746 阅读 · 0 评论 -
二分查找
回想大学时代写的第一个排序算法就是冒泡排序,原理也比较好理解,就是比较大的数往下沉就好了,哈哈哈,虽然其时间复杂度是 O(n2),但也很有必要缅怀一下:public class BubbleSort { public static void main(String[] args) { int a[] = {49, 38, 65, 97, 76, 13, 27, 49, 78,原创 2017-12-10 11:03:33 · 215 阅读 · 0 评论 -
彻底理解归并排序算法
分治法归并排序算法是采用分治法的一个典型应用。分治法是设计算法的一种策略,包含三步: 1、分 把原问题分解成若干子问题 2、治 (递归地)解决子问题 3、合 合并子问题的解,得到原问题的解归并排序算法工作原理不断将数组一分为二,递归成一个个的子数组,得到最小子数组的排序,并合并: 1. 申请两个空间存放子序列数据,子序列是排好序的 2. 设定两个指针,分别指向两个序列...原创 2018-01-02 22:08:21 · 1716 阅读 · 0 评论 -
彻底计数排序和基数排序
随机化快速排序、堆排序、归并排序、插入排序都是比较模型的排序,最好的情况下时间复杂度是O(nlgn),那有没有比nlgn更快的呢?答案是有的,利用空间换时间,那就是计数排序和基数排序。计数排序参考:计数排序 Java实现: import java.util.Arrays;public class CountingSort { public static void ...原创 2018-03-29 07:53:11 · 474 阅读 · 0 评论 -
欧几里德与扩展欧几里德算法
欧几里德算法欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b)。第一种证明: a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,则有 d|a, d|b,而r = a - kb,因此d|r...转载 2018-10-17 23:39:06 · 482 阅读 · 0 评论 -
补码原理的个人理解
二进制是最高位是符号位,0表示正数,1表示负数。正数的值是其本身,负数的值是最高位(符号位不变),其它位逐位取反,再 +1。两数相加,若最高位(符号位)有进位,则进位被舍弃。可以将符号位同一处理,最高位不再表示数值,而是作为符号位,正好数值折半,即一半是负数,一半是正数。如:4 位二进制数共有 16 个数,用补码表示,则一半是 0-7,一半是 -1–8。补码运算是封闭的:运算结果保留在补码...原创 2018-10-19 22:13:01 · 4988 阅读 · 4 评论 -
快速排序算法
参考:算法 3:最常用的排序——快速排序【漫画】不要再问我快速排序了转载 2018-11-25 22:05:54 · 196 阅读 · 0 评论 -
链表中环的检测
链表中环的检测定义两个快慢指针 pFast 和 pSlow,pFast 每次走两步,pSlow 每次走一步,如果 pFast 在循环遍历后为 null,则链表中不存在环。如果 pFast 和 pSlow 相遇则链表中存在环,废话不多说,看代码吧:public class DetectLoop { public static void main(String[] args) { ...原创 2018-12-02 19:57:56 · 1936 阅读 · 0 评论 -
轻松搞定链表面试题
构造的链表和打印 public static void main(String[] args) { int[] arr = {1, 3, 5, 7, 9, 11, 13, 15, 17}; LinkedListDemo linkedListDemo = new LinkedListDemo(); Node head1 = linkedListDe...原创 2018-12-01 17:34:53 · 232 阅读 · 0 评论 -
栈实现括号匹配
现在有圆括号 ()、方括号 [] 和花括号 {},将它们任意嵌套 {[(3+2) * 2] + 3} 是合法的格式, {[(3+2 * 2] + 3} 是不合法的格式。原创 2018-12-03 22:56:42 · 671 阅读 · 0 评论 -
插入排序
插入法排序(Insertion Sort)的基本思想:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子数组中的适当位置,直到全部记录插入完成为止。跟打牌一样,手中的牌都是排好序的,抓了一张牌之后插入到手中排好序的区间里。如:8 2 4 9 3 6 这样一个待排序的序列经过插入法排序的处理后:第一轮排序后:2 8 4 9 3 6第二轮...原创 2018-12-10 22:33:35 · 201 阅读 · 0 评论 -
冒泡排序
回想大学时代写的第一个排序算法就是冒泡排序,原理也比较好理解,就是比较大的数往下沉就好了,哈哈哈,虽然其时间复杂度是 O(n2),但也很有必要缅怀一下:public class BubbleSort { public static void main(String[] args) { int a[] = {49, 38, 65, 97, 76, 13, 27, 49, 78,原创 2017-12-10 10:59:44 · 183 阅读 · 0 评论 -
约瑟夫问题c、Java语言实现
n个人围成一圈,从第k人个开始报数,假设数到m的人出圈,最后剩下一个,求这个人的编号?一、链表实现c 语言实现:#include<stdio.h>#include<stdlib.h>typedef struct child{ int num; struct child * next;}child;child * init_chil...原创 2014-09-02 17:29:17 · 750 阅读 · 0 评论 -
斐波那契数列
if原创 2014-05-29 19:07:22 · 822 阅读 · 0 评论 -
百钱买百鸡问题解决 PHP
我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题。 该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一; 百钱买百鸡,则翁,母,雏各几何?<?php/** * $cock 鸡翁 $hen 母鸡 $chicken 小鸡 * 可得$cock + $hen + $chicken = 100 * 百钱原创 2014-03-11 13:33:26 · 2808 阅读 · 1 评论 -
判断子序列、求最长公共子序列算法实现
#include#include#include#define FAIL 0#define SUCCESS 1//贪心法int getSubsequence(char P[], char T[]){ int j = 0; int i; int m = strlen(P); int n = strlen(T); for (i = 0; i <原创 2014-09-20 19:07:42 · 994 阅读 · 0 评论 -
中国余数定理
#include//求两个数的最大公倍数int comMulti(int a, int b){ return a * b;}//求得取模为1的数int CRT(int divi, int multi){ int i = 1; while(1) { if (multi % divi == 1) { break; } else { multi原创 2014-10-29 14:22:36 · 3499 阅读 · 0 评论 -
去哪儿网笔试题
一、循环数组查找特定值解决此问题的难点就是要找到此循环数组的分界点,如{23,34,41,52,4,8,13,20}这个数组的分界点就是数组下标为3的这个位置。找到分界点后,再看要找的目标值是在分界点的左边还是右边,再用折半查找法就可以解决问题了。#includeint indexOf(int a[], int target, int len){ int i = 0; in原创 2015-03-24 13:11:49 · 996 阅读 · 0 评论 -
合并两个有序链表——递归实现和非递归实现
先看代码的实现:#include<stdio.h>#include<stdlib.h>//链表存储结构typedef struct Node{ int number; struct Node * next;}Node;typedef struct Node * LinkList;void createListHead(LinkList * p...原创 2015-04-05 10:05:13 · 3892 阅读 · 0 评论 -
byte[]数组和int 之间的转换
&: 按位与,当两位同时为1时才返回1。 1011 1010 & 1111 1111 =1011 1010,还是得到是原值(类似位置对应)。|:按位或,只要有一位为1即可返回1。1011 1010 0000 0000 | 1011 0101 =1011 1010 1011 0101(字节拼接)>>:右移运算符,。package demos;/** * Cr转载 2015-11-21 20:55:54 · 9828 阅读 · 0 评论 -
统计int类型-字节中1的个数
public class BytesToInt { public static int count1(int value){ int count = 0; for (int i = 0; i < 32; i++){ if ((value & 0x01) == 0x01){ count++;原创 2015-11-21 21:31:39 · 2077 阅读 · 0 评论 -
数字串转中文读法串-Java实现
面试时被问到这个问题,遂查看相关博客,自己也作了相应的实现:package num2rmb;public class Num2Rmb3 { /** * 处理0,1,2.。9的中文读法的 */ private String[] hanArr = {"零" , "壹" , "贰" , "叁" , "肆" , "伍" , "陆" , "柒" , "捌" , "玖"}; /** *原创 2015-11-19 10:16:48 · 1497 阅读 · 0 评论 -
轻松理解全排列算法的递归解法
笔试面试算法经典–全排列算法-递归&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;字典序实现(Java)全排列算法的全面解析原创 2018-12-30 09:38:26 · 11992 阅读 · 8 评论