每天一道算法题
小世界-_-
沉迷代码的程序媛
展开
-
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组
/*** *在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 * 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 */public class TArraySortFind { public static void main(String[] args) { ...原创 2018-11-21 19:52:48 · 235 阅读 · 0 评论 -
二叉树的遍历
参考:https://blog.csdn.net/qq_33243189/article/details/80222629package mainimport "fmt"/***二叉树×××二叉遍历 */func main() { d := NodeTree{"D", nil, nil} c := NodeTree{"C", &d, nil} b :...原创 2018-12-03 17:43:48 · 112 阅读 · 0 评论 -
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应
/*****解:借用一个辅助的栈,遍历压栈顺序,先讲第一个放入栈中,这里是1,然后判断栈顶元素是不是出栈顺序的第一个元素,这里是4,很显然1≠4,所以我们继续压栈,直到相等以后开始出栈,出栈一个元素,则将出栈顺序向后移动一位,直到不相等,这样循环等压栈顺序遍历完成,如果辅助栈还不为空,说明弹出序列不是该栈的弹出顺序。举例:入栈1,2,3,4,5出栈4,5,3,2,1...原创 2018-12-08 21:31:45 · 400 阅读 · 0 评论 -
输入一个链表,反转链表后,输出新链表的表头。
/** * 输入一个链表,反转链表后,输出新链表的表头。 * 注意:需求有两个,1,反转链表,2.输出新链表表头 */public class Solution6 { public static void main(String[] args) { Node node = new Node(1,new Node(2,new Node(3,new Node(4...原创 2018-11-28 15:25:27 · 235 阅读 · 0 评论 -
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
package main/*输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解:思路同合并两个有序数组,三个指针对应三个链表,两个链表的值进行比较后加入新链表中 */import "fmt"func main() { node6 := Node{11,nil} node5 := Node{9,&node6} n...原创 2018-11-30 15:49:28 · 132 阅读 · 0 评论 -
输入一个链表,输出该链表中倒数第k个结点。
/** * 输入一个链表,输出该链表中倒数第k个结点。 * 解:设置一把长度为k的尺子在链表中移动,移动到最后的时候,最左端对应的是倒数第k个节点 */public class Solution5 { public static void main(String[] args) { Node node = new Node(1,new Node(2,new N...原创 2018-11-27 14:27:55 · 201 阅读 · 0 评论 -
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
/** * 输入一个整数数组, * 实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分, * 并保证奇数和奇数,偶数和偶数之间的相对位置不变。 * 解:利用排序算法的稳定性来解 */public class Solution4 { public static void main(String[] args) { ...原创 2018-11-27 10:54:39 · 227 阅读 · 0 评论 -
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
package mainimport ( "fmt" "goproject/src/node")/**输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解:b树中找到a树的根节点,对比a树的每个节点与b树是否相同 */func main() { d := node.SetNodeTree("D", nil, nil...原创 2018-12-04 14:16:32 · 204 阅读 · 0 评论 -
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
第一种方法:使用递归,时间复杂度O(logn)当n为偶数,a^n =(a^n/2)*(a^n/2) 当n为奇数,a^n = a^[(n-1)/2] * a^[(n-1)/2] * a第二种方法:累乘,时间复杂度为O(n)public class Solution { public double Power(double base, int exponent) { ...原创 2018-11-25 12:30:29 · 171 阅读 · 0 评论 -
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
/** * 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? * 解:依旧是裴波那契数列 * 可以理解为n由2或1来填满 * 公式: f(n) = f(n-1) + f(n-2); * f(1) = 1; */public class Solution3 { public static vo...原创 2018-11-23 14:00:19 · 354 阅读 · 0 评论 -
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
package test;/*** 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。* */public class Solution { public static void main(String[] args) { System.out.println(solution(8)); } public static int sol...原创 2018-11-24 15:38:14 · 174 阅读 · 0 评论 -
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
/** * 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 * * 解题思路1: 每一阶都有跳和不跳两种情况,但最后一阶必须跳,所以是2^(n-1) * 解题思路2: 一次跳n阶对应组合方式=1种+一次跳n-1阶->f(n-1)种+一次跳n-2阶->f(n-2)... * 最后得公式:f(n)...原创 2018-11-22 15:58:39 · 617 阅读 · 0 评论 -
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
package mainimport "fmt"/**定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。解:用一个辅助栈如下:3 4 2 5 1 3 2 1 */func main() { for _,i := range [] int{3,4,2,5,1} { push(i) } ...原创 2018-12-06 10:38:13 · 290 阅读 · 0 评论