【Git与GitHub】
第1章 Git 概述
Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种 项目。
Git 易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作 流分支等特性。其性能优于 Subversion、CVS、Perforce 和 ClearCase 等版本控制工具。
何为版本控制?
版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。
版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本, 方便版本切换。
为什么需要版本控制 ?
个人开发过渡到团队协作。
版本控制工具
集中式版本控制工具( CVS、SVN(Subversion)、VSS……)
集中化的版本控制系统诸如 CVS、SVN 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。
这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做些什 么。而管理员也可以轻松掌控每个开发者的权限,并 ...
LeetCode百题【字母异位词分组】
题目描述给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。
示例 1:
12输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
12输入: strs = [""]输出: [[""]]
示例 3:
12输入: strs = ["a"]输出: [["a"]]
提示:
1 <= strs.length <= 10^4
0 <= strs[i].len ...
【SSM整合】
项目介绍
使用SSM框架搭建出一套简单的CRUD项目示例
技术点
基础框架-SSM(Spring+SpringMVC+Mybatis)
数据库-MySQL
前端框架-Bootstrap
依赖管理-Maven
环境搭建数据库123456789101112131415161718CREATE DATABASE `ssmbuild`;USE `ssmbuild`;DROP TABLE IF EXISTS `books`;CREATE TABLE `books` (`bookID` INT(10) NOT NULL AUTO_INCREMENT COMMENT '书id',`bookName` VARCHAR(100) NOT NULL COMMENT '书名',`bookCounts` INT(11) NOT NULL COMMENT '数量',`detail` VARCHAR(200) NOT NULL COMMENT '描述',KEY `bookID` (`bookID`)) ENGINE=INNODB ...
LeetCode百题【组合总和】
题目描述给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。
candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。
对于给定的输入,保证和为 target 的不同组合数少于 150 个。
示例 1:
123456输入:candidates = [2,3,6,7], target = 7输出:[[2,2,3],[7]]解释:2 和 3 可以形成一组候选,2 + 2 + 3 = 7 。注意 2 可以使用多次。7 也是一个候选, 7 = 7 。仅有这两种组合。
示例 2:
12输入: candidates = [2,3,5], target = 8输出: [[2,2,2,2],[2,3,3],[3,5]]
示例 3:
12输入: candidates = [2], target = 1输出: []
提示:
1 ...
LeetCode百题【在排序数组中查找元素的第一个和最后一个位置】
题目描述给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target,返回 [-1, -1]。
进阶:
你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?
示例 1:
12输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]
示例 2:
12输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]
示例 3:
12输入:nums = [], target = 0输出:[-1,-1]
提示:
0 <= nums.length <= 10^5
-10^9 <= nums[i] <= 10^9
nums 是一个非递减数组
-10^9 <= target <= 10^9
解法
两次二分查找
第一次查找最左边的元素
第二次查找最右边的元素
1234567891011121314151617181920212223242526272829303 ...
LeetCode百题【寻找两个正序数组的中位数】
题目描述给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
示例 1:
123输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2
示例 2:
123输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
提示:
nums1.length == m
nums2.length == n
0 <= m <= 1000
0 <= n <= 1000
1 <= m + n <= 2000
-10^6 <= nums1[i], nums2[i] <= 10^6
解法
二分查找
整体思路:
用一条分割线,将两个数组从中间一分为二分成四个部分
1.left 1.right
2.left 2.right
...
LeetCode百题【下一个排列】
题目描述整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。
例如,arr = [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。
整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的 下一个排列 就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。
例如,arr = [1,2,3] 的下一个排列是 [1,3,2] 。
类似地,arr = [2,3,1] 的下一个排列是 [3,1,2] 。
而 arr = [3,2,1] 的下一个排列是 [1,2,3] ,因为 [3,2,1] 不存在一个字典序更大的排列。
给你一个整数数组 nums ,找出 nums 的下一个排列。
必须原地修改,只允许使用额外常数空间。
示例 1:
12输入:nums = [1,2,3]输出:[1,3,2]
示例 2:
12输入:nums = ...
LeetCode百题【三数之和】
题目描述给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 _a,b,c ,_使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
注意: 答案中不可以包含重复的三元组。
示例 1:
12输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]
示例 2:
12输入:nums = []输出:[]
示例 3:
12输入:nums = [0]输出:[]
提示:
0 <= nums.length <= 3000
-10^5 <= nums[i] <= 10^5
解法
排序+双指针
先对数组进行排序,这样可以使重复的元素排在一起方便去重
对a进行遍历,剩下的数(b+c)进行遍历找结果就是两数之和
注意内存优化
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253import java.util.A ...
LeetCode百题【最长回文子串】
题目描述给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
123输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。
示例 2:
12输入:s = "cbbd"输出:"bb"
提示:
1 <= s.length <= 1000
s 仅由数字和英文字母组成
解法
暴力
遍历个子串并且判断是否为回文串并记录下长度
12345678910111213141516171819202122232425262728293031323334class Solution { public String longestPalindrome(String s) { int n=s.length(); if(n<2){ return s; } char[] chars = s.toCharArray(); ...
LeetCode百题【二叉树的直径】
题目描述给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。
示例 :给定二叉树
123451 / \ 2 3 / \ 4 5
返回 3 , 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。
注意: 两结点之间的路径长度是以它们之间边的数目表示。
解法
深度优先搜索
123456789101112131415161718192021class Solution { int ans; public int diameterOfBinaryTree(TreeNode root) { ans=0; depth(root); return ans; } public int depth(TreeNode node){ //1.定义递归出口 if(node==null){ return 0; ...