算法
Fant_J
千千阙文。
展开
-
J - 位操作练习 (Java)
给出两个不大于65535的非负整数,判断其中一个的16位二进制表示形式,是否能由另一个的16位二进制表示形式经过循环左移若干位而得到。 循环左移和普通左移的区别在于:最左边的那一位经过循环左移一位后就会被移到最右边去。比如: 1011 0000 0000 0001 经过循环左移一位后,变成 0110 0000 0000 0011, 若是循环左移2位,则变成 1100 0000 000原创 2017-12-08 18:42:08 · 211 阅读 · 0 评论 -
Java数据结构与算法(八)-二叉树
一、为什么要使用树有序数组插入、删除数据慢。链表查找数据慢树可以解决这两个问题二、相关术语树的结点:包含一个数据元素及若干指向子树的分支;孩子结点:结点的子树的根称为该结点的孩子;双亲结点:B 结点是A 结点的孩子,则A结点是B 结点的双亲;兄弟结点:同一双亲的孩子结点; 堂兄结点:同一层上结点;祖先结点: 从根到该结点的所经分支上的所有结点子孙结点:以某结点为根原创 2018-01-04 20:30:53 · 194 阅读 · 0 评论 -
Java数据结构与算法(七)-快速排序
一、快速排序思想 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。二、如何进行划分&关键字的设定 首先任意选取一个数据(通常选用数组的第一个数)作为关原创 2018-01-04 20:30:21 · 165 阅读 · 0 评论 -
Java数据结构与算法(六)-希尔排序
一、希尔排序的产生 希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。二、希原创 2018-01-04 20:29:53 · 196 阅读 · 0 评论 -
Java数据结构与算法(五)-双向链表
什么是双向链表 每个结点除了保存了xui下一个结点的引用,同时还保存这对前一个节点的引用。从头部进行哈如 要对链表进行判断,如果为空则这是尾结点为信添加的结点。如果不为空,还需要设置投结点的前一个结点为心田的结点。从尾部进行插入 如果链表为空,则直接设置头结点为新添加的结点,否则设置尾结点的后一个结点为新添加的结点。同时设置新添加的结点的前一个结点为尾结点。从头部进行删除 判断头结点原创 2018-01-04 20:29:24 · 224 阅读 · 0 评论 -
Java数据结构与算法(四)-链表
链表是一种物理存储单元 上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针 链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针 域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表原创 2018-01-04 20:28:52 · 133 阅读 · 0 评论 -
Java数据结构与算法(三)-栈和队列
1.栈先进后出,后进先出 栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。 package co原创 2018-01-04 20:28:20 · 216 阅读 · 0 评论 -
Java数据结构与算法(二)-简单排序
1.冒泡排序 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端。2.选择排序 选择排序(Selection sort)是一种原创 2018-01-04 20:27:44 · 156 阅读 · 0 评论 -
Java数据结构与算法(一)-数组
1. 无序数组package com.fantj.dataStruct.array;/** * Created by Fant.J. * 2017/12/20 18:16 */public class MyArray { private long[] arr; //表示有效数据的长度 private int elements; public M原创 2018-01-04 20:27:04 · 163 阅读 · 0 评论 -
H - 1的个数 (Java)
给定一个十进制整数N,求其对应2进制数中1的个数 Input 第一个整数表示有N组测试数据,其后N行是对应的测试数据,每行为一个整数。 Output N行,每行输出对应一个输入。 Sample Input 4 2 100 1000 66 Sample Output 1 3 6 2import原创 2017-12-07 19:42:56 · 189 阅读 · 0 评论 -
I - 信号转换 (Java)
有的时候对一种编码信号需要转换成另一种信号以便于发送或达到其他目的。考虑一种字母信号,只有ABCD四个大写字母组成。要求给定一串字母信号,转为数字信号,转化方式为:A转为数值1,B转为数值2,C表示符号,D表示换行符。给定一串字母信号,求其数字信号。例如字母信号:AABBCBACADAB转化后数字信号为:1122,D表示换行符。给定一串字母信号,求其数字信号。 例如字母信号: AAB原创 2017-12-07 19:42:29 · 354 阅读 · 0 评论 -
G - IP地址转换--java
IP地址总是由4个0-255的数字以”.”隔开的形式来显示给用户,例如192.168.0.1。在计算机中,一个IP地址用4字节来依次存储其从右到左的4个数字部分,每个字节(8比特)以2进制的形式存储相应的IP地址数字,请你实现一个从IP地址的显示格式到计算机存储格式的转换。 Input 每行输入一个IP地址,如果输入为-1,结束输入 Output 每行输出一个IP地址原创 2017-12-06 19:48:24 · 630 阅读 · 0 评论 -
F - 数字方格
如上图,有3个方格,每个方格里面都有一个整数a1,a2,a3。已知0 <= a1, a2, a3 <= n,而且a1 + a2是2的倍数,a2 + a3是3的倍数, a1 + a2 + a3是5的倍数。你的任务是找到一组a1,a2,a3,使得a1 + a2 + a3最大。 Input 一行,包含一个整数n (0 <= n <= 100)。 Output 一个整数,即a原创 2017-12-05 17:46:11 · 1459 阅读 · 0 评论 -
E - 鸡兔同笼
一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物。 Input 一行,一个正整数a (a < 32768)。 Output 一行,包含两个正整数,第一个是最少的动物数,第二个是最多的动物数,两个正整数用一个空格分开。 如果没有满足要求的答案,则输出两个0,中间用一个空格分原创 2017-12-05 17:24:50 · 300 阅读 · 0 评论 -
D - 数字反转
给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例 2) 。 Input 输入共 1 行,一个整数 N。 Output 输出共 1 行,一个整数,表示反转后的新数。 Sample Input 样例 #1: 123 样例 #2: -38原创 2017-12-05 17:08:10 · 311 阅读 · 0 评论 -
C - 不吉利日期
在国外,每月的13号和每周的星期5都是不吉利的。特别是当13号那天恰好是星期5时,更不吉利。已知某年的一月一日是星期w,并且这一年一定不是闰年,求出这一年所有13号那天是星期5的月份,按从小到大的顺序输出月份数字。(w=1..7) Input 输入有一行,即一月一日星期几(w)。(1 <= w <= 7) Output 输出有一到多行,每行一个月份,表示该月的13日是原创 2017-12-05 16:36:43 · 2647 阅读 · 0 评论 -
B - 数制转换
problem: 求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。 不同进制的表示符号为(0,1,…,9,a,b,…,f)或者(0,1,…,9,A,B,…,F)。Input: 输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。 a,b是十进制整数,2 =< a,b <= 16。Outp原创 2017-12-04 12:02:33 · 405 阅读 · 0 评论 -
Java数据结构与算法(九)-哈希表
1. 什么是哈希表 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 也是基于数组来实现。 Hash表也称散列表,也有直接译作哈希表,Hash表是一种特殊的数据结构,它同数组、链表以及二叉排序树原创 2018-01-04 20:31:19 · 405 阅读 · 0 评论