自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 统计文本文件中每个单词的数量并倒序输出

统计文本文件中每个单词的数量并倒序输出收获:学会使用Iterator以及Comparatorpackage ccc.mm;import java.io.File;import java.util.HashMap;import java.util.Iterator;import java.util.Scanner;import java.util.Set;import java.util.ArrayList;import java.util.Comparator;import java.u

2021-08-08 17:44:44 223

原创 数据库-SQL

数据库-SQL1、找出在“体育馆”所有比赛项目itemidselect itemid from item where location = ‘体育馆’2、根据itemid分组后找出每个itemid所有成绩的最高分select itemid iid, MAX(mark) max from grade where itemid in (select itemid from item where location = ‘体育馆’) group by itemid3、将项目最高分信息的表与三个表连接fr

2021-07-31 21:23:38 156

原创 leetcode 14 最长公共前缀

最长公共前缀编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。思路:纵向比较,比较数组每个元素的第 i 个字符class Solution { public String longestCommonPrefix(String[] strs) { // if(strs == null || strs.length == 0) { // return ""; // } int coun.

2021-06-30 10:30:18 90

原创 二分查找Java

二分查找总结1、if里面写想要找到的逻辑的相反,保证if 的逻辑简单;2、while (left < right) ,left == right ,把区间分成2个部分;3、当把mid置于左半边,则mid向下取整;当把mid置于右半边,则mid向上取整;4、mid的取值(1)int mid = (left + right) / 2;在 left 和 right 较大的时候,left + right 会发生整型溢出,变成负数;(2)int mid = left + (right - left)

2021-06-13 21:36:24 1073 1

原创 动态规划Java

动态规划2021年5月30日立下flag,理解每道题,真的理解而不是背诵,加油!题目:1、青蛙跳台阶问题/爬楼梯问题2、斐波那契数列动态规划解析状态定义:dp为1维数组,dp[i]表示第i个/次的值转移方程:dp[i] = dp[i - 1] + dp[i - 2]初始状态:dp[0] = 1, dp[1] = 1返回值:dp[n]表示第n个/次的值...

2021-05-30 15:42:38 136

原创 剑指 Offer 42. 连续子数组的最大和

输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。public int maxSubArray(int[] nums) { int max = nums[0]; int before = 0; int now = nums[0]; for(int n: nums) { now =

2021-03-03 17:10:10 74 1

原创 贪心算法Java实现

贪心算法-集合覆盖1、基本原理1)遍历所有电台,找到一个覆盖了最多未覆盖地区的电台;2)把该电台加入到一个集合中,再设法把该电台覆盖的地区在下一次比较时去掉;3)重复第一步,直到不存在未覆盖地区。public class Greedy { public static void main(String[] args) { // TODO Auto-generated method stub //构建一个哈希表,存放所有电台名字和覆盖的地区 HashMap<String, Has

2021-03-03 10:52:23 155 1

原创 KMP算法Java实现

字符串匹配给定两个字符串,字符串 str1 和 子串 str2,找出子串 str2 和 字符串 str1匹配的初始匹配位置,若没有,则返回-11、暴力匹配1)规定 i 为 str1 的索引,j 为 str2 的索引;2)i 和 j 都从0开始,若当前字符匹配成功,即 str[i] == str2[j];则匹配下一个位置,即 i++, j++;3)若匹配不成功,则令 j = 0, i = i - j + 1,即 i 回到起始位置的下一个位置public static int VoilenceMat

2021-03-02 20:43:43 151

原创 分治算法Java实现

分治算法1、分治算法1)分解:将原问题分解为若干个相互独立,与原问题形式相同的子问题;2)解决:若子问题规模小容易解决则直接解,否则递归求解子问题;3)合并:将各个子问题的解合并为原问题的解。2、汉诺塔1)基本内容:有A、B、C三根柱子,A柱子上从下向上依次摞着大小不同的盘子,要求大盘子必须在小盘子下面摞着;借助B柱子,把A柱子上的盘子移动到C柱子上,要求大盘子必须在小盘子下面摞着,且三根柱子间一次只能移动一个盘子。2)主要思想(1)若盘子数 n = 1,则直接从 A->C;(2)若

2021-02-19 20:24:09 233

原创 动态规划Java实现

