自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Eamon

Focus on yourself and conquer yourself.

  • 博客(25)
  • 问答 (2)
  • 收藏
  • 关注

原创 【高频】判断一个链表是否为回文结构

题目描述给定一个链表的头结点head,请判断该链表是否为回文结构。例如: 1->2->1,返回true。1->2->2->1,返回true。15->6->15,返回true。1->2->3,返回false。进阶:如果链表长度为N,时间复杂度为O(N),额外空间复杂度达到O(1)。实现public class IsPalindromeLi...

2020-03-31 00:48:19 473

原创 有序链表公共部分

题目描述打印两个有序链表的公共部分【题目】给定两个有序链表的头指针head1和head2,打印两个链表的公共部分。实现public class PrintCommonPart { public static class Node { int val; Node next; Node(int data) { t...

2020-03-31 00:43:55 783

原创 【剑指offer】24.反转链表

题目描述输入一个链表,反转链表后,输出新链表的表头。思路将指针反转class Node{ public int val; public Node next; public Node(int data){ this.val = data; }}public class Offer24_ReverseList { public s...

2020-03-31 00:39:16 83

原创 【剑指offer】29.顺时针打印矩阵,旋转正方形矩阵

题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵:1 2 3 4 5 6 7 89 10 11 1213 14 15 16则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.思路public int[] spiralOrder(int[][] matrix) { i...

2020-03-31 00:37:00 167

原创 【剑指offer】30.包含min函数的栈

题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。输入描述:第一行输入一个整数N,表示对栈进行的操作总数。下面N行每行输入一个字符串S,表示操作的种类。如果S为"push",则后面还有一个整数X表示向栈里压入整数X。如果S为"pop...

2020-03-31 00:36:08 81

原创 栈和队列的相互转换

import java.util.LinkedList;import java.util.Queue;import java.util.Stack;public class StackAndQueueConvert { public static class TwoStackQueue { private Stack<Integer> stackPu...

2020-03-31 00:32:51 529

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

public class Array_To_Stack_Queue { public static class ArrayStack { private Integer[] arr; private Integer size; public ArrayStack(int initSize) { if (initSi...

2020-03-31 00:31:15 502

原创 【剑指offer】5-2.合并排序数组

题目描述有两个排序的数组A1和A2,内存在A1的末尾有足够的空余空间容纳A2。请实现一个函数,把A2中所有的数字插入到A1中,并且所有的数字是排序的。思路同5-1 链接归并排序public class Offer5_2_MergeArray { public static void mergeArray(int[] a, int[] b, int aLen, int bLen)...

2020-03-28 21:12:50 165

原创 【剑指offer】21.调整数组顺序使奇数位于偶数前面

题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路双指针第一个指针找到第一个偶数位置p1,第二个指针找到偶数后的第一个奇数位置p2。取一个临时变量temp保存奇数值,将这两个数之间的数[p1,p2)均向后移动一位,最后将temp赋给p1。public sta...

2020-03-27 08:15:27 90

原创 【剑指offer】29.顺时针打印矩阵

题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵:1 2 3 4 5 6 7 89 10 11 1213 14 15 16则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.思路public int[] spiralOrder(int[][] matrix) { i...

2020-03-26 16:54:02 75

原创 【剑指offer】40.最小的K个数

题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。思路构建最大堆:堆未满时插入堆已满的时候比较堆顶元素和插入元素大小,插入元素小则替换栈顶元素取出堆元素返回public static ArrayList<Integer> GetLeastNumbers_Solution(int[] inp...

2020-03-26 15:39:05 629

原创 排序算法之堆排序

堆排序堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。堆必须满足以下两个性质:是一颗完全二叉树什么是完全二叉树?首先满足1.除了叶子结点其余结点都有左右孩子。2.在最后一层的结点,连续集中在最左边。每个结点的值都大于或等于其左右孩子结点的值大于或等于是大顶堆小于或等于是小顶堆...

2020-03-26 15:05:30 508

原创 排序算法之快速排序

思路找到一个基础值,一般取第一个。从右向左找,找到第一个比基准值小的数停下来;从左向右找,找到第一个比基准值大的数停下来;交换这两个数;继续2-4步进行下一轮的查找替换,直至在基准数的左边都比基准数小,右边都比基准数大。以基准数为界,分成左右数组,分别进行1-5操作。经典快排实现public class QuickSort { public static void qu...

2020-03-26 14:28:04 629

原创 LeetCode226.翻转二叉树

题目描述翻转一棵二叉树。输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1思路1.递归/** * Definition for a binary tree node. * public class TreeNode { ...

2020-03-25 09:17:25 501

原创 排序算法之插入排序

类似于打扑克牌:取未排序的数据第一个,在已排序的序列中从后向前扫描,找到相应位置插入public static void insertSort(int[] nums){ for(int i = 1; i< nums.length; i++){ for(int j = i; j > 0; j--){ if(nums[j] < num...

2020-03-25 08:07:00 461

原创 排序算法之归并排序

思路归并排序是用的分治思想。让左右两部分先有序,然后将左右两个有序部分合并为新的有序部分。如何让左右两部分有序:接着分左右部分。实现public class MergeSort { //两路归并算法,两个排好序的子序列合并为一个子序列 public void merge(int []a,int left,int mid,int right){ int []t...

2020-03-25 08:06:02 519

原创 排序算法之选择排序

选择排序首先找到元素中最小的那个元素其次,将它和第一个元素交换位置再次,在剩下的元素中找到最小的元素和数组中第二个元素交换位置。如此往复,直到数组排序(每次从待排序元素中选择最小者或最大者)。public static void selectionSort(int[] a){ int N = a.length; if(N < 2) return; ...

2020-03-25 08:04:40 618

原创 排序算法之冒泡排序

比较相邻的元素。如果相邻两个元素前面比后面大,则交换两个元素。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。第一轮排序后,最后的元素是数组中最大的数。针对所有的元素重复以上的步骤。public static void bubbleSort(int[] arr) { if (arr == null || arr.length < 2) return; fo...

2020-03-25 08:03:37 484

原创 小和问题【归并排序】

题目描述在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和。例子:输入:[1, 3, 4, 2, 5]输出:161左边比1小的数,没有;3左边比3小的数,1;4左边比4小的数,1、3;2左边比2小的数,1;5左边比5小的数,1、3、4、2;所以小和为1+1+3+1+1+3+4+2=16思路实现的基本原理还是归并排序将当前序列分为两个子序列,分别求其...

2020-03-25 08:02:04 593

原创 【剑指offer】51数组中的逆序对

题目描述在一个数组中,左边的数如果比右边的数大,则折成两个数构成一个逆序对,请打印所有逆序对。输入 1,2,3,4,5,6,7,0输出 7[1,0] [2,0] [3,0] [4,0]...[7,0]思路这和【小和问题】一样属于【归并排序】类的问题,理解了归并排序就可以解。 static int findPairs(int[] arr, int start, int end) ...

2020-03-25 08:00:14 584

原创 【剑指offer】6从尾到头打印链表

题目描述输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 :输入:head = [1,3,2]输出:[2,3,1]思路1. 用栈的先进后出特性打印反转链表/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode ne...

2020-03-25 07:58:30 68

原创 【剑指offer】5_1.替换空格

题目描述请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例:输入:s = "We are happy."输出:"We%20are%20happy."思路1.StringBuilder借助StringBuilder实现class Solution { public String replaceSpace(String s) { StringBu...

2020-03-25 07:56:52 90

原创 【剑指offer】4二维数组的查找

题目描述在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14...

2020-03-25 07:55:33 69

原创 【剑指offer】3-2不修改数组找出重复的数字

题目描述给定一个长度为 n+1 的数组nums,数组中所有的数均在 1∼n 的范围内。请找出数组中任意一个重复的数,但不能修改输入的数组。给定 nums = [2, 3, 5, 4, 3, 2, 6, 7]。返回 2 或 3。思路1.暴力法参考3-1链接2.辅助数组创建一个长度为n+1的辅助数组,如果原数组中被复制的数字是m,就把它度知道辅助数组的下标为m的位置。publi...

2020-03-25 07:54:44 192

原创 【剑指offer】3-1数组中重复的数字

题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。思路1.暴力法public int findRepeatNumber(int[] nums) { if...

2020-03-25 07:52:04 98

空空如也

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

TA关注的人

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