自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(109)
  • 收藏
  • 关注

原创 设计模式之创建模式

创建模式创建模式的种类:单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。1.单例模式(1)饿汉式:定义:确保一个类最多只有一个实例,并提供一个全局访问点单例模式可以分为:饿汉式、懒汉式、静态内部类、枚举类public class Hungry{ private final static Hungry HUNGRY=new Hungry(); public static Hungry getInstance(){ return HUNGRY;

2021-08-08 14:00:55 283

原创 java面试之多线程(同步)

1.并行和并发有什么区别1.并行:指两个或者多个事件在同一时刻发生,即同时做不同事的能力。例如垃圾回收时,多条垃圾收集线程并行工作,但此时用户线程任然处于等待状态。2.并发:指两个或多个事件在同一时间间隔内发生,即交替做不同事的能力,多线程是并发的一种形式。例如垃圾回收时,用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户程序在继续运行,而垃圾收集程序运行于另一个CPU上2.守护线程是什么?1.守护线程又称为后台线程,它独立于控制终端并且周期性地执行某种任务或等待处理某些发生

2021-07-28 23:29:31 167

原创 动态规划题目大总结(20217-27)

动态规划三步骤(1)定义数组的含义,不管是一维数组dp[i]还或者是二维数组dp[i][j],先声明代表的含义。(2)找出元素之间的关系式:dp[n],dp[n-1],dp[n-1]之间的关系。(3)找出初始值案例1:跳台阶扩展问题题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶(n为正整数)总共有多少种跳法。分析:青蛙跳一级台阶有一种,跳二级台阶可以先跳一级,也可以直接跳两级,跳三级可以先跳一级,那么剩下两个台阶就有两个台阶的跳的方法...

2021-07-28 09:43:56 139

原创 动态规划篇(2021-7-27)

动态规划1.动态规划的三大步骤定义(1)定义数组元素的含义,假设用一维数组dp[]保存历史数组,设置好dp[i]是代表什么意思。(2)找出数组元素之间的关系式:就是和归纳法相似,计算dp[n],利用dp[n-1],...dp[1],来推出dp[n],找出元素之间的关系。dp[n]=dp[n-1]+dp[n-2],(3)找出初始值。要知道初始值,dp[3]=dp[2]+dp[1]。要能直接获得dp[2]和dp[1]的初始值。2.案例案例1.一只青蛙一次可以跳上1级台阶,也可以跳上2级。求青蛙跳上

2021-07-27 10:18:48 84

原创 树的题(2021-7-25)

1.把二叉树打印成多行 class Solution{ public List<List<Integer>> levelOrder(TreeNode root){ List<List<Integer>> res=new ArrayList<>(); Queue<TreeNode> q=new LinkedList<>(); if(root!=null) q.add(root); w

2021-07-25 21:35:16 52

原创 树的题(2021-7-25)

1.二叉树的深度import java.util.Queue;import java.util.LinkedList;public class Solution{ public int TreeDepth(TreeNode root){ if(root == null) return 0; Queue<TreeNode> queue=new LinkedList(); queue.add(root); int high=0;

2021-07-25 10:30:00 71

原创 动态规划和树的题(2021-7-21)

1.二叉树中和为某一值得路径import java.util.ArrayList;public class Solution{ private ArrayList<ArrayList<Integer>> listAll=new ArrayList<>(); private ArrayList<Integer> list=new ArrayList<>(); public ArrayList<ArrayL

2021-07-21 11:57:15 74

原创 剩下的题(2021-7-20)

1.旋转数组的最小数字import java.util.ArrayList;public class Solution{ public int minNumberInRotateArray(int [] array){ if(array==null||array.length==0){return -1;} int left=0; int right=array.length-1; while(left<right){ int mid=(left

2021-07-20 11:25:38 60

原创 数学的题(2021-7-19)

1.不用加减乘除算加法public class Solution{ public int Add(int num1,int num2){ //利用位运算 while(num2!=0){ int temp=num1^num2; num2=(num1&num2)<<1; num1=temp; } return num1; }}思路:1.计算a和b的无进位,和进位

2021-07-19 19:32:35 69

原创 数学的题(2021-7-15)

1.丑数public class Solution{ public int GetUglyNumber_Solution(int index){ if(index<=0) return 0; int p2=0,p3=0,p5=0;//初始化三个指向三个潜在成为最小丑数的位置 int[] result=new int[index]; result[0]=1; for(int i=1;i<index;i++){ result[

2021-07-15 12:10:12 105

原创 数学类的题(2021-7-13)

1.二进制中1的个数public class Solution{ public int NumberOf1(int n){ int count=0; while(n!=0){ count++; n=(n-1)&n; } return count; }}思路:直接将整数看成二进制,然后采用移位的方法2.数值的整数次方public class Solution{ public double Power(doubl

2021-07-13 22:30:47 88

原创 递归的题(2021-7-11)

1.跳台阶public class Solution{ public int JumpFloor(int target){ int a=1,b=1; for(int i=1;i<target;i++){ a=a+b; b=a-b; } return a; }}思路:斐波那契思想1.从第n个台阶进行下台阶,下一步有2种可能,一种走到第n-1个台阶,一种是走到n-2个台阶。所以法f[n]=f[n-1]+f[n-2];1.初始条件f[0

2021-07-11 22:00:05 58

原创 排序和回溯题(2021-7-11)

1.最小的K个数class Solution{ //快排 public int[] getLeastNumbers(int[] arr,int k){ if(k==0||arr.length==0) return new int[0]; return qsk(arr,0,arr.length-1,k-1); } private int[] qsk(int[] nums,int l,int r,int k){ int j=qui

2021-07-11 19:43:46 65

原创 队和栈的题(2021-7-11)

1.二叉搜索树的后序遍历序列import java.util.Arrays;public class Solution{ public boolean VerifySquenceOfBST(int [] sequence){ if(sequence==null||sequence.length==0) return false; return helpVerify(sequence,0,sequence.length-1);//(数组名称,起始位置为0,终止位置为sequence.l

2021-07-11 16:53:33 66

原创 队和栈的题(2021-7-9)

1.用两个栈实现队列import java.util.Stack;public class Solution{ Stack<Integer> stack1=new Stack<Integer>(); Stack<Integer> stack2=new Stack<Integer>(); public void push(int node){ stack1.push(node); } public int pop() throws

2021-07-09 17:14:48 71

原创 数组题(2021-7-7)

1.和为S的两个数import java.util.ArrayList;public class Solution{ public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum){ ArrayList<Integer> res=new ArrayList<>(); int i=0,j=array.length-1; int ij=Integer.MAX_VALU

2021-07-08 15:39:52 73

原创 数组题(2021-7-3)

1.把数组排成最小的数import java.util.ArrayList;public class Solution{ public String PrintMinNumber(int [] numbers){ if(numbers==null||numbers.length==0) return ""; //快排 for(int i=0;i<numbers.length;i++){ for(int j=i+1;j<numbers.length;j++){

2021-07-03 17:17:03 69

原创 数组题(2021-7-2)

1.调整数组顺序使奇数位于偶数前import java.util.*;public class Solution{ public int[] reOrderArray(int[] array){ if(array.length==0) return array; Queue<Integer> jishu=new LinkedList<>(); Queue<Integer> oushu=new LinkedList<>

2021-07-02 16:12:31 70

原创 数组题(2021-7-1)

1.二维数组中的查找public class Solution{ public boolean Find(int target,int [][] array){ int row=0; int col=array[0].length-1; while(row<=array.length-1&&col>=0){ if(target==array[row][col]){ return true; }else if(targe

2021-07-01 20:05:29 52

原创 字符串题(2021-6-30)

1.链表中环的入口结点public class Solution{ public ListNode EntryNodeOfLoop(ListNode pHead){ if(pHead==null||pHead.next==null) return null; ListNode slow=pHead;//定义一个慢指针 ListNode fast=pHead;//定义一个快指针 while(fast!=null&&fast.next!=null){

2021-06-30 21:30:43 68

原创 链表题(2021-6-29)

1.合并两个排序的链表public class Solution{ public ListNode Merge(ListNode list1,ListNode list2){ ListNode preHead=new ListNode(-1);//创建一个头节点,归一化操作,否则第一个加入的节点还要单独做 ListNode pre=preHead;//两个指针一个指向头节点,一个指向尾节点 while(list1!=null&&list2!=null){//当list1和l

2021-06-29 15:17:29 72

原创 链表题(2021-6-28)

1.从尾到头打印链表import java.util.ArrayList;public class Solution{ public ArrayList<Integer> printListFormTailToHead(ListNode listNode){ ArrayList<Integer> list=new ArrayList<Integer>();//创建一个list集合 if(listNode!=null){//listNode链表节点不为空

2021-06-28 20:28:39 50

原创 字符串题(2021-6-24)

1.第一个只出现一次字符的位置import java.util.*;public class Solution{ public int FirstNotRepeatingChar(String str){ if(str==null||str.length()==0) return -1; char[] c=str.toCharArray();//将字符串数组转换成字符串 LinkedHashMap<Character,Integer> hash=new

2021-06-24 22:43:02 144

原创 字符串题(2021-6-22)

1.把字符串转换成整数public class Solution{ public int StrToInt(String str){ if(str==null||str.length()==0) return 0; int mark=0; int number=0;//用int来存储,以防止越界 if(str.charAt(0)=='-') mark=1;//charAt:返回指定索引处(0)的字符为-,则mark=1 for(int i=mark

2021-06-22 15:54:34 71

原创 字符串题(2021-6-21)

1.翻转单词序列public class Solution{ public String ReverseSentence(String str){ if(str==null||str.length()==0) return str; char[] arr=str.toCharArray();//转换成字符串 reverse(arr,0,arr.length-1);//先全部翻转一次 int start=0; int end=0; while(

2021-06-22 00:06:18 106

原创 计算机网络面试总结

1. 计算机网络体系结构A.OSI七层协议:从上到下依次为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层B.每层对应的协议及作用如下 协议:物理层:RJ45、CLOCK、IEEE802.3(中继器,集线器) 数据链路层:PPP、FR、HDLC、VLAN、MAC (网桥,交换机) 网络层:IP、ICMP、ARP、RARP、OSPF、IS-IS、IPX、BGP、RIP、IGRP、 (路由器) 传输层:TCP、UDP、SPX 会话层:NFS、S

2021-05-19 20:08:47 209 6

原创 LeetCode--删除排序数组中的重复项(35)

删除排序数组中的重复项题目:给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1: 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。思路:(1)假设前提条件:数组是有序的,那么重复元素一定

2020-12-04 09:35:11 82

原创 LeetCode--合并两个有序链表(34)

合并两个有序链表题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路:1.先判断l1和l2是否为空链表。 2.如果l1和l2一开始为空链表,那么没有任何操作需要合并,所以只需要返回非空链表。 3.判断l1和l2哪一个链表的头节点的值更小,然后递归的决定下一个添加到结果里的节点。 4.如果两个链表有一个

2020-11-27 21:10:08 112

原创 LeetCode--两个数组的交集(33)

两个数组的交集题目:给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]思路:计算两个数组的交集,先是遍历数组nums1,对于其中的每个元素,遍历数组nums2,判断该元素是否存在nums2中,如果存在,将该元素添加到返回值。1.首先使用两个集合分别存储两个数组中的元素。2.然后遍历两个集合中的元素,并比较两个集合的长度。3.然后遍历较小的集合,判断其中的每个元素是否在另一个集合中。4.创建一个新的集合,

2020-11-26 21:19:18 94

原创 3.运算符(20201126)

运算符1.逻辑运算符的基本用法 A:逻辑运算符有哪些 &(并且),|(或者),!(非),^(异或),&&(短路与),||(短路或) 注意事项: a:逻辑运算符一般用于连接boolean类型的表达式或者值 在Java中表示一个数大于3并且小于6,不可以写成3<x<6,应该写成x>3&x<6. b.表达式:就是用运算符把常量或者变量连接起来的符合java语法的式子

2020-11-26 20:21:27 81

原创 2.常量、变量及运算符(20201125)

常量1.常量 1.1 常量的概述和使用 A:什么是常量 就是在程序的执行过程中其值不发生改变的量 B:Java中常量的分类 (1):字面值常量 (2):自定义常量 C:字面值常量的分类 (1):字符串常量 用双引号括起来的内容 (2):整数常量 所有整数 (3):小数常量 所有小数 (4):字符常量 用单

2020-11-26 01:35:37 125

原创 LeetCode--爬楼梯(32)

爬楼梯题目:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶思路:1.爬到第x级台阶的方案数是爬到第x-1级台阶的方案数和爬到第x-2级台阶的方案数的和。(每次只能爬1级或2级)复杂度分析时间复杂度:循环执行 nn 次,每次花费常数的时间代价,故渐进时间复杂度

2020-11-25 19:33:07 89

原创 1.计算机基础知识(20201125)

计算机基础知识1.人机交互A:人机交互的两种方式 a.图形化界面方式:这种方式简单直观,使用着易于接受,容易上手操作 b.命令行方式:需要有一个控制台,输入特定指令,让计算机完成一些操作2.Java语言特点 简单性 解释性 面向对象 高能性 分布式处理 多线程 健壮性 多态 结构中立 安全性3.Java语言跨平台原理 A:什么是跨平台(平台指定的是操作系统) 通过Java语言编写的应用程序在不同的系统平

2020-11-25 01:00:56 75

原创 LeetCode--x的平方根(31)

x的平方根题目:实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1:输入: 4输出: 2思路:1.通过其他数学函数代替平方根函数得到精确结果,取整数部分作为答案;2.通过数学方法得到近似结果,直接作为答案复杂度分析时间复杂度:O(1)空间复杂度:O(1)...

2020-11-24 21:26:41 63

原创 LeetCode--二叉树搜索树中第K小的元素(30)

二叉树搜索树中第K小的元素题目:给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。 说明: 你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。示例 1: 输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2输出: 1思路:1.在栈的帮助先,可以迭代,这样可以加快速度,这样不用遍历整个树 1.创建一个栈 LinkedList<TreeN

2020-11-24 20:22:13 123

原创 LeetCode--搜索二维矩阵2(29)

搜索二维矩阵题目:编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30]]思路:1.初始化一个指向矩阵左下角

2020-11-23 20:33:53 84

原创 LeetCode--搜索插入位置(28)

搜索插入位置题目:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2思路:在排序数组中寻找是否存在一个目标值,那么就用二分法。在O(logn)的时间内找到是否存在目标值。本题额外条件,如果不存在数组中的时候,需要返回按顺序插入的位置,还是可以用二分法。只需要考虑插入位置。成立的条件为:nums[pos-1]<r=target≤

2020-11-20 19:25:31 95

原创 LeetCode--多数元素(27)

多数元素题目:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1: 输入: [3,2,3] 输出: 3思路:如果将数组nums中的所有元素按照单调递增或单调递减的顺序排序,那么下标为[n/2]的元素(下标从0开始)一定是众数。1.先将nums数组排序。2.找到下标为[n/2]的数。复杂度分析时间复杂度:O(nlogn)。将数组排序的时间

2020-11-20 14:53:41 73

原创 LeetCode--最大子序和(26)

最大子序和题目:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。思路:分治算法求解,不是最优解1.动态规划的是首先对数组进行遍历,当前最大连续子序列和为sum,结果为ans2.如果sum>0,则说明sum对结果有增益效果,则sum保留并加上当前遍历数字3.如果sum<0,

2020-11-20 10:56:39 77

原创 LeetCode--根据身高重建队列(25)

根据身高重建队列题目:假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对 (h, k) 表示,其中 h 是这个人的身高,k 是应该排在这个人前面且身高大于或等于 h 的人数。 例如:[5,2] 表示前面应该有 2 个身高大于等于 5 的人,而 [5,0] 表示前面不应该存在身高大于等于 5 的人。 编写一个算法,根据每个人的身高 h 重建这个队列,使之满足每个整数对 (h, k) 中对人数 k 的要求。思路:1.将每个人按照身高从大到小进行排序,处理身高相同的人使用的方法类似,即:按

2020-11-18 22:29:57 97

空空如也

空空如也

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

TA关注的人

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