自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 面试中常见的排序算法

快速排序插入排序归并排序堆排序冒泡排序希尔排序

2022-08-20 12:53:00 187

原创 何小黑的刷题笔记(更新中)

找出数组中重复的数字在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000leetcode解法:class Solution { public int findRepeatNumber(int[] nums) {

2022-07-10 20:15:16 518 1

原创 MacOS环境下用idea自带的maven如何进行环境配置

MacOS环境下用idea自带的maven如何进行环境配置这是我辛辛苦苦踩了无数坑,拍了不少大脑门才跳出来坑,总结出来的经验啊。。。因为以前用惯了Windows,对MacOS不习惯,好了,废话不多说,切入正题。1.首先需要在idea的configure——preferences——build,exception,deployment——build tools——maven中配置好maven h...

2020-04-29 10:15:27 4781 1

原创 何小黑的2019年秋招面经~

本人211渣硕一枚,经过了为期3个月的秋招,面了大大小小许多的面试,有喜悦有悲伤,一开始没啥经验面试会特别紧张,卡壳结巴。。面多了就好了,因为面经是后来才想到要总结的,所以之前面的一些不太记得了,这些都是近期面的然后做了一个小小的总结,希望能帮到需要帮助的人吧。(目前拿到了中兴、顺丰科技、海康威视、vivo、哈啰出行、阿里饿了么的offer)作业帮一面手撕代码:笔试题第三题当时没做出来,现在有...

2019-10-10 16:32:48 383

原创 二分查找算法

仅当列表是有序时候,二分查找才管用。代码块public class Test{ public static int binary_search(int []arr,int key) { int low=0; int high=arr.length-1; while(low&amp;amp;amp;amp;lt;=high) { int...

2019-09-25 22:03:18 111

原创 简单的生产者消费者例子

import java.util.concurrent.BlockingQueue;import java.util.concurrent.LinkedBlockingQueue;class Producer extends Thread{ BlockingQueue<String> queue; Producer(BlockingQueue<String> qu...

2019-09-25 16:46:45 152

原创 双向链表的基本操作

class ListNode{ ListNode pre; int val; ListNode next; ListNode(int val){ this.val=val; } ListNode(ListNode pre,int val,ListNode next){ this.pre=pre; this.val=val; this.next=next; }}...

2019-09-24 22:10:22 129

原创 二叉树的基本操作

import java.util.LinkedList;import java.util.Queue;class TreeNode{ int val; TreeNode left; TreeNode right; TreeNode(int val){ this.val=val; }}public class Main{ /* * 计算二叉树的节点个数 * */ ...

2019-09-17 22:56:56 110

原创 01二维矩阵中最大全为1的正方形边长(动态规划)

思想:把矩阵中的每个点作为正方形右下角点来处理,则以该点为右下角点的全为1的正方形的最大边长,最多比以它的左方、上方和左上方为右下角的全为1的正方形边长多1。用d[i][j]表示以i,j坐标为右下角的正方形最大边。则有状态转移方程:dp[i][j] = min(dp[i-1][j-1], min(dp[i-1][j], dp[i][j-1])) + 1。public class Main{ p...

2019-09-17 18:57:55 681

原创 编程题:实现一个容器,提供两个方法,add,size。写两个线程,线程 1 添加 10 个对象到容器中,线程 2 实现监控容器中对象的个数,当个数到 5 个时,线程 2 给出提示并结束。

import java.util.ArrayList;import java.util.concurrent.TimeUnit;public class Container { volatile ArrayList<Object> list=new ArrayList<>();//volatile保证可见性 private void add(Object ob...

2019-09-15 16:50:17 439

原创 最大回文子串 (动态规划)

创建一个布尔型的二维数组dp,其中dp[i][j]表示字符串第i到j是否为回文。那么边界值其实很清楚了,字符串长度为1的都为true。状态转换如何设定呢?当字符串i所在的字符=字符串j所在的字符,且它的内部(dp[i+1][j-1])为回文,那么dp[i][j]为true;又或者当字符串i所在的字符=字符串j所在的字符且j-i<3,那么dp[i][j]为true。因为这样的规律,我们要保证判...

2019-09-14 22:28:43 314

原创 二维数据的最短路径和(动态规划)

从二维数据坐标为(0,0)的左上角开始走,直到坐标为(row-1,col-1)的右下角。申请一个和原数组一样大小的dp数组,用于存储每一条路径的最优解。因为走向只能向右走或者是向下走,所以初始化dp数组的第一行和第一列较为容易,第一行dp[0][j]=dp[0][j-1]+arr[0][j],第一列dp[i][0]=dp[i-1][0]+arr[i][0]。接着从坐标为(1,1)的点开始走,这时候...

2019-09-14 16:15:52 1782

原创 最大子矩阵之和问题(动态规划)

一维数组的最大字段之和求解思路:* 如果一维数组中的元素均为正数,则所有元素之和最大。* 如果一维数组中的元素有负数,有0,有正数,则需要进行比较了:如果当前字段和+下一元素<下一元素,则舍弃当前字段和,将下一元素赋值给当前字段和,继续遍历;否则将下一元素与当前段和相加,继续遍历;如果当前字段和>max,则更新max。二维数组的最大子矩阵之和求解思路:降维转换为一维数组的最大字...

2019-09-14 14:49:38 1299

原创 一串数字,从第一个开始走,第一步可以走1到length/2步长,后面每一步步长就是对应的数值,如果能走到最后一个数,就输出走的步数,否则输出-1

题目:给定一个正整数数组,最大为100个成员,从第一个成员开始,走到数组最后一个成员最少的步骤数,第一步必须从第一个元素开始,1<=步长<len/2,第二步开始以所在成员的数字走相应的步数,如果目标不可达返回-1,只输出最少的步骤数量。输入:由正整数组成的数组,以空格分隔,数组长度小于100,请自行解析数据数量。输出:正整数,表示最少的步数,如果不存在输出-1.import ja...

2019-09-08 18:30:54 2672 1

原创 找零问题(动态规划)

假设你要求63的最小硬币数,那么你需要这样计算:10-1=9、10-5=5、10-10=0。假设9、5、0对应的最小硬币数已经被你记录在了备忘录数组。这时候你只需要找出9、5、0中谁对应的最小硬币数最小,然后加1,就是10对应的最小硬币数。因为10比9、5、0都大,最好的情况无非就是在9、5、0中找出最小的一种情况加1,这就是最优解!public class Main { public st...

2019-09-07 16:43:25 710

转载 给定一个字符串,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长? 输出需要删除的字符个数。

import java.io.BufferedInputStream;import java.util.Scanner; public class Main { public static int Check(String s) { StringBuffer sb = new StringBuffer(); sb.append(s); sb.reverse(...

2019-09-05 14:45:44 1295

原创 单链表的基本操作

class ListNode{ int val; ListNode next; ListNode(int val){ this.val=val; }}public class Test { //链表长度 public static int length(ListNode head) { int length=0; ListNode tmp=head; whi...

2019-08-25 20:30:58 144

原创 二分排序算法

根据排序原则,每次我们都是在一个有序序列中插入一个新的数字那么我们可以将这个有序序列进行二分。左游标left为0,右游标right为i-1(i是这个数字在原数组中的位置)middle初始为0。当left<=right时middle是left和right的中值。我们作如下操作。如果array[i]的值比array[middle]值大。那么我们就移动左游标为middle+1否则...

2019-08-21 16:17:44 215

原创 求立体图形的表面积

题目:第一行输入两个数N 和 M (N>=1,M<=1000)接下来N行,每行输入M个整数,第i行的第j个整数表示Aij.输出的是该立体图形的表面积。import java.util.Scanner;public class Test { public static int surface(int[][] arr) { int res=0; for(int i=...

2019-08-15 22:14:56 953

原创 剪绳子(动态规划)

剪绳子给你一根长度为n绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>1)。每段的绳子的长度记为k[0]、k[1]、……、k[m]。问k[0] * k[1]*…*k[m]可能的最大乘积是多少?例如当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到最大的乘积18。有一段长度为n的绳子,剪的第一刀可以在[1,n-1]。第一刀下去后,绳子分成两部分,假设在i处剪...

2019-08-15 14:28:39 246 1

原创 数组中和为0的三个数

import java.util.Arrays;public class Test { public static void threeOf0(int[] arr) { if(arr.length<3||arr==null) return ; Arrays.sort(arr); //固定i,遍历j和k for(int i=0;i<arr.le...

2019-08-15 14:01:38 318

原创 逆时针打印二叉树外围节点(java)

整个二叉树的外边缘分三部分,第一部分是最左边缘,也就是节点1,2,4。第二部分是底边节点,分别是7,6。第三部分是右边缘,是3(因为1和6已经加入列表中了)。左边缘的节点从根节点开始,一直访问左孩子,直到左孩子为空;底边缘节点实际上是二叉树的所以叶子节点;右边缘节点是从根节点开始,一直访问右节点,直到右孩子为空;我们可以通过遍历二叉树,获得三种性质的节点,把他们组合起来就是二叉树的逆时针...

2019-08-10 13:30:07 1033

原创 旋转数组

问题:将一个给定的数组,顺时针旋转90度,并打印出来。public class Test{ public static void rotate(int[][] matrix) { int LR=0; int LC=0; int RR=matrix.length-1; int RC=matrix[0].length-1; while(LR<RR) { rotate...

2019-06-21 19:57:41 102

原创 两个队列实现栈,两个栈实现队列

1、两个队列实现栈思路:有两个队列,一个队列data,一个辅助队列help,我们只把数字加入到data中,在从data弹出元素之前,把最后弹入元素之前的元素先全部压进help栈,然后data再做弹栈操作,就可以使得弹出的是最后一个压入的元素。接着,data和help交换引用,data将除了最后一个元素以外的所有元素全部压进help中,再做弹栈操作。以此类推。import java.util.L...

2019-06-20 21:51:15 218

原创 用数组实现大小固定的队列和栈

用数组实现大小固定的队列和栈1、用数组实现大小固定的栈public class ArrayStack{ private Integer[] arr; public Integer index; public ArrayStack(int initSize) { if(initSize<0) { throw new IllegalArgumentException("T...

2019-06-20 20:51:10 102

原创 桶排序、计数排序、基数排序

1、桶排序、计数排序、基数排序不是基于比较的排序,与被排序的样本的实际数据状况很有关系,所以实际中并不经常使用。2、时间复杂度O(N),额外空间复杂度O(N)3、稳定的排序例子:给你一个数组,数组中的所有数的范围是0~60的,把这个数组排好序。做法:生成一个长度为61的(词频)数组,初始化数组为{0,0,…,0}。然后遍历原数组,遇到一个数的时候,在该数对应词频数组下标的位置++,表示词频...

2019-06-20 19:53:51 248

原创 排序问题的补充

1、归并排序的额外空间复杂度可以变为O(1),但是非常难,不需要掌握。可以搜**“归并排序 内部缓存法”**。如果这么改的话,归并排序会被改的面目全非。。网上有的帖子说"原地归并排序"可以将额外空间的复杂度变为O(1),但同时,其时间复杂度就变为了O(N2)。有病吧。。。何必为了减空间让时间复杂度退变成O(N2)呢。。。2、快速排序可以做到稳定排序,但是非常难,不需要掌握,可以搜**“01 s...

2019-06-20 15:18:13 309

原创 稳定和不稳定排序

稳定的排序算法:直接插入排序、冒泡排序、归并排序不稳定的排序算法:希尔排序、快速排序、简单选择排序、堆排序Q:为什么直接插入排序稳定?A:因为每加入一个新的数都要把它和前面排好序的最后一位对比,比它大则直接放后面;比它小则往前插入;如果遇到相等的,就不往前插了,直接放后面,这样可以确保相同值相对顺序不变。因此是稳定的。Q:为什么冒泡排序稳定?A:每一次的比较都是前一个数与后一个数比较,如...

2019-06-20 14:35:24 5459

原创 综合排序总结

如果给你一个数组,长度很长,综合排序会先进行一个判断,判断数组里面放的数据类型是什么样的,是基础类型(int,double,char,float,short)还是你自定义的类型(student)。如果装的是基础类型的数据,则会用快排(不稳定);原因是:基础类型根本不用区分原始顺序,相同值无差异。如果数据的类型是你自己定义的(student)类型,则会用归并排序(稳定)。原因是:对一个班级,...

2019-06-20 13:53:55 3360

原创 堆排序(很重要!!!!!!)

其实完全二叉树只是人们脑子里抽象出来的一种数据结构,实际情况下,我们是利用数组+一个限定规则来实现二叉树的结构的。限定规则是:下标为i的数组元素是下标为2i+1与下标为2i+2的父节点,且下标为i的数组元素的父节点的数组下标为(i-1)/2。构建大顶堆的思路:给我一个数组arr,这个数组一次把i位置上的数加进来,让它0~i位置上的数形成大顶堆。(大致过程就是:新加入的数字与其父节点的大小进行比...

2019-06-19 14:33:48 254

原创 希尔排序

思想:希尔排序也称为“缩小增量排序”,基本原理如下:先将待排序的数组元素分成多个子序列,使得每个子序列的元素个数相对较少,然后对各个子序列分别进行直接插入排序,待整个排序序列“基本有序后”,最后再对所有元素进行一次直接插入排序。public class Test{ public static void sort(int[] arr){ if(arr == null || arr...

2019-06-12 22:12:52 108

原创 直接插入排序

基本思想:把n个待排序的元素看成是一个有序表和一个无序表,开始的时候,有序表中只有一个元素(待排序数组的首个元素),无序表中有n-1个元素;排序过程就是每次从无序表中取第一个元素,插入有序表中,通过比较大小重排序,使之成为新的有序表,重复n-1次完成整个排序过程。public class Test { public static void insertSort(int[] arr) {...

2019-06-12 16:51:30 180

原创 剑指Offer笔记(java)

1、单例//饿汉模式:线程安全,耗费资源。public class Singleton { private Singleton () {}; private static final Singleton instance=new Singleton();//一上来就直接创建对象实例 public static Singleton getInstance() { return inst...

2019-06-12 14:30:31 503

原创 归并排序

思想:归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案”修补”在一起,即分而治之)。public class Test { private static void merge(int[] arr...

2018-09-13 21:05:22 109

原创 冒泡排序

思想:依次比较相邻的两个数,将小数放在前面,大数放在后面。 即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。 然后比较第2个数和第3个数,将小数放前,大数放后。 如此继续,直至比较最后两个数,将小数放前,大数放后。 重复第一趟步骤,直至全部排序完成。规律:N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少趟,内...

2018-09-12 20:45:18 1039

原创 快速排序算法(挖坑法+左右指针法+快慢指针法)

快速排序(分而治之法)(挖坑法)挖坑法,可以理解成拆东墙补西墙。这里以数组[4,1,7,6,9,2,8,0,3,5]为例子讲解。以数据第一个元素作为枢轴(也可以是是最后一个,因看你喜好)。这里我们先把作为枢轴的4抠出来单独放置,此时数组变成了[口,1,7,6,9,2,8,0,3,5]的形式。 这时我们要从数组尾部开始往前找,找第一个比4小的数字,5比4大,j - -,这时3比4小,把3放在坑...

2018-09-11 19:59:28 2638 3

原创 MySQL学习笔记(更新中)

一、各存储引擎的特性1、MyISAMMyISAM是MySQL默认的存储引擎。MyISAM不支持事务、不支持外键。优势是访问速度快,对事务完整性没有要求。 每个MyISAM在磁盘上存储成3个文件,其文件名和表名都相同,但扩展名分别是:.frm(存储表定义);.MYD(MYDaata,存储数据);.MYI(MYIndex,存储索引)。MyISAM类型的表可能会损坏,原因多种多...

2018-09-10 19:50:33 173

转载 MySQL常用的七种表类型(存储引擎)

其实MySQL提供的表类型截至到今天已经有13种,各有各的好处,但是民间流传的常用的应该是7种,如果再细化出来,基本上就只有两种:InnoDB、MyIASM两种。MySQL作为当前最为流行的免费数据库服务引擎,已经风靡了很长一段时间,不过也许也有人对于MySQL的内部环境不很了解,尤其那些针对并发性处理的机制。MySQL向用户提供了包括DBD、HEAP、ISAM、MERGE、MyIAS、I...

2018-09-10 19:19:44 194

原创 java编程思想学习笔记(更新中)

一、对象1.1用引用操纵对象每种编程语言都有自己操纵内存中元素的方式。你是直接操纵对象还是间接操纵呢?C和C++中,用指针来操纵对象。尽管Java把一切都当成对象,但操纵的标识符实际上是对象的一个“引用”。可以把这样的情景假想成用“遥控器”(引用)来操纵“电视机”(对象)。即使没有电视机,遥控器也可以独立存在。也就是说,你拥有一个引用,并不一定需要有一个对象与它相关联。因此,如果想...

2018-09-05 17:32:19 1791 3

转载 Linux总结

 一、常用操作以及概念快捷键Tab:命令和文件名补全; Ctrl+C:中断正在运行的程序; Ctrl+D:结束键盘输入(End Of File,EOF)求助1. --help指令的基本用法与选项介绍。2. manman 是 manual 的缩写,将指令的具体信息显示出来。当执行man date时,有 DATE(1) 出现,其中的数字代表指令的类型,常用的数字及...

2018-09-04 21:00:58 171

空空如也

空空如也

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

TA关注的人

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