自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode15--三数之和,进来学细节

题目表述:给定一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]AC...

2019-09-22 22:04:44 241

原创 一道好玩的多线程面试题

请问下面的代码输出什么:public class TestThread { static class A extends Thread { A (Runnable r) { super(r); } @Override public void run() { super.ru...

2019-09-15 10:49:22 253

原创 华为面试题,多线程打印121121121.....

题目要求:有一个函数print(int i)被两个线程调用,一个线程调用它打印1,另外一个线程调用它打印2,要求最终打印出121121121.....的效果:参考代码: /** * print(i)被两个线程调用,一个打印1,一个打印2,要求最终打印出121121121....的效果 */ private static void print(int i)...

2019-08-30 17:01:36 386

原创 请不要再说链表的插入删除的速度比数组快了

在上数据结构的课程时,相信老师在课堂上都是说链表的增加删除操作是O(1)的,这句话对也不对。这句话对的前提是我需要知道我们插入或者删除的前驱或者后继结点才行,不然这句话是不成立。相反我们还需要去遍历删除元素的前驱或者后继结点,这个过程是O(n)的,并其链表的遍历比数组慢!!!下面看我们的测试代码: public static void main(String[] args) { ...

2019-08-26 20:09:52 1014

原创 从一次爬虫案例谈谈异常处理与多线程的重要性

最近因为项目需要,需要爬取一些头像图片,爬取的网址是https://www.woyaogexing.com/touxiang/,这次爬虫没有使用任何框架,使用Python的requests库请求网址,使用pyquery解析网页。网页的结构比较简单,这里就不详细说了,刚开始时,由于下载速度过快,下载一会就出现异常而中断了,后来我就每下载一张后就暂停几秒。晚上回去前,把爬虫脚本一直运行着,以为第二天早...

2019-08-18 16:14:02 317

原创 华为笔试题---仿LISP算法

/** * 仿LISP字符串运算 * LISP语言唯一的语法就是括号要配对。 * 形如 (OP P1 P2 …),括号内元素由单个空格分割。 * 其中第一个元素OP为操作符,后续元素均为其参数,参数个数取决于操作符类型 * 注意:参数 P1, P2 也有可能是另外一个嵌套的 (OP P1 P2 …) * 当前OP类型为add/sub/mul/div(全小写),分别代表整数的加...

2019-08-12 09:46:02 2624 1

原创 我通过刷LeetCode给Apache/Dubbo提了一个优化措施

LeetCode题目连接:LeetCode--528. Random Pick with Weight原题目如下:Given an arraywof positive integers, wherew[i]describes the weight of indexi,write a functionpickIndexwhich randomlypicks an index...

2019-08-06 12:10:44 170

原创 几道关于随机数的问题

1、给定一个等概率产生1-5的随机数rand1To5,要求不使用额外的随机函数实现等概率的产生1-7的随机函数rand1To7。实现过程如下:rand1To5()等概率产生1,2,3,4,5 rand1To5()-1 等概率产生 0,1,2,3,4 (rand1To5()-1) * 5 等概率产生 0,5,10,15,20 (rand1To5()-1) * 5 +rand1To5...

2019-08-05 20:06:58 525

原创 记一次动态规划优化的过程

优化题目:LeetCode--53. Maximum Subarray本题也是我们熟知的最大子序列和,题目如下:Given an integer arraynums, find the contiguous subarray(containing at least one number) which has the largest sum and return its sum.Ex...

2019-08-04 18:43:59 338

原创 ThreadLocal 源码深入分析

ThreadLocal--见名知意,线程本地变量,每个线程都有一个独立的副本,我们来看看JDK文档里面是怎么描述这个类的:This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one ...

2019-08-03 23:28:46 194

原创 64位整数乘法

求a乘b对p取模的值。输入格式第一行输入整数a,第二行输入整数b,第三行输入整数p。输出格式输出一个整数,表示a*b mod p的值。数据范围1≤a,b,p≤10^18输入样例:345输出样例:2分析:我们知道两个long相乘的话,可能会越界,所以这里显然是不能直接的相乘的。由于任意一个整数都可以表示成2机制,那么我们按照二进制将...

2019-08-03 19:22:42 566

原创 a^b

求a的b次方对p取模的值。输入格式三个整数a,b,p,在同一行用空格隔开。输出格式输出一个整数,表示a^b mod p的值。数据范围0≤a,b,p≤109输入样例:3 2 7输出样例:2使用循环对a乘以b次当然是可以的,但是还存在着更优的解法,比如 a ^ 8 = a ^ 4 * a ^ 4,而不用这样计算 a ^ 8 = a ^ ...

2019-08-03 19:16:06 149

转载 算法--从记录中统计在线人数

求一个论坛的在线人数,假设有一个论坛,其注册ID有两亿个,每个ID从登陆到退出会向一个日志文件中记下登陆时间和退出时间,要求写一个算法统计一天中论坛的用户在线分布,取样粒度为秒。一天总共有 3600*24 = 86400秒。定义一个长度为86400的整数数组int delta[86400],每个整数对应这一秒的人数变化值,可能为正也可能为负。开始时将数组元素都初始化为0。然后依次读入...

2019-08-02 20:33:17 956

原创 单向链表的三种排序算法---快速排序,归并排序,插入排序

给链表排序是面试中常考的一道题,今天总结一些经常链表排序的三种常用算法。分别是:快速排序、归并排序和插入排序。快速排序 数组的快速排序相必大家都烂熟于心了,很简单,就是选定一个pivot,然后将大于等于pivot的排在pivot的右边,下雨pivot的排在pivot的左边。这样pivot的最终顺序就确定好了,接下来只需要对pivot的左边和右边执行相同的过程即可。代码如下:...

2019-08-01 22:41:05 1922

原创 整数数组按频率高低排序---总结

给定一个数组,按照频率进行排序,频率高的排在前面,频率低的排在后面,频率相同的安装出现的向后顺序排序:输入: 【1,2,4,3,3,3,4,2,5,5,5,5,6,6,6,7,10,8,9】输出:【5,5,5,5,3,3,3,6,6,6,2,2,4,4,1,7,10,8,9】实现代码:public static List<Integer> salaryfrequen...

2019-08-01 22:37:47 1106

原创 Java一行代码实现原生数组与包装数组之间的转换

不知道你是否被这样的问题困扰过,就是包装数组与原生数组之间的转换,比如说int[]与Integer[]之间的转换。当然写一个for循环是可以完美解决这个问题的,但是有时候总是感觉得不偿失。比如说:我有一个List里面收集了一些整数值,但是最终我想返回一个int[],怎么办呢?这里我想是有两种办法的: 1、new 一个int[],然后写一个for循环依次赋值即可。 2、使用t...

2019-08-01 21:57:47 1218

原创 Base16算法

Base16算法的Java实现版本。Base16算法就是将一串字节流转换成0-9a-f的序列。我们知道一个字节为8位,正好可以转换成两个16进制数,(高四位和低四位)。比如字节:11010011 -> 1101 0011 -> d 3public class Base16 { private static final char[] upper = "01234567...

2019-07-30 14:30:09 1017

原创 阿里云服务器暴露主机端口号

阿里云服务器暴露端口号的 坑!!!!!!之前使用学生价买了阿里云服务器,最近做项目,想部署一些服务到上面去,配置好了防火墙,暴露了端口,当是本地还是无法访问,郁闷了好长一段时间(小白!!)。后来才发现还需要在控制台上设置!!!在控制台上,找到安全->防火墙:下面是默认暴露的端口:如果自己需要暴露某些端口,点击添加...

2019-07-30 13:13:59 2612

原创 python3.7 在windows 系统下安装mysqldb

在https://www.lfd.uci.edu/~gohlke/pythonlibs/上找到mysqlclient,点击进去下载对应系统的版本:这里有个小插曲,我们系统是win7 64位的,刚开始下载时选择64位的报错了,后来下载32位的安装上了。最后在下载目录使用pip根据安装即可:pip install mysqlclient-1.4.2-cp37-cp37m-wi...

2019-07-23 20:33:12 827 1

原创 最大的火车站台维修点

题目来源:度小满2019年秋招笔试真题题目:在Z省,有若干个个城市坐落在一条直线上,从左到右依次标号1,2,3,…,其中每个城市有一个火车站点,现今已经开放了n条火车路线,第i条火车路线是从第Yi个城市到第Xi个城市,因为Z省地势奇特,标号小的城市地势较低,所以火车是从高往低开的,再通过神秘力量传送回高地,即Yi一定大于Xi,它在沿途的所有城市都会停靠(显然不包括起点Yi,但是包括终点Xi...

2019-07-16 13:23:57 516

原创 double-checked-locking(双重检查锁定)设计模式

在github上的java-design-patterns的项目中提到了double-checked-locking这种设计模式,解释如下: Double Checked Locking is a concurrency design pattern used to reduce the overhead of acquiring a lock by first testing the ...

2019-07-11 10:32:46 1048

原创 二分查找进阶

我们知道在一个有序数组里面查找一个元素使用二分操作能达到Olg(n)的复杂度,但是传统的二分查找找到的元素是无法确认找的的是哪一个元素的。这么说可能比较抽象,举个例子,如果待查找的元素在有序数组中只出现了一次,那么查找到的索引肯定就是该元素出现的索引位置,如果该元素出现了多次,那么传统的二分查找是无法确定返回的索引值是具体哪一个的。传统的二分查找: public int searc...

2019-07-09 20:29:59 490

原创 LeetCode18---fourSum(可扩展自ksum)

LeetCode--184sumGiven an arraynumsofnintegers and an integertarget, are there elementsa,b,c, anddinnumssuch thata+b+c+d=target? Find all unique quadruplets in the array which gi...

2019-07-09 14:31:39 160

原创 LeetCode--合并有序链表总结

合并两个有序的单链表为一个链表,原题目链接:LeetCode--21. Merge Two Sorted Lists原题目:Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two...

2019-06-09 12:59:45 441

原创 Pow2

public final class Pow2 { public static final int MAX_POW2 = 1 << 30; public Pow2() { } public static int roundToPowerOfTwo(int value) { if (value > MAX_POW2 ) { ...

2019-06-04 14:23:55 479 1

原创 单向链表的插入排序

题目:使用插入排序给单向链表排序。题目来源:LeetCode--147. Insertion Sort List原题目:Sort a linked list using insertion sort.A graphical example of insertion sort. The partial sorted list (black) initially contains on...

2019-05-27 20:49:02 725

原创 寻找数组中下一个更大的元素

首先定义数组中下一个更大元素:数组中某个元素下一个更大元素指的是在这个数字右边第一个大于该元素的值。例如【5,4,11,3,10】:5的下一个最大元素是11;4的下一个最大元素是11;11没有下一个最大元素;3的下一个最大元素是10;10没有下一个最大元素;题目:给你一个整型数组,返回数组中每个元素的下一个更大元素数组,如果某个元素不存在最大数组,返回-1(假设给定的数组中不存在-1)。输...

2019-05-27 16:11:53 1363

原创 自己写的一些Util类

刷LeetCode题目时,有时候可能会在本地机器上测试代码有没有bug,比如在刷链表的题目时,我们需要自己生成一个链表,或者打印链表。今天把这些功能抽取了出来,写了一个ListUtil类,方便在本地测试。主要的方法是根据数组生成一个链表,或者生成随机链表(大小,链表元素的上下值都可以指定)打印一个链表。下面看代码:import java.security.SecureRandom;p...

2019-05-26 16:37:38 621

原创 反转单向链表的两种写法(迭代、递归)

题目:反转单向链表,单向链表的定义为:public class ListNode { int val; ListNode next; public ListNode (int val) {this.val = val;}}原题目:LeetCode--206. Reverse Linked ListReverse a singly linked list....

2019-05-26 16:30:14 282

原创 关于求平方的两道题

题目:实现pow(x, n)函数题目来源:LeetCode--50. Pow(x, n)原题目:Implementpow(x,n), which calculatesxraised to the powern(xn).Example 1:Input: 2.00000, 10Output: 1024.00000Example 2:Input: 2.10...

2019-05-25 14:31:13 310

原创 数组中,一个(或者几个)数出现了k次,其余的数都出现了n次

这一系列的题目是源自于LeetCode--136. Single Number以及LeetCode--137. Single Number II和LeetCode--260. Single Number III我们先做题,然后在进行扩展。Single Number:原题目:Given anon-emptyarray of integers, every element appear...

2019-05-24 21:49:06 1095 1

原创 最大值减去最小值小于或等于num的连续子数组数量

题目:给定数组arr和整数num,返有多少个连续子数组满足如下情况: max(arr[i...j]) - min(arr[i...j]) <= num max(arr[i...j]) 表示连续子数组arr[i...j]中的最大值,min(arr[i...j])表示连续子数组arr[i...j]中的最小值。题目来源:程序员...

2019-05-24 19:17:47 493

原创 寻找全排列的下一个数

题目:给出一个正整数数组,找出该数组按照字典序的下一个排列,如果不存在(比如:987654321)就返回该数组最小的全排列(此时返回:123456789)。原题目地址:LeetCode--31. Next Permutation原题目描述:Implementnext permutation, which rearranges numbers into the lexicographi...

2019-05-24 14:15:14 467

原创 反转数组

JDK里面并没有提供反转一个数组的办法,倒是提供了反转一个List的方法:Collections.reverse()。但是,有时候我们需要反转一个数组时可以使用其他已经实现了相关方法的包,比如:org.apache.commons,下面给出该包下反转一个数组的源代码: public static void reverse(int[] arrs) { if (arrs ...

2019-05-23 14:35:27 146

原创 滑动窗口最大值数组

题目:有一个整形数组nums和一个大小为k的窗口,窗口从数组的最左边每次滑动一格直到最右边,返回每次窗口中的最大值。题目来源:LeetCode--239. Sliding Window Maximum原版题目:Given an arraynums, there is a sliding window of sizekwhich is moving from the very le...

2019-05-23 13:42:50 769

原创 不使用其他数据结构逆序一个栈

题目:不使用其他的数据结构反转一个栈。来源:程序员代码面试指南 P8题目就是这么的简洁,不准使用其他数据结构(栈、数组、队列啥的)逆序一个栈(原来【1,2,3,4】变成【4,3,2,1】)。分析:题目限制了不能使用其他数据结构了,所以这里肯定要使用递归了(函数的递归调用本来就是一个栈嘛)。那么使用递归的大致代码(伪代码)如下: void reverseStack(Sta...

2019-05-22 18:54:16 367

原创 删除k个数字后的最小值

给定一个只包含数字的字符串,要求在原字符串基础上删除k个数字后,使新字符串的数字最小。题目来源:LeetCode-402. Remove K Digits,原题目如下:Given a non-negative integernumrepresented as a string, removekdigits from the number so that the new number...

2019-05-22 18:30:35 863

原创 最大公约数算法及其优化

一般求解最大公约数的两种算法,分别是辗转相除法与更相减损术。辗转相除法说的是:两个整数a,b(a比b大,下同)的最大公约数等于a%b与b的最大公约数。更相减损术说的是:两个整数a,b(a比b大,下同)的最大公约数等于a-b与b的最大公约数。下面来实现这两种算法:public class Gcd { //辗转相除法 public static int gcd1(in...

2019-05-20 13:38:50 432

原创 基于wait/notify的阻塞队列

阻塞队列与普通的队列的区别就是当队列为空或者满时处理的逻辑不通,普通队列返回特殊值(比如null,false等等)而阻塞队列是阻塞当前线程直到队列有元素或者不为空。下面我们使用Java中的wait/notify方法来实现一个自己的阻塞队列。首先定义阻塞队列的接口:public interface BlockingQueue<E>{ /** * 往队列尾部...

2019-05-19 16:57:49 436

原创 每日刷题系列---225. Implement Stack using Queues

编写一个类,用队列来实现栈,支持栈的基本操作(push,pop,peek,empty)原题目:LeetCode 225. Implement Stack using QueuesImplement the following operations of a stack using queues.push(x) -- Push element x onto stack. pop() -...

2019-05-17 13:33:19 87

空空如也

空空如也

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

TA关注的人

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