1、动态规划1)核心思想:将大问题划分为小问题2)经分解得到的小问题不是相互独立的,即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解。3)可以通过填表的方式来逐步推进,得到最优解。2、背包问题1)基本内容:一个给定容量的背包,若干具有一定价值和重量的物品,选择物品放入背包使物品的总价值最大。2)01背包和完全背包(1)01背包:每种物品最多放1个(2)完全背包:每种物品有无限件可用,每种可放入任意个3)主要思想(1)设置第 i 个物品,其重量为 w[i],价值为 v

2021-02-19 11:23:02 226

原创 剑指 Offer 32 - II - III. 从上到下打印二叉树 II - III

1、题目描述从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。2、方法1)借助队列实现(1)创建一个队列 queue 存放层序遍历顺序的二叉树节点;(2)创建一个List<List< Integer >> listList 存放每一层的节点值;(3)首选判断根节点不为空,并把根节点存入队列中;(4)循环得到每层的节点值,循环控制条件 queue不为空;(5)在每次循环中,创建一个List< Integer > list 存放本层节

2020-12-24 17:33:14 79 1

原创 剑指 Offer 68 - II. 二叉树的最近公共祖先

1、题目描述给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”2、方法1)父节点存储法(1)构造一个函数,把所有节点的父节点都存入哈希表中,键值:<Integer, TreeNode>;(2)依次访问节点 p 的所有祖先节点,并设置一个集合 visited,存放节点 p 的所有祖先节点;(3

2020-12-24 16:32:34 49 1

原创 剑指 Offer 58 - I. 翻转单词顺序

1、题目描述输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。示例 1:输入: “the sky is blue”输出: “blue is sky the”示例 2:输入: " hello world! "输出: “world! hello”解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入: “

2020-12-24 12:04:16 47

原创 剑指 Offer 53 - I. 在排序数组中查找数字 I

1、题目描述统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: 02、方法1)二分查找public int binarySearch(int[] nums, int target, int left, int right) { if(left > right) { return 0; } int mid

2020-12-23 16:38:10 98

原创 剑指 Offer 53 - II. 0~n-1中缺失的数字

1、题目描述一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 1:输入: [0,1,3]输出: 2示例 2:输入: [0,1,2,3,4,5,6,7,9]输出: 82、方法1)把缺失元素的数组复制到新的数组中(新数组的元素数目和不缺失的数目相同,用0填充)2)Java小知识:复制数组int[] newArr = Arrays.copyOf(arr, arr.leng

2020-12-23 16:03:34 50

原创 剑指 Offer 57. 和为s的两个数字

1、题目描述输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]2、实现1)双指针法:分别指向数组左右两端public int[] twoSum(int[] nums, int target) { int left

2020-12-23 10:50:43 82

原创 剑指 Offer 57 - II. 和为s的连续正数序列

1、题目描述输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]2、方法1)滑动窗口法(1)设置一个长度变化的滑动窗口,左闭右开;(2)计算滑动窗口内的元素的和 sum,若 sum 大于 target,则滑动窗口左

2020-12-23 10:08:07 61

原创 剑指 Offer 09. 用两个栈实现队列

1、题目描述用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:[“CQueue”,“deleteHead”,“appendTa

2020-12-21 17:58:02 65 1

原创 剑指 Offer 15. 二进制中1的个数

请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。示例 2:输入:00000000000000000000000010000000输出:1解释:输入的二进制串 0000

2020-12-21 17:26:52 43

原创 剑指 Offer 25. 合并两个排序的链表

1、题目描述输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->42、方法class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { // 新链表的头节点 ListNode l = new ListNode(0)

2020-12-21 15:57:50 51

原创 剑指 Offer 54. 二叉搜索树的第k大节点

1、题目描述给定一棵二叉搜索树,请找出其中第k大的节点。2、方法class Solution { ArrayList<Integer> list = new ArrayList<Integer>(); public int kthLargest(TreeNode root, int k) { midOrder(root); return list.get(list.size() - k); } // 中序遍历

2020-12-21 15:29:49 44

原创 剑指 Offer 55 - I. 二叉树的深度

1、题目描述输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。2、方法1)从根节点进入递归,递归地计算左右子树的深度。class Solution { public int maxDepth(TreeNode root) { int leftDepth = 0; int rightDepth = 0; if(root == null) { re

2020-12-21 14:25:58 35

原创 剑指 Offer 27. 二叉树的镜像

1、题目描述请完成一个函数,输入一个二叉树,该函数输出它的镜像。示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]2、方法1)从根节点进入递归,递归地交换当前节点的左子节点和右子节点class Solution { public TreeNode mirrorTree(TreeNode root) { if(root == null) { return null; }

2020-12-21 12:13:34 50

原创 剑指 Offer 58 - II. 左旋转字符串

1、题目描述剑指 Offer 58 - II. 左旋转字符串字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = “abcdefg”, k = 2输出: “cdefgab”示例 2:输入: s = “lrloseumgh”, k = 6输出: “umghlrlose”2、方法1)首先把字符串转化为字符数组;2)把字

2020-12-21 11:55:23 35

原创 图Java实现

图1、图的原理1)图:顶点和边组成2)实现(1)邻接矩阵(2)邻接表2、深度优先搜索1)定义:首先访问初始节点的第一个邻接节点,再访问该邻接节点的第一个邻接节点,……2)实现步骤(1)访问初始节点 v,并把其标记为已访问;(2)查找 v 的第一个邻接节点 w;(3)判断 w 是否存在,若 w 存在,则执行第(4);若不存在,则从v之后的节点继续开始步骤1-3;(4)判断 w 是否已访问,若未被访问,则以 w 为初始节点进行深度优先搜索;(5)查找 v 的下一个邻接节点 新w。3、

