自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Mason97的博客

欢迎访问我的个人博客:http://118.126.90.35

  • 博客(56)
  • 收藏
  • 关注

原创 统计一行字符中有多少个单词(以空格分隔)

如果是空格就将word置为0,当不某个字符不是空格的时候,判断word是不是0,如果是的话,将res自增一 public static int method(String str) { int len = str.length(); int word = 0; int res = 0; for (int i = 0; i < len; i++) { if (str.c...

2020-02-29 19:02:32 296

原创 求数组中数对之差的最大值

数组中的一个数字减去它右边子数组中的一个数字可以得到一个差值,求所有可能的差值中的最大值,例如,数组{1,4,17,3,2,9}中,最大的差值为17-2 =15。动态规划法:我们用变量dif来记录前i+1个数组成的序列的最大数对差。用变量max来记录前i+1个数的最大值。那么对于i+1来说,dif=两者最大值{dif,max-a[i+1]}迭代到最后,dif就储存了最大的数对之差。 p...

2020-02-28 23:06:52 1841

原创 用递归的算法找出数组中的最大数

method方法可以取出一个数组的最大值,那么最大值是a[0]和(从一开始的数组的最大值)中大的那一个。形成一个递归 public static int method(int[] a) { return method(a, 0); } public static int method(int[] a, int begin) { if (begin == (a.length - ...

2020-02-28 22:25:12 1611 1

原创 如何找出数组中唯一的重复元素

目录方法一:方法二:空间换时间法:取反法:类似判断单链表是否有环的问题数组a[N],1 ~ N-1 这N-1 个数存放在a[N]中, 其中某个数重复1 次。写一个函数,找出被重复的数字。方法一:求和,减去1+2+…(N-1)的和,即可求出方法二:将数组中的所有数都异或,然后继续与1、2、3、…(N-1)异或,这样最终的结果就是重复的那个数了。空间换时间法:建立一个相同长度的数组,都...

2020-02-28 20:46:34 1055

原创 如何找出数组中只出现一次的数字

问题描述: 一个整型数组里除了一个数字之外, 其他数字都出现了两次。找出这个只出现1 次的数字。要求时间复杂度是O(n), 空间复杂度是O(1)。用异或满足交换律来做这道题目:System.out.println(4 ^ 7);// 3System.out.println(4 ^ 7 ^ 4);// 7System.out.println(4 ^ 7 ^ 4 ^ 7);// 0当两个数...

2020-02-28 17:23:12 520

原创 如何找出数组中第k个最小的数

方法一:排序法最容易想到的方法就是对数组进行排序, 排序后的数组中第k-1个位置上的数字即为数组的第k个最小的数(原因是数组下标从0 开始计数),这种方法最好的时间复杂度为O(nlogn)。方法二:“剪枝”法找一个标签,比标签小的都放左边,比标签大的都放右边,如果标签最终的位置为k-1,则找到了,如果位置小于k-1,右半部分继续用标签来找,否则左半部分用标签来找,递归下去。 publi...

2020-02-28 16:59:07 2257

原创 把一个数组循环右移k位

例如要把数组序列12345678 右移2 位变为78123456思路:前6位倒序:65432178后两位倒序:65432187整体倒序:78123456代码如下://将一个数组循环右移k位public class Demo04 {//将一个数组倒序 public static void reverce(int[] a, int i, int j) { int begin = ...

2020-02-28 15:44:53 734

原创 找出数组中两两相加等于某值的组合数

两层循环的时间复杂度为n*n先排序,然后两个指针,往中间运动,时间负责度为log n + n = log n public static void method(int[] a, int sum) { Arrays.sort(a); int i = 0; int j = a.length-1; while (i < j) { if ((a[i] + a[j]) &l...

2020-02-28 14:37:29 785

原创 怎么找出数组中出现次数最多的一个数

建立一个HashMap,键存储数据,值存储出现的次数;找出值最大的那个,返回所对应的键。 public static int findMax(int[] a) { if (a.length == 0) { return Integer.MAX_VALUE; } HashMap<Integer, Integer> hashMap = new HashMap<I...

2020-02-28 13:09:44 1627

原创 二叉树【汇总】

目录1 二叉树的基本概念1.1 结点的度1.2 叶结点1.3 分枝结点/终端结点1.4 左孩子、右孩子、双亲1.5 路径、路径长度1.6 祖先、子孙1.7 结点的层数1.8 树的深度1.9 树的度1.10 满二叉树、完全二叉树1.11 大顶堆和小顶堆2 性质1 二叉树的基本概念1.1 结点的度结点所拥有的子树的个数就是结点有几个儿子1.2 叶结点度为0的结...

2020-02-27 00:00:52 169

原创 如何求最大子数列之和

目录1 暴力方法2 第一种方法的改进:重复利用已经计算的子数组和3 第一种方法的改进:重复利用已经计算的子数组和1 暴力方法把所有子列和都求出来public class Demo07 { public static void method(int[] a) { int max = Integer.MIN_VALUE; int begin = -1; int end =...

2020-02-26 21:02:10 742

原创 动态规划

目录如果一个问题满足以下两点,那么它就能用动态规划解决应用动态规划——将动态规划拆分成三个子目标如果一个问题满足以下两点,那么它就能用动态规划解决问题的答案依赖于问题的规模​,也就是问题的所有答案构成了一个数列。大规模问题的答案可以由小规模问题的答案递推得到,也就是​f(n)的值可以由f(i|i<n)中的个别求得。应用动态规划——将动态规划拆分成三个子目标建立状态转移方程缓...

2020-02-26 19:12:36 85

原创 如何找出数组中第二大的数

维护一个max值,维护一个seMax值当a[i]大于max时,将max赋值给seMax,将a[i]赋值给max当a[i]处于两者之间,将a[i]赋值给seMax就行直到遍历到数组的最后程序如下: public static void findSecondMax(int[] a) { int max = a[0]; int seMax = 0; for (int i = 1; ...

2020-02-26 16:57:06 949

原创 判断一个整数的二进制形式中有多少个1【位运算】

右移操作,和1做与运算,这样如果最后一位为1就加一,否则继续右移 public static int method(int a) { int sum = 0; while(a>=1) { sum += a&1; a>>=1; } return sum; }...

2020-02-26 15:56:31 578

原创 判断一个数是否是2的n次幂的方法【位运算】

方法1 用移位方法 public static boolean method(int a) { if (a < 1) return false; int num = 1; while (num <= a) { if (num == a) { return true; } num = num << 1; } return...

2020-02-26 15:45:57 1649

原创 7种排序方法总结(选择排序、插入排序、冒泡排序、归并排序、快速排序、希尔排序、堆排列)

1 选择排序从第二个数开始遍历,找到最小的数,和第一个数进行交换。从第三个数开始遍历,找到最小的数,和第二个数进行交换。…最终得到升序的排列。2 插入排序假设x下标处得数据之前都为有序序列,将x处得数据插入到0~x-1之间得适当位置。3 冒泡排序下图是一轮冒泡排序得过程和结果,得到了这样就得到了最大得一个元素65。然后除了最后一个元素,继续进行冒泡…代码如下: pr...

2020-02-26 13:57:06 1810 1

原创 [LeeCode]面试题09. 用两个栈实现队列

题目地址用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )创建两个栈,用第一个存入元素,实现appendTail功能。对于deleteHead功能,需要找到最先入栈的那个元素,将其弹出。如下图所示:代码实现:class...

2020-02-24 10:35:11 133

原创 计算机组成原理

计算机组成原理第一章 计算机系统概述1.1 计算机系统简介计算机系统:硬件、软件软件:系统软件、应用软件计算机系统的层次结构(由高到低):高级语言、汇编语言、操作系统、机器语言、微指令语言1.2 计算机的基本组成冯·诺依曼计算机的特定:由五大部件组成;指令和数据以同等地位存于存储器,可按地址寻访;指令和数据用二进制表示;指令由操作码和地址码组成;存储程序;以运算器为中心现代...

2020-02-21 21:54:20 19123 2

原创 栈 和 队列 结构的互相实现

【用两个栈来实现一个队列】1号栈用来实现入队的功能,即想入队的话,就让1号栈压栈就行了;那么如何实现出队功能呢,如果2号栈中有元素,让2号栈弹栈即可,若2号栈中没有元素了,现在入队最早的其实在1号栈的最底下,故令1号站都弹出,都压入2号栈中,这样入队最早的元素现在在2号栈的最顶端,再使2号栈弹栈即可。【用两个队列来实现一个栈】让一号队列实现压栈的功能,即压栈就让元素进入1号队列中,如果想弹栈...

2020-02-17 17:47:11 110

原创 Java的跨平台性

Java 程序被编译后不是生成能在硬件平台上可执行的代码, 而是生成了一个“中间码”。不同的硬件平台上会安装有不同的 JVM,由JVM 来负责把“中间码” 翻译成硬件平台能执行的代码。由此可以看出JVM 不具有平台独立性, 而是与硬件平台相关的。...

2020-02-17 17:28:02 134

原创 Java中队列的代码实现

用链表来实现队列这种数据结构public class Node<E> { E data; Node next; public Node(E data) { this.data = data; }}public class MyQueue<E> { private Node<E> head = null; private Node&lt...

2020-02-17 17:11:33 237

原创 Java中栈的代码实现

用数组来实现栈数据结构import java.util.Arrays;//用数组实现栈数据结构public class MyStack<E> { private Object[] stack; private int size;// 数组中存储元素的个数 public MyStack() { stack = new Object[10];// 初始长度为10 }...

2020-02-17 16:21:12 270

原创 有关链表的算法的一些总结

如何判断两个链表是否相交判断是否有相同的尾结点如果两个链表相交,如何返回相交的第一个结点如果相交,求出两个链表的长度,求出长度差值x,让长的那个链表先走x布,然后两个指针同时走,找到第一个结点。...

2020-02-17 10:53:24 125

原创 【LeeCode】206. 反转链表

/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode reverseList...

2020-02-17 09:32:14 118

原创 如何从链表中删除重复数据

这是Node结点类public class Node { int val; Node next; Node(int x) { val = x; }}这是删除重复结点的方法 public void deleteDuplecate(Node head) { Node p = head; while (p != null) { Node q = p; while...

2020-02-16 22:10:02 159

原创 java中非静态成员方法和静态成员方法的互锁问题

​同一个对象在两个线程中分别访问该对象的两个同步实例方法——会产生互斥不同对象在两个线程中分别调用同一个​同步实例方法——不会互斥用类直接在两个线程中调用两个不同的同步静态方法——会产生互斥用一个类的静态对象在两个线程中调用同步静态方法——会产生互斥一个对象在两个线程中分别调用一个同步静态方法和一个同步实例方法——不会产生互斥结论:静态方法的锁和实例方法的锁,默认是不同的对象锁,...

2020-02-16 11:09:10 216

原创 Java中多线程run()方法和start()方法

如果直接调用线程类的run( )方法, 这会被当作一个普通的函数调用, 程序中仍然只有主线程这一个线程也就是说, start 方法( )能够异步地调用run()方法, 但是直接调用run( )方法却是同步的, 因此也就无法达到多线程的目的...

2020-02-15 22:55:44 193

原创 Java中创建新线程常见的两种方法

(1) 继承Thread类,重写其中的run()方法,创建子类实例,用start()方法开启新线程继承Thread类,重写run()方法:public class MyThread extends Thread { @Override public void run() { for (int i = 0; i < 5; i++) { System.out.println("...

2020-02-15 21:54:45 474

原创 Java中对异常的理解

Throwable类是所有错误或异常的超类。Throwable类有两个子类:Error类 和 Exception类。Error类是错误:正确程序中是不该存在的(默认我们编写的是正确程序,就不用管)Exception类是异常:分为以下两类运行时异常:RuntimeException或者是RuntimeException的子类对象。编译异常:Exception的子类中除了运行时异常剩下的都...

2020-02-15 14:12:30 178

原创 Java中的finally语句一定会执行嘛?不一定

1. 如果没进try语句之前程序就出现异常,会直接结束程序,不会执行finall块中语句2. 如果在try语句块里强制退出:System. exit(0);也不会执行finally中的语句。...

2020-02-15 12:13:08 203

原创 Java 中 try-catch-finally 结构中 finally 代码块的执行顺序

1. finally代码块中的程序一定会被执行2. 如果try{}中有return语句,finally在return语句之前执行 (return意味着结束调用)3. 如果finally中有return语句,则fianlly块中的return语句将覆盖别处的return语句扩充知识:如果在try中返回的数据类型是基本数据类型,在finally块中改变return的值对返回值没有任何影响;但是...

2020-02-15 12:03:39 478

原创 Java数组的初始化(数组是对象)

// 在Java 语言中, 数组被创建后会根据数组存放的数据类型初始化成对应的初始值(例如,int类型会初始化为0,对象会初始化为null) // 一维数组的声明方式:type arrayName[]或 type[] arrayName // 初始化第1种方法 int[] a1 = new int[5]; // 初始化第2种方法 int[] a2 = { 1, ...

2020-02-15 11:04:50 352

原创 Java中String、StringBuffer、StringBuilder辨析

Java中String、StringBuffer、StringBuilder辨析String是不可变类,适合需要被共享的场合中使用String可以通过str = new String(“World”)来初始化之外,课通过str = "World"初始化当一个字符串经常需要被修改时,最好使用StringBuffer和StringBuilderStringBuffer和StringBuild...

2020-02-15 10:40:00 105

原创 Java中 ==、equsls 和hashCode辨析

==一句话比较的是变量的值是否相等。对于基本数据类型,就是比较数值;对于引用数据类型的变量,比较的是两个储存的地址值是否相同,即是否指向同一块储存空间equalsObject类中的方法,源码定义中使用“==”运算符,故若没覆盖,就相当于“==”,需要开发人员自己编写equals方法,来判断什么情况可认为“相等”hashCodeObject类中的一个方法,返回对象在内存中地址转换成的一个i...

2020-02-14 22:57:40 174

原创 Java中 ++i 和 i++

i++:是先把i拿出来使用,然后再+1;++i :是先把i+1,然后再拿出来使用;故 a = i++是 先把原来的i赋值给a,i再自加1a = ++i 是 先把i自加1操作,然后将结果赋值给a需要琢磨的一个东西:a = a ++;// a还是没变a = ++ a; // a加了1...

2020-02-14 20:15:01 392

原创 Math类中round、ceil 和 floor方法的功能

Math.round(x) 相当于 (int) Math.floor(x+0.5f)floor 方法返回小于操作数的最大整数值,返回值类型为doubleceil 方法返回大于操作数的最小整数值,返回值类型为double...

2020-02-14 19:14:48 609

原创 Java中位移运算符

Java中位移运算符<< >> >>><<表示左移,不分正负数,低位补0,都在补码上操作>>表示有符号右移,如果该数为正,则高位补0,若为负数,则高位补1>>>表示无符号右移,高位都补零...

2020-02-14 19:10:48 142

原创 Java中 原码 反码 补码

计算机以整数的补码进行运算第一位为符号位,0代表正数,1代表复数正数的原码,反码和补码都相同负数的反码:原码的符号位不变,其他位取反负数的补码:反码加一举个例子:1000 0000【补码】首先看第一位是负数,令其为x,则 x % 256 = 128,则 x = -1281000 0000 是-128的补码。-21【十进制】1110 1011【补码】‭1001 0101‬【原码】...

2020-02-14 17:36:27 618

原创 Java中的自动转型

当参与运算的基本数据类型不同时,会发生自动转型:从低精度向高精度转换,即参与运算的低精度类型会变成高精度的类型。byte < short < char < int < long < float < double注意:byte、short、char在运算的时候会转换成int,结果也是int可以将整型常量直接赋值给byte、short、char等类型变量...

2020-02-14 16:35:08 348

原创 Java中的不可变类:String

不可变类:类的对象一旦被创建出来,在其整个声明周期中,其成员变量就不能被修改了。      所有的基本类型的包装类都是不可变类,例如Integer、Float等,此外String也是不可变类。      方法区中存在一个字符串常量池,当创建一个String对象,假如此字符串已...

2020-02-14 13:32:47 134

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除