
java
Alexarea
小白一枚
展开
-
算法导论2-1.3:n个数的一个序列A中查找v
package chapter2.section1;/** * 输入:n个数的一个序列A={a1,a2,a3...an}和一个值v * 输出:下标i使得v=A[i]或者当v不在A中出现时,v为特殊值NIL * 写出线性查找的伪代码,它扫描整个序列来查找v,使用一个循环不变式来证明你的算法 * * 伪代码: * SelectV(A,v) * for i=1 to A.原创 2017-12-01 23:18:51 · 1200 阅读 · 0 评论 -
求一堆点中的最大点集合(边界点)
最大点集合(边界点)时间限制:1秒 空间限制:32768K P为给定的二维平面整数点集。定义 P 中某点x,如果x满足 P 中任意点都不在 x 的右上方区域内(横纵坐标都大于x),则称其为“最大的”。求出所有“最大的”点的集合。(所有点的横坐标和纵坐标都不重复, 坐标轴范围在[0, 1e9) 内) 如下图:实心点为满足条件的点的集合。请实现代码找到集合 P 中的所有 ”最大“ 点的集合并...原创 2018-02-08 16:34:12 · 9811 阅读 · 2 评论 -
反转链表
题目描述输入一个链表,反转链表后,输出链表的所有元素。解题方案本题可以使用一个新的节点,每次将新的节点的下一个节点设置为之前已经存储的逆序的链表即可完成链表的反转。/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = ...原创 2018-03-14 22:01:15 · 119 阅读 · 0 评论 -
翻转单词顺序列
题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?解题方案本题使用...原创 2018-03-15 19:40:37 · 277 阅读 · 0 评论 -
求1+2+3+...+n,要求不能使用乘除法等判断语句
题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。解题方案本题的思路是使用递归即可。public class Solution { public int Sum_Solution(int n) { if(n == 1){ return 1;...原创 2018-03-16 20:13:22 · 932 阅读 · 2 评论 -
调整数组顺序使奇数位于偶数前面
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解题方案本题的思路为遍历一次,前面的奇数直接放入原数组,后面的偶数直接放入原数组。import java.util.Arrays;public class Solution { public s...原创 2018-03-19 20:22:23 · 146 阅读 · 0 评论 -
二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解题方案本题的思路容易被负数用补码表示误导,其实跟补码无关,直接使用&即可。首先我们需要知道&是什么,&是按位做与,也就是将两个变量变为二进制然后进行按位与操作,同为1才能为1,否则就为0,但是我们需要知道一个小技巧(如果一个数字的二进制中只有一个1时,它与它减一之后得到的值按位与之后答...原创 2018-03-24 09:32:49 · 145 阅读 · 0 评论 -
数值的整数次方
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。解题方案本题的思路在于小数会丢失精度,所以这时可以先计算答案,然后再计算它的倒数即可。public class Solution { public double Power(double base, int exponent) { i...原创 2018-03-24 09:32:37 · 125 阅读 · 0 评论 -
链表中倒数第k个结点
题目描述输入一个链表,输出该链表中倒数第k个结点。解题方案本题是求得倒数第k个结点,所以我们可以想到可以使用两个节点,使它们的间距为k-1即可,先将第一个节点向后走k-1步,然后两个节点一起向后走,一旦第一个节点碰到null之后,则第二个节点就是倒数第k个节点/*public class ListNode { int val; ListNode next ...原创 2018-03-24 09:32:27 · 143 阅读 · 0 评论 -
顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.解题方案本题的思路可以分两个步骤,首先矩阵是顺时针顺序打印,所以你可以先思考如何对矩阵的一圈进行打印(就是一堆if语句)...原创 2018-03-20 19:40:50 · 175 阅读 · 1 评论 -
合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解题方案本题的思路在于通过第三个链表作为其合并输出结果,每次都获取两个链表头中的较小值放入合并链表中即可。/*public class ListNode { int val; ListNode next = null; ListNode(int val...原创 2018-04-02 20:22:17 · 167 阅读 · 0 评论 -
alibaba的FastJson的用法
alibaba的FastJson主要是用于json格式的数据与其他类型的数据的转换常用的静态方法public static final Object parse(String text); //将Json文本parse为JSONObject或者JSONArraypublic static final JSONObject parseObject(String tex...转载 2018-04-10 15:00:40 · 2162 阅读 · 0 评论 -
在栈中实现获取最小元素的min
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。解题方案本题的重点在于min函数是要多次调用的,即不能使用一个变量来存储当前的最小值,所以在这里我使用了辅助栈作为最小值的保存。在存储数据栈的时候同步将最小栈存储,当当前传入的数据值小于当前最小值的时候我们让最小值入数据栈和最小值栈,当当前传入的数据值大于当前的最小值时,我们将当前值入数据栈,并将当前的最小值...原创 2018-06-12 17:24:10 · 1475 阅读 · 0 评论 -
求按从小到大的顺序的第N个丑数。
题目描述把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。解题方案本题中我们首先需要知道什么是丑数,其因子只包含2,3,5中任意个都称作丑数(在这里有一点——之后的丑数可以通过之前的丑数计算出来) 其次这道题的思路是将上述的描述转换为数学语言为: 丑...原创 2018-06-13 13:50:22 · 2038 阅读 · 0 评论 -
输入两棵树A,B,判断B是不是A的子结构。
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解题方案本题的思路在于子结构的判断,首先需要判断两棵树的根节点是否相同,若是不同则递归调用其左子树和B树,若仍不同则递归调用其右子树和B树,若都不同则返回false。/**public class TreeNode { int val = 0; TreeNode le...原创 2018-06-13 14:41:51 · 827 阅读 · 2 评论 -
不用加减乘除做加法
题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。解题方案本题要求为不使用加减乘除做加法,所以在此使用的是位运算符,回想当年小学最开始学加法时,通常由两个步骤,第一步为求和,第二步为进位,以此类推,在此是将进位和当前位求和分开计算。public class Solution { public int Add(int num1,int nu...原创 2018-02-08 14:31:44 · 183 阅读 · 0 评论 -
矩形覆盖
题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?解题思路首先根据题意可以知道,2*1的矩形摆放方式只有两种,要么是横着放,要么是竖着放,但是如果当这块2*1的矩形横着放则肯定有一块会横着放在这块下面,所以就相当于这个矩形的长度缩小了2个单位;但如果这块2*1的矩形竖着放,无疑是将这个矩形长度缩小1个...原创 2018-02-28 00:36:04 · 117 阅读 · 0 评论 -
用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解题方案本题思路是栈的先进后出和队列的先进先出,所以可以使用一个栈用作保存数字,另一个栈用作弹出的时候将保存数字的栈的数据存入本栈并输出。import java.util.Stack;public class Solution { Stack<Integer>...原创 2018-02-13 13:37:33 · 139 阅读 · 0 评论 -
算法导论2-1.4:给出两个长度为n的二进制数(当前存放在数组中),求和后放入长度为n+1的数组中
package chapter2.section1;/** * 给出两个长度为n的二进制数(当前存放在数组中),求和后放入长度为n+1的数组中 * 思想:由于是二进制数放在数组中,所以可以采用将二进制数转换为十进制数进行计算然后再转换为二进制数 * * @author Administrator * */public class Hw_4_TwoBinaryArrayAdd {原创 2017-12-01 23:20:21 · 662 阅读 · 0 评论 -
java实现插入排序
package chapter1.section1_1;/** * 插入排序 思想:假设之前的顺序是已经排序好的,则只需将当前遍历的数从后向前遍历查找合适的位置放下即可 * * @author Administrator * */public class InsertionSort { public static void main(String[] args) { Int原创 2017-11-19 21:35:26 · 161 阅读 · 0 评论 -
斐波那契数列
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n解决方案: 方案一:使用递归实现(但是时间复杂度很高)public class Solution { public int Fibonacci(int n) { if(n <= 0) return 0; if(n==1 || n==原创 2018-01-25 23:01:37 · 190 阅读 · 0 评论 -
跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解题方案:本题可以使用递归来实现,首先将当前需要跳的总台阶数根据跳的种类来分为跳一级和跳两级,所以当n>=3个台阶的时候所跳的种类(返回值)为JumpFloor(target-1)+JumpFloor(target-2),当当前所需要跳的级数为1级,则只有一种跳法,当前原创 2018-01-25 23:03:48 · 140 阅读 · 0 评论 -
变态跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法解题方案F(0) = 1F(1) = 1F(2) = F(0)+F(1)...F(n) = F(n-1)+F(n-2)+...+F(0)= F(n-1)+F(n-2)+...+F(2)= F(n-原创 2018-01-25 23:05:32 · 155 阅读 · 0 评论 -
二叉树的深度
题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。解题方案本题主要在于二叉树的判断分为三类,第一类为该节点是否不存在,第二类是该节点的左子节点和右子节点是否同时不存在,第三种则为左右子节点至少有一个存在,所以可以三方面考虑。public class TreeNode {原创 2018-01-27 00:06:02 · 156 阅读 · 0 评论 -
二维数组的查找
题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题方案 首先已知该二维数组按行递增,也按列递增,所以我们取左下角的值来判断(原因是:如果选取右下角或左上角的值来计算则会出现在向下/向上,向右/向左中进行选择,即出现岔路,所以在此使用的是获原创 2018-01-29 13:30:22 · 226 阅读 · 0 评论 -
重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题方案本题重在对二叉树的前序和后序遍历的方式的理解(具体含义不详谈了),思路是,先获取先序遍历的第一个元素-根元素,然后在中序遍历中查找对应的...原创 2018-02-08 19:58:15 · 155 阅读 · 0 评论 -
替换空格
题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解题方案就本题来说有两种解法。 第一种解法是: 新建一个StringBuffer对象,遍历所给对象,进行逐步判断,如果不是空格,则直接添加进入新的StringBuffer对象中,如果是空格,则添加对应替换的字符串即可。原创 2018-01-29 17:33:15 · 147 阅读 · 0 评论 -
从尾到头打印链表
题目描述输入一个链表,从尾到头打印链表每个节点的值。解决方案方法一最开始想着使用栈来反转,但是由要求是只填写方法体,所以最后使用了两个ArrayList,一个先进行获取,然后再遍历一次进行反转(这个方法比较笨一些)。/*** public class ListNode {* int val;* ListNode next = null;原创 2018-01-29 18:15:26 · 129 阅读 · 0 评论 -
求两个序列的最大公共子序列的长度(递归解法)
本题主要采用的是递归思想(分类讨论)判断当前两个字符串是否有一个长度为0,若有则直接返回0即可判断当前两个字符串中的第一位是否相同,若相同则直接双方去掉第一位并返回调用该方法(参数为两方截断首位的字符串)再加1(当前相同的第一位,所以返回值加1);若不相同,则返回调用本方法参数分别为字符串a截取首位和字符串b 与 字符串a和字符串b截取首位的最大值返回回去(在此采用了三元表达式)。p原创 2018-01-29 23:41:34 · 2268 阅读 · 0 评论 -
二叉树的深度优先遍历(先、中、后序方式-递归和非递归)和广度优先遍历
package cn.alex.demo;import java.util.ArrayDeque;import java.util.Deque;import java.util.LinkedList;import java.util.List;import java.util.Stack;/** * 树的遍历方式 深度优先遍历:递归和非递归两种 广度优先遍历: * * @a...原创 2018-02-13 00:59:34 · 1656 阅读 · 0 评论 -
查找薪水涨幅超过15次的员工号emp_no以及其对应的涨幅次数t
题目描述查找薪水涨幅超过15次的员工号emp_no以及其对应的涨幅次数tCREATE TABLE `salaries` (`emp_no` int(11) NOT NULL,`salary` int(11) NOT NULL,`from_date` date NOT NULL,`to_date` date NOT NULL,PRIMARY KEY (`emp_no`,`fro...原创 2018-02-13 01:22:18 · 448 阅读 · 0 评论 -
找出所有员工当前具体薪水情况,相同的薪水只显示一次并逆序显示
题目描述找出所有员工当前(to_date=’9999-01-01’)具体的薪水salary情况,对于相同的薪水只显示一次,并按照逆序显示CREATE TABLE `salaries` (`emp_no` int(11) NOT NULL,`salary` int(11) NOT NULL,`from_date` date NOT NULL,`to_date` date NOT ...原创 2018-02-13 01:35:01 · 549 阅读 · 0 评论 -
二叉树的镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ ...原创 2018-02-13 02:01:51 · 136 阅读 · 0 评论 -
栈的压入、弹出序列
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)解题方案本题的解题思路在于我们如何将压栈弹出进行比较,这里我使用了一个辅助...原创 2018-06-14 17:59:28 · 366 阅读 · 0 评论