- 博客(18)
- 收藏
- 关注
原创 反转链表
反转链表题目描述:输入一个链表,反转链表后,输出新链表的表头。/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNo...
2019-12-04 15:26:55
225
原创 链表中倒数第k个结点
链表中倒数第k个结点题目描述:输入一个链表,输出该链表中倒数第k个结点。思路:首先,我们得判断该链表是否为空。解题的方法也会很简单,基本步骤如下:(1)先遍历整个链表,统计结点个数(2)用k和count进行比较。如果k>count,说明输入的k不合法,该结点不存在;如果k<count,说明结点存在。(3)利用循环找出倒数第k个结点,count-k表示的是倒数第k个结点的位置(...
2019-12-04 15:08:51
244
原创 动态数组练习题(三)
88. 合并两个有序数组给定两个有序整数数组nums1 和 nums2,将 nums2 合并到nums1中,使得num1 成为一个有序数组。说明:初始化nums1 和 nums2 的元素数量分别为m 和 n。你可以假设nums1有足够的空间(空间大小大于或等于m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0],...
2019-09-21 00:32:36
799
原创 经典算法(Java)
约瑟夫环问题问题描述:N个人围成一圈,从第一个人开始报数,报到m的人出圈,剩下的人继续从1开始报数,报到m的人出圈;如此往复,直到所有人出圈。(模拟此过程,输出出圈的人的序号)解析:根据题目要求,假设我们现在20个人,数到3的人出圈,可以看出这是一个单向循环链表。我们可以先来看看有什么规律,如图所示,我们可以设置一个临时结点p,让p指向出圈元素的前驱。从1数到3的时候,p就得前进一步指...
2019-09-18 21:39:55
615
原创 数据结构与算法——单向循环链表
简单来说,单向循环链表就是让单链表尾结点的指针域由null改为指向头结点,形成一个首尾相连的环形链表。就像衔尾蛇一样。而单链表与单向循环链表的主要差异就在于循环的判断条件上,单链表判断的是p->next是否为空,而单向循环链表判断的是p->next是否等于头结点,如果等于,则循环结束。注意:单链表我们用的是虚拟头结点,而单向循环链表head指向的则是真实的头结点。1.单...
2019-09-17 09:22:56
827
原创 数据结构与算法——单链表
我们知道线性表的顺序存储结构,最大的缺点就是插入和删除时需要移动大量的元素,这样显然很消耗时间。我们可以想一想,怎么样可以不用移动元素而进行删除和插入呢?为了解决这个问题,我们提出了链式存储结构,它是用一组任意的存储单元去存储线性表的数据元素,这组存储单元可以连续,也可以不连续,也就是说这些数据元素可以在内存中未被占用任意位置,这样也节省了大量的空间。如图所示。链式存储结构1.结点...
2019-09-16 21:56:59
379
原创 动态数组练习题(二)
118. 杨辉三角给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 5输出:[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]解题思路:杨辉三角,每一行第一个元素和最后一个元素都是1,中间的元素都是上面元素之和。第一、二行可以不用考虑,都是1,第i行的中...
2019-09-13 23:34:07
274
原创 动态数组练习题(一)
选择题1.设入栈顺序为A,B,C,D,E则出栈序列不可能为(B)A. EDCBAB. ADEBCC. ABCDED. ABDCE解题思路:我们首先要知道栈遵守先进后出的原则。出栈的方式有多种,所以这个题我们可以用排除法:A选项先入栈的后出,出栈顺序符合;B选项A先出栈说明A刚进去就出栈,D出栈的话,说明B,C在D之前入栈,此时栈中顺序是BC,然后E进栈出栈,下来必然是C出栈,而不是B,...
2019-09-13 14:00:37
2432
原创 数据结构与算法-栈和队列
一、栈(先进后出)栈的顺序存储结构栈的定义:栈是限定在表尾进行插入和删除操作的线性表允许插入和删除的一端称为栈顶,另一端称为栈底。双端栈的定义: 双端栈是指将一个线性表的两端当作栈底分别进行入栈和出栈的操作。1.Stack 栈接口定义/** * Stack是栈的接口 * @author ABC * */public interface Stack<E> { /*...
2019-09-10 15:37:10
447
原创 数据结构与算法-概述
一、数据结构的概述1.数据结构的逻辑结构是指数据元素之间的相互关系,是我们想象出来的,并没有实质性的将其存储在计算机中1)集合结构:集合结构中的数据元素除了同属于一个集合外,它们之间没有其他关系2)线性结构:线性结构中的数据元素之间是一对一的关系3)树形结构:树形结构中的数据元素之间存在一对多的层次关系4)图形结构:图形结构的数据元素是多对多的关系2.数据结构的物理结构是指数据的逻...
2019-09-09 23:39:11
340
原创 Leetcode算法题(二)
26.删除排序数组中的重复项给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素...
2019-09-09 20:26:55
195
原创 Leetcode算法题(一)
两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]方法...
2019-09-07 23:15:29
299
原创 Java中的线程(一)
线程线程是独立调度和分派的基本单位,共享进程资源,引入线程是为了减少程序在并发执行时付出的时空开销进程进程是指一种正在运行的程序,有自己的地址空间,进程是系统资源分配的单位,可包括多个线程两者之间的区别一个进程可包含多个线程,线程属于进程线程是调度(获得的cpu的所有权)的基本单位,进程是资源分配的基本单位一个线程死掉就等于整个进程死掉,而一个进程死掉,由于保护机制,其他进程不受影...
2019-07-27 19:55:02
141
原创 java中Object类的九大方法
Object类是所有类的父类,它有九大方法,分别是:clone方法(浅拷贝)保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。getClass方法getClass就是返回一个运行实例的Class,通常返回类名。public class Test { public static...
2019-07-26 20:04:18
350
原创 equals和==的区别
equals和==的区别== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。**equals()**方法来源与Object类中,而Object类是所有类的直接或间接父类,也就是说所有的类中的equals()方法都继承自Object类,而通过源码发现,Object类中的equals()方法返回的是== 的...
2019-07-25 22:17:48
278
原创 java中是否存在内存泄漏?什么情况下才是内存泄漏?
什么是内存泄漏?内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。所以内存泄漏堆积最终会导致内存溢出。什么是内存溢出?内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了lo...
2019-07-23 18:12:44
307
原创 单例模式
概述定义:一个类有且仅有一个实例,并且自行实例化向整个系统提供。单例模式常见的写法:懒汉式、饿汉式。单例模式的特点单例类只能有一个实例必须自己创建自己的唯一实例必须自行向整个系统提供这个实例饿汉式(立即加载)特点:饿汉式不管有没有调用getInstance()方法,都会预先在系统中创建一个静态对象线程安全public class Singleton{ //饿汉式单...
2019-07-22 22:32:41
226
转载 冒泡排序--Java
基本思想比较相邻的两个元素,如果第一个数比第二个数大,则将这两个数交换位置。第一次遍历结束,最大的数放在最后位置。因此剩下的比较中不需要再将它参与进来。第二次遍历时,最大的数放在倒数第二个位置。剩下的比较以此类推,直到没有任何一对数字需要比较为止。原理分析红色的数字为正在比较的数字,原始数组如下:第一次循环1.首先比较a[0]和a[1]。因为28>12,所以交换这两个数的...
2019-04-19 17:27:24
499
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