![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
刷题
有梦想的小树
盛年不重来,一日难再晨,及时当勉励,岁月不待人
展开
-
数据流中的中位数
1.题目描述2.分析3.解决思路4.代码实现1.题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。2.分析这个题目读完之后,第一个想...原创 2019-10-21 22:53:28 · 370 阅读 · 0 评论 -
贪心:花最少的代价切分整块金条
题目描述:一块金条切成两半, 是需要花费和长度数值一样的铜板的。 比如长度为20的 金条, 不管切成长度多大的两半, 都要花费20个铜板。 一群人想整分整块金 条, 怎么分最省铜板?示例:例如,给定数组{10,20,30}, 代表一共三个人, 整块金条长度为10+20+30=60. 金条要分成10,20,30三个部分。如果, 先把长度60的金条分成10和50, 花费60 再把长度5...原创 2019-10-21 20:55:26 · 426 阅读 · 0 评论 -
平衡二叉树
输入一棵二叉树,判断该二叉树是否是平衡二叉树。方法一:public class Solution { public boolean IsBalanced_Solution(TreeNode root) { return process(root).isB; } public class ReturnData{ boolean is...原创 2019-10-13 17:03:30 · 123 阅读 · 0 评论 -
二叉树中找到一个节点的后继节点
1.后继节点:二叉树的中序遍历下,某节点的后一个节点就是后继节点。2.两种情况:节点有右子树:右子树中的最左节点就是该节点的后继节点。可以通过“左中右”顺序理解一下。 节点无右子树:一直向上查找,直到该节点是父节点的左孩子,即为后继节点。3.节点的数据结构,比一般情况下多了一个parent节点。该结构比普通二叉树节点结构多了一个指向父节点的parent指针。 假设有一 棵Node类型...原创 2019-10-13 15:53:24 · 935 阅读 · 0 评论 -
判断一个链表是否为回文结构
1.题目描述2.解法一:时间O(N) ,空间O(N).3.解法二:时间O(N) ,空间O(N/2).4.解法三:时间O(N) ,空间O(1).1.题目描述【 题目】 给定一个链表的头节点head, 请判断该链表是否为回文结构。 例如: 1->2->1, 返回true。 1->2->2->1, 返回true。15->6->15, 返...原创 2019-10-13 10:25:48 · 229 阅读 · 0 评论 -
(华为)删数、约瑟夫环问题
有一个数组a[N]顺序存放0~N-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。输入描述:每组数据为一行一个整数n(小于等于100...原创 2019-04-02 21:20:57 · 730 阅读 · 0 评论 -
(Java)使用数组实现队列和栈
使用一个size的小技巧,避免了很多麻烦public class Code_01_Array_To_Stack_Queue { // 实现栈 public static class ArrayStack { private Integer[] arr; private Integer size; public ArrayStack(int initSize) { ...原创 2019-03-15 19:59:06 · 780 阅读 · 0 评论 -
【剑指offer】---求1+2+3+...+n(Java)
题目描述求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。CODEpublic class Solution { /** * &&两侧的表达式结果必须为boolean型,所有&&右侧要用一个无关变量a判断是否与result相等,让右侧的表达式返...原创 2019-04-01 19:12:59 · 160 阅读 · 0 评论 -
【剑指offer】---和为S的连续正数序列(Java)
题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的连续正数...原创 2019-04-01 14:21:48 · 93 阅读 · 0 评论 -
【剑指offer】---二叉搜索树与双向链表(Java)
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。CODE/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) ...原创 2019-03-25 20:10:39 · 124 阅读 · 0 评论 -
【剑指offer】---复杂链表的复制(Java)
题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)CODE/*public class RandomListNode { int label; RandomListNode next = null...原创 2019-03-25 16:10:15 · 86 阅读 · 0 评论 -
【剑指offer】---“之”字形打印矩阵(Java)
题目描述【题目】 给定一个矩阵matrix,按照“之”字形的方式打印这个矩阵,例如: 1 2 3 4 5 6 7 8 9 10 11 12“之”字形打印的结果为:1,2,5,9,6,3,4,7,10,11,8,12【要求】 额外空间复杂度为O(1)。CODEpublic static void printMatrixZigZag(int[][] matrix){ int ...原创 2019-03-18 17:44:31 · 310 阅读 · 0 评论 -
在海量数据中找到最大的前K个数(top K问题)
问题分析:数据是海量的,可能达到10亿或者100亿以上,只需要找最大的前100个数。所以将数据一次性排序然后取前100个是不太可取的操作。做了很多无用功,并且内存一次性也加载不了海量数据。解决方案:方案一:堆。一般说在很多数据中取前多少个数据,我们都会想到堆,这里我们使用堆来解决问题。首先取K个数建立一个小根堆(堆顶是堆中最小的元素),建堆的时间复杂度是O(KlgK),这个时间复杂度...原创 2019-03-19 10:55:46 · 2683 阅读 · 0 评论 -
Java不使用其他函数,将字符串按照给定规则进行反转
要求:给予字符串是类似于网址:www.baidu.com 或者 www.sina.com.cn 将给与的字符串按照规则反转 com.baidu.www / cn.com.sina.wwwpackage 基础算法;public class TEST { /** * 给予字符串是类似于网址:www.baidu.com www.si...原创 2019-04-01 15:49:08 · 804 阅读 · 0 评论 -
(华为)汽水瓶(三个空瓶可以换一瓶水)
有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?输入描述:...原创 2019-04-01 21:13:50 · 462 阅读 · 0 评论 -
(华为)输入的随机数进行去重排序
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据,希望大家能正确处理)。InputParam...原创 2019-04-01 22:00:03 · 309 阅读 · 0 评论 -
2. 两数相加
给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -...原创 2019-04-08 22:26:57 · 83 阅读 · 0 评论 -
7. 整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−231, 231− 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。...原创 2019-04-09 10:06:07 · 189 阅读 · 0 评论 -
摩尔投票法找到众数
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2这道题用摩尔投票法,这种方法是因为题目中说众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。所以设置一个计数器,选定第一个值作为...原创 2019-04-23 14:48:26 · 165 阅读 · 0 评论 -
(Java实现)冒泡、插入、选择、堆、快速、归并、桶排序
1.冒泡排序public class Code_00_BubbleSort { public static void bubbleSort(int[] arr) { if (arr == null || arr.length < 2) { return; } for (int e = arr.length - 1; e > 0; e--) { for ...原创 2019-05-11 14:45:16 · 147 阅读 · 0 评论 -
如何实现大正整数相加?
原文链接在不使用BigInteger类的情况下,如何计算两个大正整数的和?程序不可能通过一条指令计算出两个大整数的和,但我们可以把一个大运算拆分成多个小运算, 像小学生一样列竖式进行按位运算。这里还有一个问题,我们都知道long类型的取值范围是: 12 最小值:Long.MIN_VALUE=-9223372036854775808 (-2的63次方)...转载 2019-10-11 15:26:17 · 437 阅读 · 0 评论 -
【剑指offer】---将正方形矩阵旋转90°(Java)
题目描述输入一个正方形矩阵,将正方形矩阵旋转90°,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16,旋转后的组数是:13 9 5 1 14 10 6 2 15 11 7 3 16 12 8 4.CODE// 将正方形数组旋转90°public class RotatoMatrix{ public s...原创 2019-03-18 13:45:55 · 483 阅读 · 0 评论 -
【剑指offer】---顺时针打印矩阵(Java)
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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.CODEimport java.util.ArrayList;public class Solution ...原创 2019-03-18 12:56:57 · 85 阅读 · 0 评论 -
【剑指offer】---包含min函数的栈(Java)
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。CODEimport java.util.Stack;import java.util.Arrays;/*思路:利用一个辅助栈来存放最小值 栈 3,4,2,5,1 辅助栈 3,3,2,2,1每入栈一次,就与辅助栈顶比较大小,如果小就入栈,如果大就...原创 2019-03-19 15:39:58 · 128 阅读 · 0 评论 -
【剑指offer】---变态跳台阶(Java)
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。CODE// 这是一种捷径,必定跳最后一个台阶,前面的每个台阶都有两种可能,就是跳或者不跳,因此一共有2^(target-1)种情况。利用移位进行计算。即 1<<--targetpublic class Solution { public int...原创 2019-03-14 22:18:08 · 154 阅读 · 0 评论 -
【剑指offer】---用队列实现栈,用栈实现队列(Java)
用队列实现栈import java.util.Deque;import java.util.LinkedList;public class TwoQueuesStack { // 使用队列实现栈结构 private Deque<Integer> queue; private Deque<Integer> help; public Tw...原创 2019-03-06 21:14:06 · 113 阅读 · 0 评论 -
【剑指offer】---重建二叉树(Python)
题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。CODE:# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self,...原创 2019-03-06 20:28:56 · 2156 阅读 · 0 评论 -
【剑指offer】---从尾到头打印链表(Python)
题目描述:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。code:# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: # 返回从尾部到头部...原创 2019-03-06 20:23:29 · 290 阅读 · 0 评论 -
【剑指offer】---替换空格(Python)
题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。code:# -*- coding:utf-8 -*-class Solution: # s 源字符串 def replaceSpace(self, s): # write code ...原创 2019-03-06 20:20:23 · 244 阅读 · 0 评论 -
【剑指offer】---二维数组中的查找(Python)
题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数code:# -*- coding:utf-8 -*-class Solution(object): # array 二维列表 def Find(self, targe...原创 2019-03-06 20:17:18 · 140 阅读 · 0 评论 -
【剑指offer】---跳台阶(Java)
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。CODE// 其实就是斐波那契,这里给出递归,也可以写出非递归。public class Solution { public int JumpFloor(int target) { if(target == 1) ...原创 2019-03-13 22:34:31 · 68 阅读 · 0 评论 -
【剑指offer】---斐波那契数列(Java)
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39CODE//递归public class Solution { public int Fibonacci(int n) { if(n == 0) return 0; if(n == 1 ||...原创 2019-03-13 22:23:23 · 67 阅读 · 0 评论 -
【剑指offer】---数值的整数次方(Java)
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。CODE// 偷懒解public class Solution { public double Power(double base, int exponent) { return Math.pow(base,exponent); }}...原创 2019-03-15 07:41:59 · 192 阅读 · 0 评论 -
【剑指offer】---栈的压入、弹出序列(Java)
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)CODEimport java.util.ArrayList;import...原创 2019-03-19 16:16:56 · 85 阅读 · 0 评论 -
【剑指offer】---二叉树的镜像(Java)
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5...原创 2019-03-16 22:02:11 · 193 阅读 · 0 评论 -
【剑指offer】---树的子结构(Java)
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)CODE/*思路:参考剑指offer1、首先设置标志位result = false,因为一旦匹配成功result就设为true,剩下的代码不会执行,如果匹配不成功,默认返回false2、递归思想,如果根节点相同则递归调用DoesTree1HaveTree2(),如果根节点不相同,...原创 2019-03-15 19:34:18 · 110 阅读 · 0 评论 -
【剑指offer】---合并两个排序的链表(Java)
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。CODE/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/// 类似于合并两个数组...原创 2019-03-15 18:58:21 · 79 阅读 · 0 评论 -
【剑指offer】---反转链表(Java)
题目描述输入一个链表,反转链表后,输出新链表的表头。CODE/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public Lis...原创 2019-03-15 17:19:24 · 80 阅读 · 0 评论 -
【剑指offer】---链表中倒数第k个结点(Java)
题目描述输入一个链表,输出该链表中倒数第k个结点。CODE/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/// 先计算链表结点的长度,然后找到倒数第k个结点// 另解(未给出代码)...原创 2019-03-15 16:40:08 · 126 阅读 · 0 评论 -
【剑指offer】---调整数组顺序使奇数位于偶数前面(Java)
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。CODE//利用辅助数组将偶数和奇数分开,以保持稳定性public class Solution { public void reOrderArray(int [] array) { ...原创 2019-03-15 16:16:58 · 66 阅读 · 0 评论