
数据结构&算法&设计模式
常用的数据结构、算法以及涉及模式
bei-zhen
曾就职于世界五百强 前端工程师
展开
-
玩转学校OJ上的字符串、数组题(子串删除、字符串分隔、最大值移动到数组末尾、最接近平均值的整数)
学校OJ今天刷了刷学校OJ上的题,怀念大一大二刷题的时光~OJ个人信息排名今日份题解1842——子串删除编写程序从字符串s中删去所有子字符串t(如果s不包含t,则不删除)。如"this iiss a book,it is a nice book!",删除子串”is”后为"th is a book,it a nice book!"package test0921.demo1;import java.util.Scanner;/** * 删除子串 * @author : Be原创 2020-09-21 17:44:03 · 696 阅读 · 0 评论 -
从字符串中提取出需要的内容
问题输入一段字符串,从中提取1000-3999(包括1000,3999),输入并打印,以空格隔开列如输入:20201515abc2020 100 4000 3999输出:2020 3999思路1.定义一个截取字符串数组,遍历输入的字符串,如果字符属于0-9,用字符串拼接存入数组。2.定义一个指定数组,存入1000-3999的字符串3.比对两个字符串数组代码package test0917.demo1;import java.util.Scanner;/** * 从字符串中提原创 2020-09-17 23:20:24 · 2624 阅读 · 0 评论 -
校招高频笔试题——反转链表
问题输入一个链表,反转链表后,输出新链表的表头。代码public class Solution { public ListNode ReverseList(ListNode head) { //判断链表为空或长度为1的情况 if(head == null || head.next == null) { return head; } ListNode pre = null; //当前节点的前一个节点原创 2020-09-12 00:25:54 · 216 阅读 · 0 评论 -
ArrayList是怎么扩容的呢?
你是否读过ArrayList的源码呢?问题import java.util.ArrayList;import java.util.List;public class Main { public static void main(String[] args) { List<String> list = new ArrayList<>(); for(int i=0;i<100;i++){ list.add("a原创 2020-09-09 00:27:49 · 403 阅读 · 0 评论 -
静态代码块、静态方法、普通代码块、构造方法优先级
代码package test0908.demo1;/** * @author : Bei-Zhen * @date : 2020-09-08 22:56 */public class Demo1 { public static void main(String[] args) { System.out.println("静态方法"); new Demo1(); new Demo1(); } public Demo1()原创 2020-09-09 00:12:24 · 331 阅读 · 0 评论 -
你知道字符串是怎么比较是否相等的吗
字符串”ABCD”和字符串”DCBA”进行比较,如果让比较的结果为真,应选用关系运算符()><=>=解析:两个字符串比较的时候比的是ASCII码,从第一位开始比,如果第一位能比较出谁大谁小则直接返回,若相等,比较下一个字符,因此选B...原创 2020-09-08 23:05:07 · 1339 阅读 · 0 评论 -
LeetCode(九)回文数
回文数判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。class Solution { public boolean isPalindrome(int x) { //负数和个位是0的数字(0除外)肯定不是回文数 if(x<0 || (x % 10 == 0 && x != 0)) { return false; } //假如输入的x为12321,原创 2020-08-31 16:54:45 · 230 阅读 · 0 评论 -
LeetCode(七)整数反转
整数反转给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。class Solution { public int reverse(int x) { int num = 0; while(x != 0) { if((num * 10) / 10 != num) { num = 0; break; } num原创 2020-08-30 23:08:26 · 235 阅读 · 0 评论 -
常用数据结构——栈(先进后出)
一、栈(stack)又称堆栈,它是运算受限的线性表,其限制是仅允许在标的一端进行插入和删除操作,不允许在其他任何位置进行添加、查找、删除等操作。简单的说:采用该结构的集合,对元素的存取有如下的特点先进后出(即,存进去的元素,要在后它后面的元素依次取出后,才能取出该元素)。例如,子弹压进弹夹,先压进去的子弹在下面,后压进去的子弹在上面,当开枪时,先弹出上面的子弹,然后才能弹出下面的子弹。栈的入口、出口的都是栈的顶端位置。二、压栈又称存元素,即把元素存储到栈的顶端位置,栈中已有元素依次原创 2020-08-27 22:19:34 · 9917 阅读 · 0 评论 -
LeetCode(一)两数之和
两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。class Solution { public int[] twoSum(int[] nums, int target) { int[] array = new int[2]; for(int i = 0;i < nums.length - 1;i++)原创 2020-08-27 19:58:42 · 344 阅读 · 0 评论 -
物品交换问题
F这次交换靠的是物品的相对价值相当,最后一个选项等值指的是他们的绝对价值原创 2020-08-25 23:19:27 · 765 阅读 · 0 评论 -
无限水源取水问题
有无限的水源,一个5L无刻度桶和一个7L无刻度桶,则只利用这两个无刻度桶,将不能获得()L水F均可获得。2:7L装满,倒满5L,剩2L3:5L装满,倒7L;再装满5L,倒满7L,剩3L6:5L装满,倒7L;再装满5L,倒满7L,剩3L;倒给7L,5L装满,再倒满7L,剩1L;倒给7L,5升装满,共6L。8:5L装满,倒7L;再装满5L,倒满7L,剩3L;倒给7L,5L装满,共8L11:7L装满,倒满5L,剩2L;倒给5L,7L装满,再倒满5L,剩4L;倒给5L,7L倒满,共11L1、求原创 2020-08-25 23:13:22 · 1030 阅读 · 0 评论 -
智算之道复赛-数字
import java.util.Scanner;public class Demo1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); long aa = sc.nextLong(); long b = sc.nextLong(); String s = aa + ""; //将数字aa转换成字符..原创 2020-08-09 18:11:03 · 2474 阅读 · 0 评论 -
京东2019春招Java面试题
1.在对问题的解空间树进行搜索的方法中,一个结点有多次机会成为活结点的是:()动态规划回溯法分支限界法回溯法和分支限界法B 回朔法:当沿一条路径走到底时,无法继续前进,退回上一结点,查看是否具体其他路径,有则继续查找,若没有则继续往上层结点回退2.在算法设计中,通常要注意理解其本质含义。算法的基本要素有:()算法对硬件的基本要求对数据对象的运算和操作算法的控制结构算法的数据机构BC 一个算法通常由两种基本要素组成:一是(对数据对象的运算和操作),二是(算法的控制结构)3.京东商城原创 2020-08-06 16:49:47 · 4572 阅读 · 0 评论 -
面试题五(Object、包装类、内部类)
重点1.Objectfinalize方法、toString方法、equals方法、getClass方法2.包装类三种类型(原始类型、包装类、字符串)与6种转换自动装箱和自动拆箱3.内部类练习1.(Object 类)在 Object 类中,定义的 finalize 方法在______时调用,toString()方法返回值表示________,equals 方法的作用为_________,getClass 方法作用为__________2.(toString 方法,equals 方法)写出 O原创 2020-07-26 21:29:29 · 2714 阅读 · 0 评论 -
“部分-整体“——组合模式
一、组合模式概述1.定义:组合模式(Composite),将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。2.例子:3.分析:在树形目录结构中,包含文件和文件夹两类不同的元素。在文件夹中可以包含文件,还可以继续包含子文件夹,在文件中不能再包含子文件或者子文件夹。文件夹 —>容器(Container)文件 —>叶子(Leaf)4.理解:一致地对待容器对象和叶子对象。当容器对象的某一个方法被调用时,将遍历整个树形结构,原创 2020-07-26 17:08:33 · 2746 阅读 · 0 评论 -
面试题四(抽象类、接口)
一、选择题1.下面哪几个函数是public void example(){…}的重载函数? ADA、 public void example( int m){…}B、public int example(){…}C、public void example2(){…}D、 public int example ( int m, float f){…}//重载:方法名相同,参数不同4.已知如下类定义:class Base {public Base (){ //… }public Base (原创 2020-07-20 11:52:08 · 4639 阅读 · 0 评论 -
Java练习题一(基础50题)
【程序1】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?//这是一个菲波拉契数列问题import java.util.Scanner;public class Demo1{ public static void main(String[] args){ System.out.println("请输入你想要输入的月份:"); Scanner sc = new Scanner(Sy原创 2020-07-15 12:19:38 · 5177 阅读 · 1 评论 -
面试题一(计算机基础、逻辑)
一、计算机基本概念题1.下列字符中,ASCII码值最小的是(B)A.aB.AC.xD.YA是65,a是972.内存容量的单位是(A)A. 字节B. 字长C. 字D. 二进制位3.Excel2000工作簿默认的工作表个数是(C)A.10B.16C.3D.54.机器语言由(A)构成的。A. 二进制代码B. 十六进制代码C. 字符代码D. 汇编语言代码5.操作系统是一个(A)A. 系统软件B. 应用软件C. 工具软件D. 数据库软件6.十进制数64对应的八进制原创 2020-07-14 15:36:00 · 8661 阅读 · 0 评论 -
面试题二(面向对象)
一、选择题5.若a和b均是整型变量并已正确赋值,正确的switch语句是( )。DA) switch(a+b); { … } B) switch( a+b*3.0 ) { … }C) switch a { … } D) switch ( a%b ) { … }switch里面只能是char, byte, short, int, Character, Byte, Short, Integer, String, or an enum14、已知如下类说明:publ原创 2020-07-14 13:02:08 · 4500 阅读 · 0 评论 -
大话设计模式-代理模式
代理模式Spring AOP就是使用的动态代理概念:在代理模式(Proxy Pattern)中,一个类代表另一个类的功能,创建具有现有对象的对象,以便向外界提供功能接口意图:为其他对象提供一种代理以控制对这个对象的访问主要解决:在直接访问对象时带来的问题何时使用:想在访问一个类时做一些控制如何解决:增加中间层关键点:实现与被代理类组合应用实例:Windows里面的快捷方式。买火车票不一定去火车站买,也可以去代售点买优点:1.职责清晰2.高扩展性3.智能化缺点:1.由于在客服端和真原创 2020-07-13 22:10:51 · 4461 阅读 · 1 评论 -
大话设计模式-工厂模式
工厂模式Spring IOC就是使用了工厂模式,对象的创建交给一个工厂去创建。概念:工厂模式(Factory Pattern)使用一个共同的接口指向新创建的对象。意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类主要解决:解决接口的选择问题何时使用:不同条件创建不同实例时如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品关键点:创建过程在其子类执行应用实例:当你需要一辆汽车,可以直接去工厂提货,而不用管这辆车是怎们做出来的,以及汽车里面的具体实现优点:1.调用者创建对原创 2020-07-13 21:17:03 · 4482 阅读 · 1 评论 -
大话设计模式-单例模式
单例模式(饿汉模式、懒汉模式)**概念:**单例模式(Singleton Pattern)涉及一个单一的类,确保只有单个对象被创建。这个类提供一种访问其唯一对象的方式,可以直接访问,不需要实例化该类的对象。**意图:**保证一个类仅有一个实例,并提供一个访问它的全局访问点**主要解决:**一个全局使用的类频繁地创建和销毁**何时使用:**当你想控制实例数目,节省系统资源的时候**如何解决:**判断系统是否已经有这个实例,如果有则返回,如果没有则创建**关键点:**私有化构造函数**应用实例:*原创 2020-07-13 19:14:57 · 4357 阅读 · 0 评论 -
智算之道初赛第一场-开关
import java.util.Scanner;public class Main2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); //开关数量 String s = sc.next(); //定义一个字符串 char[] a =s.toCharArray(); //将.原创 2020-07-12 22:31:01 · 4632 阅读 · 1 评论 -
智算之道初赛第一场-排队
import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); //总人数 int m = sc.nextInt(); //窗口数 int[] a = new int[m]; //定义一个数组存储每个窗口.原创 2020-07-12 22:18:39 · 4475 阅读 · 0 评论 -
简单排序之插入排序
原理:外层循环从坐标为1的元素开始遍历,内层循环从i-1递减,两两比较大小,向左移动位置优化:相比冒泡排序、选择排序交换次数减少了,移动的速度比交换的速度快得多。package sort;/** * 插入排序 */public class Insertion { public static void main(String[] args) { int[] array = { 1, 3, 5, 2, 4 }; System.out.println原创 2020-07-08 15:50:37 · 4273 阅读 · 0 评论 -
简单排序之选择排序
口诀:两两相比每轮取最小数交换外层n-1内层(i + 1 ~ n)优化:相比冒泡排序,虽然比较次数没变,但是交换次数减少了。package sort;/** * 选择排序 */public class Selection { public static void main(String[] args) { int[] array = { 1, 3, 5, 2, 4 }; System.out.println("未排序前:");原创 2020-07-08 15:06:47 · 4225 阅读 · 0 评论 -
简单排序之冒泡排序
口诀:两两相比大数沉底外层n-1内层n-1-ipackage sort;/** * 冒泡排序 */public class Bubble { public static void main(String[] args) { int[] array = { 1, 3, 5, 2, 4 }; System.out.println("未排序前:"); for (int i = 0; i < array.length; i++)原创 2020-07-08 14:34:45 · 4198 阅读 · 0 评论