Java
文章平均质量分 55
喜欢薄荷味
这个作者很懒,什么都没留下…
展开
-
反转链表看这里
1、题目描述链接:https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca?tpId=117&tqId=37777&rp=1&ru=%2Factivity%2Foj&qru=%2Fta%2Fjob-code-high%2Fquestion-ranking&tab=answerKey来源:牛客网输入一个链表,反转链表后,输出新链表的表头。2、解题思路(1)递归法确定递原创 2021-03-07 10:08:45 · 345 阅读 · 0 评论 -
设计LRU缓存结构
1、题目描述链接:https://www.nowcoder.com/questionTerminal/e3769a5f49894d49b871c09cadd13a61来源:牛客网设计LRU缓存结构,该结构在构造时确定大小,假设大小为K,并有如下两个功能set(key, value):将记录(key, value)插入该结构 get(key):返回key对应的value值[要求]set和get方法的时间复杂度为O(1) 某个key的set或get操作一旦发生,认为这个key的记录成了最原创 2021-03-07 09:20:13 · 888 阅读 · 0 评论 -
青蛙跳台阶之详细分析
1.题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。2.题目来源(剑指Offer、中等难度)https://www.nowcoder.com/practice/22243d016f6b47f2a6928b4313c85387?tpId=13&&tqId=11162&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/ques原创 2020-07-14 11:04:52 · 369 阅读 · 1 评论 -
话说“贪心“与“动态规划“
1.算法思想1.1贪心思想1.2动态规划思想将待求解的问题分解成若干个子问题,先分别求解每一个子问题,然后2.算法步骤2.1贪心算法步骤(1)建立数学模型描述问题;(2)将求解的问题分为若干个子问题;2.2动态规划算法步骤3.算法特点3.1贪心3.2动态规划...原创 2020-07-14 10:25:34 · 258 阅读 · 0 评论 -
剑指offer-剪绳子(递归、动规、贪心)
1.题目描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],...,k[m]。请问k[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。2.来源https://www.nowcoder.com/practice/57d85990ba5b440ab888fc72b0751bf8?tpId=13&&tqId原创 2020-07-12 22:10:42 · 372 阅读 · 0 评论 -
剑指Offer-构建乘积数组
1.题目描述给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2];)2.来源https://www.nowcoder.com/practice/94a4d381a68b47b7a8bed86f2975原创 2020-07-06 22:12:28 · 104 阅读 · 0 评论 -
剑指Offer-不用加减乘除做加法
1.题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。2.来源https://www.nowcoder.com/practice/59ac416b4b944300b617d4f7f111b215?tpId=13&&tqId=11201&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking3.编吧"递归"递归结束条件:若原创 2020-07-06 21:54:37 · 100 阅读 · 0 评论 -
剑指offer-二叉树镜像
1.题目描述操作给定的二叉树,将其变换为源二叉树的镜像2.来源https://www.nowcoder.com/practice/564f4c26aa584921bc75623e48ca3011?tpId=13&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking3.编吧3.1递归解法这道二叉树镜像问题显然使用递归思想比较简单;递归结束的条件原创 2020-07-06 13:10:33 · 121 阅读 · 0 评论 -
leetcode01-最大子序和
1.题目描述:给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和;2.来源:https://leetcode-cn.com/problems/maximum-subarray/3.编吧:动态规划核心思想:若当前元素之前的和小于0(presum<0),则丢弃当前元素之前的数列;步骤:初始值:maxsum = nums[0] = -2;presum = 0(1)num = -2;presum = max(presum+n原创 2020-05-28 18:01:34 · 243 阅读 · 0 评论 -
Java:序列化和反序列化解析
本篇围绕三个问题展开:1.什么是序列化?什么又是反序列化?2.为什么要有序列化这个东西?3.怎么用呢?问题一:什么是序列化,反序列化?...原创 2020-02-29 11:09:54 · 209 阅读 · 0 评论 -
挑战七大排序算法-07归并排序
归并排序1.原理排序一个数组,先把数组从中间分成前后两个部分,然后对前后两部分分别排序,再将排序好的两部分合并在一起2.实现public void mergeSort(int[] array){ mergeSortInternal(array,0,array.length-1); } private void mergeSortInternal...原创 2020-02-20 17:02:57 · 150 阅读 · 0 评论 -
挑战七大排序算法-06快速排序
快速排序1.原理"分治思想" 从待排序区间选择一个数,作为基准值(pivot); Partition: 遍历整个待排序区间,将比基准值小的(可以包含相等的)放到基准值的左边,将比基准值大的(可以包含相等的)放到基准值的右边; 采用分治思想,对左右两个小区间按照同样的方式处理,直到小区间的长度 == 1,代表已经有序,或者小区间的长度 == 0,代表没有数据。 ...原创 2020-02-20 17:01:38 · 212 阅读 · 0 评论 -
挑战七大排序算法-05冒泡排序
目录冒泡排序1.原理2.实现3.性能分析冒泡排序1.原理在无序区间,通过相邻数的比较,将最大的数冒泡到无序区间的最后,持续这个过程,直到数组整体有序2.实现public void bubbleSort(int[] array){ int n = array.length; //控制比较次数 for (int i ...原创 2020-02-20 16:58:53 · 264 阅读 · 0 评论 -
挑战七大排序算法-04堆排序
目录堆排序1.原理2.实现3.性能分析堆排序1.原理基本原理也是选择排序,只是不再使用遍历的方式查找无序区间的最大数,而是通过堆来选择无序区间的最大数升序:大顶堆;降序:小顶堆堆排序的基本思路:a.将无需序列构建成一个堆,根据升序降序需求选择大顶堆或小顶堆;b.将堆顶元素与末尾元素交换,将最大元素"沉"到数组末端;c.重新调整结构,使其满足堆定义,然...原创 2020-02-20 16:56:50 · 218 阅读 · 0 评论 -
Java:走进类集Collection---List接口篇
Collection1.出现版本JDK1.22.解决问题数组定长问题3.定义Collection接口是Java中保存单个对象的最顶层接口public interface Collection<E> extends Iterable<E> 继承了Interable接口4.继承关系5.常用操作方法 添加元素:boolea...原创 2020-02-17 14:36:59 · 359 阅读 · 0 评论 -
Java多线程中Thread与Runnable详解
在初学多线程部分知识时,Thread类与Runnable类是最经常接触到的两个经典类;可追溯至JDK1.0版本,古老的类传说。剧情开始啦,神秘的鲜橙多国度,卖橙子喽(实现数据共享,产生若干线程进行同一数据的处理操作)主角登场:斯先生(Thread),人称”鲜橙F4“之首; R小姐姐(Runnable),人称“仙女姐姐”;坊间议论道:斯先生那可是鲜橙国...原创 2019-12-30 19:09:22 · 228 阅读 · 0 评论 -
TreeSet有序和无重复值特性的内部原理剖析
此篇用以致敬:那些年,我们一起学过的TreeSet。相信很多学过Java的小孩子们,都知道TreeSet有两大特性:来,大声喊出来一、有序;二、值唯一一、写作背景有木有感觉好高大在最初我们学习集合框架时,Collection接口以及他的宝宝List接口和Set接口一定是我们最先开始接触的。而Set接口是个神奇的接口,为什么呢?因为他有一个淘气的TreeSet。嗯嘛嘛(之所以淘气嘛...原创 2019-12-26 14:07:11 · 543 阅读 · 1 评论 -
挑战七大排序算法-03选择排序
选择排序算法的实现思路类似于插入排序,即已排序区间+未排序区间1.算法定义选择排序是基于选择的排序,即每次需要选择元素进行排序2.算法思想(1)第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置(2)然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。(3)以此类推,直到全部待排序的数据元素的个数为零来看看,选择排序原理...原创 2019-10-20 09:00:41 · 169 阅读 · 0 评论 -
挑战七大排序算法-02希尔排序
算法如其名,肯定是某个优秀的学者Shell提出了这种排序算法;1.定义是简单插入排序的改进版,它与插入排序不同之处在于:希尔排序会优先比较距离较远的元素。希尔排序又称缩小增量排序,是对直接插入排序的优化;2.基本思想该方法实质上是一种分组插入方法比较相隔较远距离(称为增量)的数,使得数移动时能跨过多个元素,则进行一次比较就可能消除多个元素交换;(1)算法先将要排序的一组数...原创 2019-10-19 22:21:24 · 171 阅读 · 0 评论 -
设计模式-模板设计模式
1.定义模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤2.栗子来喽首先,我们举一个熟悉的栗子,咖啡和茶已成为日常饮品,那么我们就用这个举例吧。咖啡冲泡法:(1)煮沸水;(2)用沸水冲泡咖啡;(3)将咖啡倒进杯子;(4)加糖和奶茶冲泡法:(1)煮沸水;(2)用沸水冲泡茶叶;(3)将茶倒...原创 2019-10-14 23:12:25 · 187 阅读 · 0 评论 -
Java抽象类和接口基础整理
一.抽象类1.定义抽象类 =普通类 +抽象方法抽象方法 =声明却未实现的方法(没有方法体)注意:(1)没有方法体的方法不一定都是抽象方法哦,还有可能是本地方法;(2)所有抽象方法要求使用abstract关键字来定义;抽象方法所在的类也必须使用abstract关键字来定义;(3)抽象类中包含抽象方法,而抽象方法不包含方法体,即没有具体实现。因此抽象类不能直接产生实例化对象;...原创 2019-10-14 18:14:54 · 288 阅读 · 0 评论 -
Java类集基础概念-Map篇
Map1.定义一次性保存两个对象(结构:key = value),最大特点:可以通过key找到对应的value值Map接口是Java中保存二元偶对象(键值对)的最顶层接口key值唯一,通过一个key值一定能唯一找到一个value值2.常用方法 public V put(K key,V value):向Map中添加数据 public V get(K key):根据...原创 2019-07-16 17:29:52 · 402 阅读 · 0 评论 -
24点纸牌益智小游戏
一.题目要求经典的纸牌益智游戏:从扑克中随机抽取4张纸牌,通过加减乘除运算(其中,J代表11,Q代表12,K代表13,A代表1);找出所有满足运算结果为24的表达式并由程序输出;二.算法分析要点1:随机生成4个数(这个就很简单了)利用Random类/** * * @param: [num] * @return: void * @Descripti...原创 2019-04-11 21:01:59 · 405 阅读 · 0 评论 -
Java多线程基础整理
多线程复习1.进程和线程1.1定义(1)进程:操作系统中一个程序的执行周期(2)线程:进程中的一个任务。一个进程中可以包含n个线程(main()->主线程)1.2关系每个进程拥有自己的一整套变量,是操作系统中资源分配的最小的单位。 线程依托于进程存在,多个线程共享进程的资源,os中任务调度的基本单位。启动、撤销一个进程的开销要比启动、撤销以一个线程大的...原创 2019-07-20 18:15:54 · 186 阅读 · 0 评论 -
递归之数值转换、2的幂次方表示整数
一.题目分析1.题目一1.1题目概述将非负十进制整数n转换成b进制。(其中b=2~16)输入:11(十进制整数数值)16(目标数制)输出:B1.2简单分析非负十进制数(n)转换成2-16的任意进制数(b),第一次n/b的余数放置在最终结果数的最后一位,第一次的n/b的商作为下一次的n,继续重复上述过程,直至n=0结束循环。1.3流程图2.题目二2.1题目概述任何一个正整数...原创 2019-06-05 19:43:45 · 1063 阅读 · 0 评论 -
组件化开发----CORBA
一.题目分析1.Java版CORBA程序–Hello1.1题目要求:要求编写CORBA程序输出显示”Hello World!+班级+姓名”1.2题目分析过程:(1)定义并编译对象IDL接口文件Hello.idl;(2)编写客户端应用程序HelloClient.java;(3)编写服务器应用程序HelloServer.java;(4)编译运行HelloClient.java和Hello...原创 2019-05-18 23:01:26 · 169 阅读 · 0 评论 -
三大工厂设计模式应用总结
一.题目分析1.题目一:简单工厂模式的应用(1)题目要求:模拟女娲造人;传入参数M,返回一个Man对象,传入参数W,返回一个Woman对象;在此实现基础上,增加一个机器人类,传入参数R,返回一个Robot对象;实现该题目要求,并且观察女娲的变化。(2)题目应用知识点:运用简单工厂模式编程实现2.题目二:工厂方法模式的应用(1)题目要求:模拟不同工厂生产空调;海尔工厂生产海尔空调,美的工厂...原创 2019-05-05 20:10:50 · 2137 阅读 · 0 评论 -
游戏角色生成程序
一.题目简介1.游戏角色应有以下属性:名字、性别、种族、职业、力量、敏捷、体力、智力、智慧、生命值和魔法值。名字:不超过50个字符。性别:可以选择男性和女性。种族:一共可选五个种族,人类、精灵、兽人、矮人和元素。职业:可选六种职业,狂战士、圣骑士、刺客、猎手、祭司和巫师。生命值=体力*20。魔法值=(智力+智慧)*10。2.职业限制允许-1不允许-0职业狂战士圣骑...原创 2019-04-20 11:09:20 · 1346 阅读 · 0 评论 -
Hankson的“逆问题”
一、题目分析1.问题:设某未知正整数x满足:(1)x和a0的最大公约数是a1;(2)x和b0的最小公倍数是b1。Hankson的“逆问题”就是求出满足条件的正整数x。2.分析过程(1)根据两个要求,得出判断x的条件;(2)因为x是b1的约数,所以x <= b1,y = b1/x;y也可能符合条件,可以减少循环的次数,确定符合条件数的范围;(3)每次输入4个数,将这4个数存放到...原创 2019-03-22 22:12:51 · 729 阅读 · 0 评论 -
求n个数的最大公约数及最小公倍数
一、题目分析简单地说:就是求n个数的最大公约数、最小公倍数复杂的说:还是求n个数的最大公约数、最小公倍数哈哈哈,其实在之前的博客中列举了求解两个数的最大公约数的算法,但是请注意这里的数据比较高大上一点,是n;接下来:就是就是就是我的分析思路:与大家共勉(1)运用4种求解最大公约数算法写出求解两个数最大公约数的方法;(2)调用求解两个数的最大公约数方法,对n个数依次进行两两比较;(...原创 2019-03-22 21:50:00 · 2405 阅读 · 0 评论 -
模拟图灵机----XN*2
一、题目分析1.题目要求:输入一个数,通过模拟图灵机程序,输出它的二倍2.图灵机指令:XN*20 0 —> 0 0 R0 1 —> 1 0 R1 0 —> 0 1 R1 1 —> 10 0 R10 0 —> 11 1 R11 0 —> 0 1 STOP3.数据转换处理例如:输入3(1)转换为二进制数:11(2)转化二进制数:011,(...原创 2019-03-22 21:08:16 · 405 阅读 · 0 评论 -
最大公约数四大算法---不同数据规模算法平均运行时间
最大公约数之“四大天王”算法1.辗转相除法2.穷举法3.更相减损法4.Stein算法算法一 辗转相除法算法过程:前提:设两数为a,b设其中a 做被除数,b做除数,temp为余数(1)大数放a中、小数放b中;(2)求a/b的余数;(3)若temp=0则b为最大公约数;(4)如果temp!=0则把b的值给a、temp的值给a;(5)返回第二步; //辗转相除...原创 2019-03-09 19:15:57 · 753 阅读 · 0 评论 -
递归模型--两栗子
一.题目分析1.题目要求(1)有一卖鸭子的老翁,每经过一个村子卖出所赶鸭子的一半多一只,经过7个村子之后,还剩两只鸭子,求出发时鸭子总数、经过每一个村子卖出的鸭子数;(2)角谷定理:输入一个自然数;若为偶数,除以2;若为奇数,乘3加1;经过有限次循环后,始终会得到自然数1,求经过多少次可以得到自然数1;2.题目分析过程(1)找到递归出口;(2)设计递归模型;二.算法构造1.递归模型...原创 2019-05-29 23:48:39 · 1802 阅读 · 0 评论 -
二叉树-对称树
1.题目给定一个二叉树,判断其是否是对称二叉树?2.题目分析(1)返回true;(2)返回false;3.程序设计(1)若二叉树为空,是对称二叉树,返回true;(2)若二叉树根节点的左右孩子均为null,是对称二叉树,返回true;(3)若二叉树根节点的左右孩子只有一个为null,不是对称二叉树,返回false;(4)若二叉树根节点的左右孩子均不为nu...原创 2019-07-01 22:03:17 · 243 阅读 · 0 评论 -
JVM基础概念整理
JVMJVM简介虚拟机:通过软件模拟的具有完整硬件功能的、运行在一个完全隔离环境中的完整的计算机系统。JVM:通过软件模拟Java字节码的指令集,JVM中只保留了PC寄存器内存区域与内存溢出异常1.运行时数据区域线程私有区域程序计数器、Java虚拟机栈、本地方法栈线程私有:生命周期与具体线程相同,随着线程的创建而创建,随着线程销毁,对应空间回收线程共享区域java堆、方法区、...原创 2019-07-20 17:52:30 · 318 阅读 · 0 评论 -
Java类集基础概念大纲
原创 2019-07-16 18:41:27 · 109 阅读 · 0 评论 -
Java类集基础概念-集合输出篇
集合输出1.迭代输出Iterator在JDK1.5之前,Collection接口中就定义了iterator()方法(List、Set中也继承了下来),通过该方法可以取得Iterator接口的实例化对象;在JDK1.5之后,将该方法提升为Iterator接口中的方法;1.1Iterator接口中的抽象方法 判断是否有下一个元素:public boolean hasNext();...原创 2019-07-16 17:30:09 · 131 阅读 · 0 评论 -
Java类集基础概念-Collection接口及其子类
类集复习动态数组1.基于数组实现import java.util.Arrays;/** * @Author:Star * @Date:Created in 8:05 2019/4/16 * @Description:自己实现的动态数组 */public class MyArray<E> { //数组默认容量大小 private final ...原创 2019-07-16 17:24:16 · 231 阅读 · 0 评论 -
二叉树-平衡二叉树
1.题目给定一个二叉树,判断这棵二叉树是否是高度平衡的二叉树平衡二叉树:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过12.题目分析(1)如果一个节点的两个子树的深度之差超过1,则不是平衡二叉树(2)如果一个节点的两个子树的深度之差不超过1,则是平衡二叉树3.程序分析(1)若这棵二叉树为空,返回true;(2)若左孩子和右孩子的深度之差超过1,返回fals...原创 2019-07-01 08:07:29 · 159 阅读 · 0 评论 -
二叉树-找最大(最小)深度
1.题目:给定一棵二叉树,求其最大深度/最小深度最大深度:最大深度是从根节点到最近叶子节点的最长路径上的节点数量。最小深度:最小深度是从根节点到最近叶子节点的最短路径上的节点数量。2.题目分析:最大深度:返回3(1)如果二叉树为空,则返回0;(2)如果二叉树不为空,则递归计算根结点的左孩子、右孩子的深度,取出最大值,然后+1就是该二叉树的最大深度;最小深度:...原创 2019-06-29 22:25:20 · 7585 阅读 · 6 评论