2020-12-21 11:23:07 259

原创 二叉排序树和平衡二叉树(AVL树)Java实现

二叉排序树1、基本概念1)二叉排序树BST:对于任何一个非叶子节点,要求其左子节点的值比当前值小,其右子节点的值比当前值大。2)中序遍历二叉排序树会得到一个升序序列。2、二叉排序树的创建1)创建节点和二叉排序树2)递归添加节点3、二叉排序树的删除节点0)预先判断:判断二叉排序树是否存在;判断删除节点是否存在1)删除节点为叶子节点(1)首先判断该叶子节点的父节点是否为空(2)若为空,则说明删除节点为根节点,且根节点为叶子节点,即:二叉排序树只有一个根节点,将根节点置为空,即可删除。(3

2020-12-19 13:50:11 213 1

原创 哈夫曼编码Java实现

哈夫曼编码1、基本概念1)一种可变长的前缀编码,常用于数据压缩2、实现步骤1)把字符串转换为字符数组,统计出每个字符出现的次数;2)把每个字符出现的次数作为该字符的权值,每个字符对应的ascii码作为数据;3)利用每个字符的权值,构建哈夫曼树;4)根据哈夫曼树,给每个字符编码,向左的路径编码为 0,向右的路径编码为 1;// 构建哈夫曼树public static Node createHuffmanTree(List<Node> nodes){ while(nodes.si

2020-12-12 12:23:55 1703 2

原创 堆排序Java实现

堆排序8、堆排序1)堆知识(1)大顶堆:每个节点的值都比其左右子节点大的完全二叉树;(2)小顶堆:每个节点的值都比其左右子节点小的完全二叉树;2)基本原理(1)把数组构建成一个大顶堆(升序大顶堆,降序小顶堆),此时该大顶堆的根节点即为数组中最大元素,把根节点和最后一个元素交换位置;(3)再把剩下的元素组成的堆调整为大顶堆,把当前根节点和次最后一个元素交换位置;(4)重复(3)步骤,直到所有元素都排序完成。3)性质(1)时间复杂度①平均:O(nlogn)②最好:O(nlogn)③最坏

2020-12-11 18:19:23 73 1

原创 线索化二叉树Java实现

1、线索化二叉树概念1)具有 n 个节点的二叉树的空指针域为 n+1,利用空指针域存放指向该节点在某种遍历下的前驱和后继节点的指针,附加的指针称为“线索”。2)线索二叉树(1)前序线索二叉树(2)中序线索二叉树(3)后续线索二叉树3)前驱和后继节点(1)前驱节点:当前节点的前一个节点(2)后继节点:当前节点的后一个节点class ThreadedBinaryTree{ Node root; Node pre; // 前序线索化二叉树 public void preOrderThre

2020-12-10 10:31:11 159

原创 顺序存储二叉树Java实现

顺序存储二叉树1、顺序存储二叉树概念1)在二叉树中存放数组元素,数组元素的下标和完全二叉树的节点顺序一致;

2020-12-10 08:56:49 69

原创 二叉树的遍历、查找、删除Java实现

