自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 通过pip安装python包

安装python包

2023-01-09 22:48:03 196

原创 java中使用空格、多个空格、制表符分隔字符串

String[] s1 = s.trim().split("\\s+");

2022-04-17 17:36:48 1100

原创 [力扣41]缺失的第一个正数

思路1、遍历一遍数组,如果nums[i]>=1且<=nums.length,将该值放入数组相应的位置。2、遍历数组,如果相应的下标上没有数字,那就返回该数字。3、如果遍历一遍,都有数字,那就返回数组的长度+1代码public int firstMissingPositive(int[] nums) { int[] temp = new int[nums.length]; for(int i=0;i<nums.length;i++){

2022-04-17 17:13:05 214 1

原创 【力扣31】下一个排列

思路1、倒着遍历数组,寻找到一个nums[i]>nums[i-1]停止2、从i位置到数组结束,找到最小的比nums[i-1]大的元素,和nums[i-1]进行交换3、从i位置到数组结束进行排序4、如果不存在nums[i]>nums[i-1],则对数组整个进行排序代码 public void nextPermutation(int[] nums) { int flag=0; for(int i=nums.length-1;i>0;i--){

2022-04-17 16:42:54 202

原创 【力扣300】最长递增子序列

思路1、对数组的每一位,找出该位前面的比他小的元素的最长子序列长度max2、该位的最长子序列长度为:max+1 public int lengthOfLIS(int[] nums) { int[][] temp=new int[nums.length][2]; int res=0; for(int i=0;i<nums.length;i++){ temp[i][0]=nums[i]; int

2022-04-14 16:40:55 52

原创 【剑指38】【力扣46】全排列

思路一:交换两个字符比如字符串abc;1、a,a交换;b,b交换;c,c交换;------abc(确定一、二、三位)2、回溯,b,c交换;----------------acb(确定第二位)3、回溯,a,b交换;a,a交换;c,c交换------ bac(确定第一位)4、回溯,a,c交换------------bca(确定第二位)3、回溯,a,c交换;b,b交换;c,c交换------ cba(确定第一位)4、回溯,b,a交换------------cab(确定第二位)import java

2022-04-13 11:22:43 53

原创 服务器提示有挖矿程序,是怎么回事

在提示我有挖矿程序后,我去阿里云的安全中心,看到有三个病毒进程警告,但是都结束进程失败,然后我询问售后工程师,售后工程师给我的回复时格式化云盘。因为没有找到更好的解决方式,就选择了重新安装系统和格式化云盘,已彻底清除病毒。另外,如果没有主动进行挖矿程序,可能是因为安装的某些程序引起的。比如:安装redis时没有设置密码,或者使用默认端口都有可能引起病毒入侵。所以在安装redis时,不要使用默认端口6379,并且设置较为复杂的密码。...

2022-03-25 16:09:56 1885

原创 操作服务器数据库,本地调接口可以操作数据库,服务器调接口操作数据库就报错

报错:Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC ConnectionCannot load driver class: com.mysql.cj.jdbc.Driver解决方式:1、防火墙开放3306端口2、mysql5.7及以下用驱动:com.mysql.jdbc.Driver以上用com.mysql.cj.jdbc.Driver3、检查依赖里面的mysql-c

2022-03-25 15:11:06 1676

原创 【力扣215K大元素】

思路将数组中的元素放在大根堆中,弹出第k个元素即为第k大元素。代码 public int findKthLargest(int[] nums, int k) { PriorityQueue<Integer> queue = new PriorityQueue<>(new Comparator<Integer>() { @Override public int compare(Integer o1, In

2022-03-20 16:22:46 52

原创 【力扣206反转链表】

思路:反转指向,每步保存后面的值迭代实现,pre指向null,cur指向head,将cur指向pre,同时cur和pre一起往前走。代码 public ListNode reverseList(ListNode head) { ListNode temp=null; ListNode pre=null; ListNode cur=head; while(cur!=null){ temp=cur.next;

2022-03-20 16:16:11 396

原创 【力扣204】质数的个数

思路质数的倍数必为合数!!!代码 public static int countPrimes(int n) { int result = 0; if (n == 0 || n == 1) return 0; int[] res = new int[n]; //将数组全部填充为1 Arrays.fill(res, 1); for (int i = 2; i < n; i++) {

2022-03-20 15:43:44 71

原创 【力扣191二进制位中1的个数,190颠倒二进制位,371两数相加】

思路1、左移:表示二进制位向左移动,后面补0。数学意义上是乘2.右移:表示二进制位向右移动,数学意义上是除2取整。2、循环对每一位都进行判断,是否为1。判断方式就是,比如判断第i位是否为1,就与2的i次方(也就是i位为1,其他位都为0)做与操作。如果第i位为1,则与结果为1;如果第i位为0,则与结果为0。代码public int hammingWeight(int n) { int res=0; for(int i=0;i<32;i++){

2022-03-19 19:37:55 224

原创 【力扣384】打乱数组

重点重点是在shuffle方法里面的生成随机数,有以下几种方式:**1、Math.random()😗*生成[0,1)之间的小数,乘以数组长度,就是随机生成[0,数组长度)的小数,在转化成整数,即为生成的随机数。为了保证生成的随机序列为等可能的,所以如果生成的随机数和本身相同,则不进行交换。 public int[] shuffle() { int[] ans = nums.clone(); for (int i = 0; i < n; i++) {

2022-03-16 15:31:14 260

原创 【力扣172】阶乘后的0

思路1、统计是2的倍数的数字个数包括【2的倍数,10的倍数】2、统计是5的倍数的数字个数包括【5的倍数,10的倍数】3、返回较少的个数,因为一对2和5可以凑一个0代码class Solution { public int trailingZeroes(int n) { int temp=n; int count2=0; int count5=0; while (temp>1) { if(temp%

2022-03-13 16:16:06 65

原创 【力扣142】环形链表

思路1将节点依次放进set中,第一个放不进去的节点就是相遇节点思路21、设置一个快指针,每次走两步;一个慢指针,每次走一步;2、如果快指针遇到null,那就说明没环3、等到快指针和慢指针相遇,快指针指向头节点4、这次快指针一次走一步,直到相遇代码public ListNode detectCycle(ListNode head) { ListNode quickCur = head; ListNode lessCur = head; do {

2022-03-11 16:33:12 131

原创 【力扣138】深拷贝包含随机节点的链表

思路使用map,存储原节点和复制之后的节点。使用map将原节点之间的关系也拷贝在复制之后的节点上。代码public Node copyRandomList(Node head) { Node cur=head; Map<Node, Node> map = new HashMap<>(); while(cur!=null){ map.put(cur,new Node(cur.val));

2022-03-11 15:59:17 264

原创 【力扣134】环形加油站

思路依次探测每个节点,看每个节点能否绕一圈,如果不能,记录最多能顺利走过几个点。下一次从未探测的点在开始。(跳过中间已经顺利走过的点)代码 public static int canCompleteCircuit(int[] gas, int[] cost) { int n = gas.length; int i = 0; //遍历每个加油站,看是否能绕一圈 while (i < n) { int sumGa

2022-03-11 15:39:57 169

原创 【力扣128】最长连续序列

方法一 快排+遍历代码: public int longestConsecutive(int[] nums) { if(nums.length==0)return 0; quickSort(nums,0,nums.length-1); //res:整个数组中目前最长的连续序列长度 //ans:当前这个连续序列长度到达的长度 int res=1;int ans=1; for(int i=0;i<nu

2022-03-02 17:13:28 118

原创 【力扣236】二叉树的最近祖先

方法一(性能差,但是很好理解的思路)思路:遍历每颗子树,判断子树中是否包含p、q两个节点,如果都包含则将父节点保存进栈中,最后弹出栈顶即可。代码:class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { //判断子树中是否有两个节点,有就将父节点存进stack中 Stack<TreeNode> stack = new S

2022-03-01 21:20:59 177

原创 【力扣105】从前序和中序遍历构造二叉树

思路1)前序的第一个节点为根节点2)在中序遍历中找到根节点,根节点左边为左子树,右边为右子树3)左子树递归4)右子树递归代码 public TreeNode buildTree(int[] preorder, int[] inorder) { //为了方便将用过的根节点删除,将前序数组放在list中 List<Integer> list = new ArrayList<>(); for(int i=0;i<preorder.leng

2022-03-01 10:59:02 184

原创 【力扣108】将有序数组转化为高度平衡的二叉搜索树

思路·高度平衡:每个节点的左右子树高度相差不超过1·二叉搜索树:每棵树满足:左节点<根节点<右节点1)取有序数组中间的数作为根节点,左边的为左子树,右边的为右子树2)左子树递归3)右子树递归代码 public TreeNode sortedArrayToBST(int[] nums) { return buildBST(nums,0,nums.length-1); } private TreeNode buildBST(int[] nums, int

2022-03-01 10:53:29 50

原创 【力扣102】二叉树的层序遍历

思路设置一个treeList存放每层数据,遍历list时,将该节点值放入list,并将该节点的左节点和右节点放入注意:对list遍历过程中删除元素或增加元素会报错解决方式:使用遍历器 ListIterator iterator = treeList.listIterator();删除元素:iterator.remove();增加元素: iterator.add(treeNode.left);这里也可以将treeList改为队列,直接出队/入队即可。public List<List&l

2022-01-18 20:30:31 72

原创 【力扣98】验证二叉搜索树

public boolean isValidBST(TreeNode root) { return isBalance(root,Long.MIN_VALUE,Long.MAX_VALUE); } public boolean isBalance(TreeNode root,long min,long max){ //如果已经遍历到底,都没有返回false,则返回true if(root==null){ .

2022-01-18 17:35:46 4074

原创 【力扣94】二叉树的中序遍历

中序遍历的思路中序遍历的顺序的是:根左右代码: public List<Integer> inorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<>(); getVal(root,result); return result; } private void getVal(TreeNode root, List&lt

2022-01-18 17:31:16 31

原创 【力扣53】使用贪心法和动态规划实现最大子数组和

方法一 贪心算法思路:每一步都保存当前最大和以及总体最大和当前最大和:·如果前面的数列和>0,则当前和=当前值+前面数列和·如果前面的数列和<0,则当前和=当前值每一步都需要更新最大值代码//贪心法:每一步都获得最大的值 //如果前面数列的和<0,那我就不和他们想加,保持我自己 //如果前面数列的和>0,那我就和它相加 //每一步都更新一下最大值 public static int maxSubArray(int[] nums) {

2022-01-14 11:28:48 128

原创 【力扣48】旋转图像

思路将二维数组进行旋转,其实就是对应位置进行变换如图,A->B->C->D的位置暨第i行第j列位置的数据(i,j)->第j行倒数第i列(j,n-i-1)第i行第j列位置的数据(i,j)->倒数第i行倒数第j列(n-i-1,n-j-1)第i行第j列位置的数据(i,j)->倒数第j行第i列(n-j-1,i)代码class Solution { public void rotate(int[][] matrix) { int n=matri

2022-01-13 20:56:47 36

原创 【力扣22】回溯法实现括号的生成

思路如图,left表示左括号数量,right表示右括号数量,存在以下几种情况·左括号数量=右括号数量=n——满足条件·左括号数量<右括号数量——不满足条件,直接返回`左括号数量>=右括号数量,可以继续添加·当左括号数量<n,可以继续添加左括号·当右括号数量<n,可以继续添加右括号代码class Solution { List<String> result = new ArrayList<>(); StringBuffer

2022-01-12 18:27:56 3304

原创 【力扣50】快速幂法实现x的方

快速幂法思路:对于偶数次方直接将x翻倍,同时阶数除以2对于奇数次方,直接乘以之前累计的结果代码:class Solution { public double myPow(double x, int n) { double result=1; double temp=x; long p=n; p=Math.abs(p); while(p>0){ //对于奇数次方,直接乘以之间的累计结果

2022-01-12 16:34:04 2714

原创 【往list中添加list】

遇到的问题:List<List> lists=new ArrayList<>();List list = new ArrayList<>();将list中的内容拷贝到lists中时,lists.add(list),lists里面还是空的,也就是说没把list中的内容拷贝进lists中。在网上查了之后,发现要这么写:lists.add(new ArrayList<>(list));...

2022-01-10 22:30:58 4379

原创 【力扣28】实现strStr,KMP实现在大串中匹配出小串

KMP算法的思路1、得到next数组,next数组记录小串中<每个字符前面的字符串>的公共前后缀的最长长度。index为当前下标,cn为【index-1位置的前缀的后一个字符】初始化:next[0]=-1;next[1]=0;cn=0;index=2;例如:index-1的next值时2,那么cn就在下标为2的位置上,cn=2判断str[index-1]与str[cn]的值·如果相等,next[index]=cn+1;cn++;index++;·如果不相等,且cn>0,cn

2022-01-08 19:37:29 846

原创 【力扣19】删除链表的倒数第 N 个结点

思路1、计算链表总长度len2、如果需要删除倒数第n个节点,需要寻找第len-n个节点,并将第len-n个节点的next设置为第len-n-2个节点代码/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } *

2022-01-07 13:04:11 373

原创 【力扣17】电话号码的字母组合

思路1、首先观察每个电话号码键上数字和字母的关系对于1-7键:字母=2*(‘数字’-‘2’)+47对于8-9键:字母=2*(‘数字’-‘2’)+482、接着就是回溯的思路,先循环变动最后一个位置上的值,接着循环变动倒数第二个位置上的值。。。。依次往下,直到第一个位置代码class Solution { /** 1.如果需要全局使用可以设置为类变量 2.回溯的思路,用于实现找所有可行解,前面的位置不动,先动后面的位置,直到找到所有解 */ private

2022-01-07 11:42:41 507

原创 力扣第五题最长回文子串Manacher实现

方法一 暴力解法+优化代码思路:1、找到字符串的所有子串2、判断每个子串是否是回文子串3、如果是,保留<子串,子串长度>注意:如果使用暴力解,这样会超出时间限制,所以这里有一个优化的点:因为我们要找最长的子串,所以每次记录当前找到的最长回文子串的长度,对于之后小于该长度的子串不予以判断,直接跳过,这样会节省很多时间。代码:class Solution { public static String longestPalindrome(String s) { //

2022-01-05 12:13:12 934

原创 树的子结构

一般涉及到树,都会用到递归,主要是递归函数的编写private boolean isSubTree(TreeNode root1, TreeNode root2) {//递归结束 条件1if(root2==null){return true;}//递归结束 条件2if(root1==null || root1.val!=root2.val){return false;}//这一步条件满足,递归下一步return isSubTree(root1.left,root2.left)&

2021-04-15 17:19:13 35

空空如也

空空如也

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

TA关注的人

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