二叉树1、二叉树递归遍历1)前序遍历(1)输出当前节点;(2)若当前节点的左子节点不为空,则递归前序遍历左子树;(3)若当前节点的右子节点不为空,则递归前序遍历右子树2)中序遍历(1)若当前节点的左子节点不为空,则递归中序遍历左子树;(2)输出当前节点;(3)若当前节点的右子节点不为空,则递归中序遍历右子树;3)后序遍历(1)若当前节点的左子节点不为空,则递归中序遍历左子树;(2)若当前节点的右子节点不为空,则递归中序遍历右子树;(3)输出当前节点;2、二叉树查找1)前序查找

2020-12-08 17:09:51 108

原创 哈希表(散列表)Java实现

1、原理1)根据关键码值进行访问,即通过把关键码值映射到表中一个位置来访问表中该位置的信息;2)映射函数:散列函数3)存放信息的数组:散列表4)可以加快查找信息;2、实现(增删改查员工信息)1)用数组和链表实现哈希表(1)数组中的每个元素是一个链表(2)在链表中添加员工...

2020-11-30 09:41:10 102

原创 栈Java实现

栈1、栈的概述1)原理(1)栈是一个先入先出的有序列表(2)只允许在“栈顶(Top)”插入和删除;2)栈的实现(1)用数组实现栈class ArrayStack{ int[] stack; int top = -1; int maxSize; public ArrayStack(int maxSize){ this.maxSize = maxSize; stack = new int[maxSize]; } public boolean isEmpty(){ retur

2020-11-28 18:02:43 76

原创 LeetCode 面试题 02.07. 链表相交

1、题目描述给定两个(单向)链表,判定它们是否相交并返回交点。请注意相交的定义基于节点的引用,而不是基于节点的值。换句话说,如果一个链表的第k个节点与另一个链表的第j个节点是同一节点(引用完全相同),则这两个链表相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为

2020-11-27 10:01:54 148

原创 LeetCode 剑指 Offer 59 - I. 滑动窗口的最大值

1、题目描述给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释:滑动窗口的位置 最大值[1 3 -1] -3 5 3 6 7 31 [3 -1 -3] 5 3 6 7 31 3 [-1 -3 5] 3 6 7 51 3 -1 [-3 5

2020-11-27 09:11:39 50

原创 LeetCode 933. 最近的请求次数

写一个 RecentCounter 类来计算特定时间范围内最近的请求。请你实现 RecentCounter 类:RecentCounter() 初始化计数器,请求数为 0 。int ping(int t) 在时间 t 添加一个新请求,其中 t 表示以毫秒为单位的某个时间,并返回过去 3000 毫秒内发生的所有请求数(包括新请求)。确切地说,返回在 [t-3000, t] 内发生的请求数。保证 每次对 ping 的调用都使用比之前更大的 t 值。示例:输入:["RecentCounter", "

2020-11-26 12:28:23 93 2

原创 LeetCode 面试题02.01.移除重复节点

编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。示例1:输入:[1, 2, 3, 3, 2, 1]输出:[1, 2, 3]示例2:输入:[1, 1, 1, 1, 2]输出:[1, 2]1、快慢指针法public ListNode removeDuplicateNodes(ListNode head){ if(head == null){ return null; } ListNode slow = head; while(slow != null){ ListNo

2020-11-24 18:28:45 90

原创 单向环形链表(约瑟夫问题)Java实现

单向环形链表(约瑟夫问题)1、应用场景1)设编号为1、2、……、n的n个人围坐一圈,约定编号为k的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的人又出列,依次,直到所有人出列。2、实现class Node{ public int no; public Node next; public Node(int no){ this.no = no; }}// 不带头节点的单向环形链表class SingleCircleLinkedList{ Node first

2020-11-24 13:26:17 87

原创 双向链表Java实现

双向链表1、双向链表介绍1)单向链表查找方向只有一个,双向链表可向前或向后查找;2)单向链表不能自我删除,需要依靠辅助节点,即找到链表待删除结点的前一个节点,双线链表可自我删除;3)next:指向前一个节点;pre:指向后一个节点。2、双向链表实现class Node{ public int no; public String name; Node next; Node pre; public Node(int no, String name){ this.no = no; t

2020-11-23 18:14:40 117

原创 单向链表Java实现

链表1、链表介绍1)链表是有序的列表。2)链式存储,以节点的方式存储,链表的各个节点不一定是连续存储;3)每个节点包含:数据域,指针域;4)分为带头节点的链表和不带头节点的链表。2、单链表实现class Node{ public int no;// 节点的编号 public String name;// 节点的名字 Node next; // 重写toString public String toString(){ return "Node[no=" + no + "name="

2020-11-23 15:02:48 64

空空如也

空空如也

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

TA关注的人

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