- 博客(31)
- 收藏
- 关注
原创 至少有k个重复的最长字符串-leetcode_395
找到给定字符串(由小写字符组成)中的最长子串 T , 要求 T 中的每一字符出现次数都不少于 k 。输出 T 的长度。s = “aaabb”, k = 3输出:3最长子串为 “aaa” ,其中 ‘a’ 重复了 3 次。解:这道题的主要思路是通过使用分而治之;算是一道字符串的经典操作题了,class Soultion{ public int longestSubstring(String s,int k){ int len=s.length(); if(len==0||len<
2020-07-29 09:59:56
290
原创 力扣33.搜索旋转排序数组
假设升序排序的数组在某个节点上进行了旋转,比如说[1,2,3,4,5,6]旋转之后变成了[4,5,6,1,2,3]搜索一个给定的目标值,如果数组中存在这个目标值,则返回该值的下标,否则的话返回-1;思路:题目要求使用O(logn)的时间复杂度,因此主要考虑二分法二分法的主要模板如下所示:int left=0,right=nums.length-1;while(left<=right){ int mid=(left+right)/2; //如果满足某个条件的话 就返回 if()
2020-07-18 21:37:48
209
转载 在安装npm的时候出现了找不到镜像的问题
害,这个错误卡了老半天,出去吃了个饭,回来再查的时候发现可以直接换掉镜像就可以,https://cnodejs.org/topic/4f9904f9407edba21468f31e
2020-07-15 19:20:01
626
转载 解决找不到vcrunntime140_1.dll而无法继续执行代码的原因
https://blog.youkuaiyun.com/weixin_42591308/article/details/100728021
2020-07-15 15:00:24
733
原创 力扣 208实现前缀树
所谓的前缀树:是一种树形结构,利用字符串的公共前缀来减少查询时间;最大限度地减少无所谓字符串的比较;它有3个性质:根节点不包括字符;除根节点外每一个节点都只包含一个字符,从根节点到某一个节点,路径上经过的字符连接起来为该节点对应的字符串,每个节点的所有子节点包含的字符都不相同;//实现一个前缀树,包含insert,search,startwith三个函数分析:主要考察堆前缀树的理解;例: Trie trie=new Trie();trie.insert(“apple”);trie.search(
2020-07-09 16:02:39
828
1
原创 剑指offer 49 丑数
我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。解:对于这道题的理解;这里的质因子指的是一个数的约数,并且是质数;把一个合数写成几个质因数的乘积的形式,即求质因数的过程叫做分解质因数;任何一个丑数都是由小于它的某一个丑数2,3,5,得到的,如何得到所有的丑数?现在假设由三个数组:分别是:A:{12,22,32,42,52,62…};B:{13,23,33,43,53,63…};C:{15,25,35,43,53,6*3…};所有丑
2020-07-09 10:19:29
91
原创 剑指offer 46:把数字翻译成字符串
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”,请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法;首先这道题的主要思路是动态规划的思路;设这个数字为x1,x2,x3,…xi-2,xi-1;根据这个顺序,当(i-2,i)这两位数所表示的数在[10,25]的时候,则当前的可翻译的数字种类数可以表示为dp[i-1]+dp[i-2];否则的话其翻译种类数就是dp[i-1];public int tran
2020-07-06 11:00:23
105
原创 剑指offer36 二叉搜索树与双向链表的转换
这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针;对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。head指向当前节点的最小值;//因为这个是一个二叉搜索树,所以采用类似于中序遍历的方式,先找到其左节点中的最小值,然后再找到根节点,最后再找到其右节点;Node pre=null,head=null;public Node treeToDoublyList(Node root){ if(root==null) return null;
2020-07-03 16:12:15
83
原创 leetcode 38字符串的排列
输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。//本质还是回溯的思想;这里设置了一个flag数组,用来标识字符是否被访问过;//有一点就是 将 set或者是List转化为数组,这里使用了 res.toArray(new String[0]); 这里就是使用了一个toArray()函数,其参数使用了 new String[0];表示要将其转化为string数组;Set<String> res=new HashSet<&g
2020-07-03 10:33:21
176
原创 leetcode35 复杂链表的复制
输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]//这道题的思路:1.首先在每一个结点之后复制一个相同值的新节点2.然后复制每一个结点的随机指针;3.最后将两个链表一分为二;public Node copyRandomList(Node head){ if(head==null) return null; //1.复制新的结点 Node cur=head; whi
2020-07-02 18:07:38
87
原创 leetcode 63 寻找数组中出现一半次数以上的数字
1.第一种思路:通过使用hashmap,存储对应的数字以及它出现的次数,最后遍历hashmap,返回其次数大于数组一半的那个数字2.第二种思路:使用摩尔投票法;选定数组中的第一个数组int num=arr[0];int count=0;for(int i=1;i<arr.length-1;i++){ if(arr[i]!=num)}{ //如果不相等的话就将其count --; count--; if(count<0){ num=arr[i]; count=
2020-07-02 09:50:35
131
原创 mysql中得group by 语句与where having语句
where语句是在group by 之前得,也就是先根据where语句筛选条件,然后再根据筛选后的结果按照group by 语句进行分组得到最后结果;而having 语句是肯定在group by之后的语句,用来表示在分组之后再按照having中的语句进行筛选;三,当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序是:1.执行where xx对全表数据做筛选,返回第1个结果集;2.针对第1个结果集使用group by分组,返回第2个结果集;
2020-06-17 17:16:14
188
原创 最长重复子串的长度
最长的重复子串的长度;import java.util.ArrayList;import java.util.Collection;import java.util.Collections;import java.util.Scanner;public class zuichang_chongfuzichuan { private static String result=""; public static void main(String[] args) { S
2020-05-19 18:30:30
576
原创 leetcode剑指offer20:表示数值的字符串
该题一开始的思路还是比较复杂的,参考了答案//设置了三个布尔变量,分别表示是否出现过数字,点e或者Epublic static boolean isValid(String s){ //首先考虑边界情况, if(s.length()==0||s==null){ return false;} //对于大部分字符串的操作都是首先将其转化为字符串组,java中有一个可以去除掉首尾字空格符的函数 trim()函数 char[] str=s.trim().toCharArray(); boolean
2020-05-15 10:55:20
188
原创 取得第k大元素Leetcode 215
1.最原始得暴力解法,可以使用堆排序的想法,建立一个小根堆或者是大根堆,先对其进行排序,然后取排序后数组中的第k大就是取nums.length-k,比如说所给的数组是[2,3,7,6,1],该数组排序后就是[1,2,3,6,7],如果要得到第二大的元素的话,就是6,其索引下标是3,就是nums.length-k=5-2=3;得到最后的结果;堆排序比较重要的过程就是堆调整的过程,比较父节点与孩子节点之间的大小,其空间复杂度是O(n),时间复杂度是O(nlogn);public class Heapsort
2020-05-14 23:23:41
133
原创 Leetcode 148
关于链表排序的思想1。题目要求使用的时间复杂度为O(nlogn)2.要求使用的空间复杂度为O(n);首先根据时间复杂度很容易想到的一个方法就是使用归并排序;归并排序的思想之前在排序算法的总结中有提到:主要思想就是分而治之的思想,将两两排序后的结果进行合并得到的结果,其中使用了递归,因此其空间复杂度为O(logn),但是由于链表的话,可以使用链表的插入删除因此其空间复杂度可以降低。可以从底向上,使用常数级别的空间;在这里插入代码片...
2020-05-10 11:16:07
134
原创 Leetcode 两数之和,三数之和,四数之和
两数之和的思想比较简单啦 就是 使用一个map存储其值,然后将其下标返回即可;三数之和 ,四数之和的思想比较类似,就是使用双指针的思想:三数之和的代码如下所示:四数之和的代码如下:有一些优化四数之和是在三数之和的基础上增加了一层循环,class Solution { public List<List<Integer>> fourSum(int[] nu...
2020-05-04 22:43:27
125
原创 各种排序算法总结
排序算法的整理:排序算法的评价标准主要是从两方面:1.时间复杂度2.空间复杂度插入排序:每一趟将一个待排序的记录,按其关键字的大小插入到已经排序好一组记录的适当位置,直到所有待排序记录全部插入为止;插入排序又可以分为三种:直接插入排序,折半插入排序以及希尔排序。下面依次介绍这三种排序:直接插入排序:其时间复杂度为O(n2),空间复杂度为O(1);比较适合于链式结构,无需移动位置,只需...
2020-05-03 15:42:09
141
原创 Leetcode 8 将字符串转化为整数
//这里依然涉及到了字符串的操作;还是不是很熟悉//在这里参考了答案,首先先将字符串转化为字符串数组//1.第一步先删掉前导空格符;相当于从第一个非空格的字符开始//判断这个字符是负号,正号,还是数字,还是其他非法字符,如果是非法字符的话直接返回0;/这里设置了一个判断是负数还是正数的标志;//接下来就判断剩下的字符中是数字的字符在这个过程中有可能会出现溢出的情况,因为题目所给的是in...
2020-04-27 17:56:10
86
原创 Leetcode210_课程表II
这道题仍然是利用了拓扑排序的思想,同leetcode207//写代码的过程中发现对队列的操作还不是很熟悉先总结一下队列的操作:add(e);offer(e) //都是向队列中添加元素;所不同的是第一个方法添加失败的时候(队列满的时候)会抛出异常第二个方法添加失败的时候会返回false;remove(),poll() // 都是向队列中删除元素;第二个方法还可以返回返回队首元素;所不...
2020-04-27 12:18:45
121
原创 拓扑排序 leetcode207
拓扑排序的思想:1.选择入度为0的顶点,将其输出2.将该顶点所有的边全部删除3.如此重复上述步骤,如果最后输出的顶点的个数等于图中顶点的个数则该图中没有环,否则该图中有环;```javapublic class Solution { public boolean canFinish(int numCourses, int[][] prerequisites)...
2020-04-25 11:05:18
143
原创 红黑树与二叉平衡树的区别
红黑树的性质:1.节点是红色或黑色。2.根节点是黑色。3.每个叶子节点都是黑色的空节点(NIL节点)。4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点红黑树与二叉平衡树的区别:1.红黑树放弃了追求完全平衡,追求大致平衡,在与平衡二叉树的时间复杂度相差不大的情况下,保证每次插入最多只...
2020-04-12 10:36:19
133
原创 Scanner中的nextLine()方法和next()方法
最近在做笔试题,每次都被这个输入输出搞得我真是奇奇怪怪所以这里还是记录一下:Scanner sc=new Scanner(System.in);sc.next(),sc.nextInt(),等之类的方法和sc.nextLine()方法最好不要同时使用!如果避免不了必须使用的话则需要在sc.nextInt()方法之后加上sc.nextLint()一句话,再进行sc.nextLine()方...
2020-04-11 23:53:17
284
原创 集合框架
Arrays存储对象时具有一些弊端;数组:一旦初始化之后,其长度就确定了,不可修改;同时需要指定其元素类型;数组中提供的方法非常有限,删除插入数据非常不便,同时效率不高;获取数组中实际元素的个数的需求,数据没有现成的属性方法可使用;有序可重复,对于无序的需求,数组不能满足其要求;集合对多个对象存储;可以动态地把对象方法到集合中可以分为和map,collection保存了单列数据,collect...
2020-04-01 23:08:00
84
原创 Java中的比较器
comparable接口的使用;1.像string,包装类等实现了Comparable接口,重写了Compareto()方法,给出了比较两个对象大小的方式,它们进行从小到大的排序方式;2.重写compareTo()的方法:如果自定义类需要排序,我们让自定义类实现comparable接口,给出了两个比较对象的大小,一旦指定能够保证comparable接口实现类的对象在任何位置都可以比较大小;3...
2020-03-31 11:36:08
119
原创 Java中String类
String类 final用来修饰,不可被继承;实现了 Serializable接口,(可序列化的接口):表示字符串支持序列化;实现了comparable接口,可比较大小,定义了final char[] value,用于存储字符串数据;string代表不可变的字符序列;字符串常量池中不会存储内容相同的字符串;通过字面量的方式存储在常量池中,区别于(new);在现有的字符串之后拼接新的字符串,不...
2020-03-31 09:41:38
109
原创 读取csv文件
在用python处理csv文件的时候,如果所给的csv文件没有头部文件的话,可以设置为import pandas as pddf=pd.read_csv("xxxx.csv",header=None);要读取该文件中的某一列的话df.iloc[:,0]//表示读取该文件中的第一列数据df.iloc[0,:]//表示读取该文件的第一行数据;还有一个需要注意的点是如果自己创建csv...
2020-03-28 15:06:35
175
原创 Java多线程
**多线程的优点:**提高应用程序的响应,对图形化界面更有意义;可增强用户体验;提高cpu的利用率;改善程序结构,将进程分为多个线程,独立运行;创建多线程的方式:1.创建一个继承于thread的子类,重写thread类的run()方法;将此线程执行的操作声明在run()方法中创建thread类的子类的对象,通过此对象调用start()方法(该方法启动当前线程,调用当前线程的run()方法;)...
2020-03-28 10:16:15
72
原创 java异常处理
java异常包括:1.Error:java虚拟机无法解决的过程,比如栈溢出,不编写专门的代码解决;OOM,out of memory2.Exception:其他因变成错误的外部因素导致的一般性问题,可以针对性的代码进行处理,异常的体系结构:java.lang.Error,java.lang.Exception编译时异常(checked):IOException,FileNotExceptio...
2020-03-26 23:09:02
72
原创 java小记
抽象类:就是父类不能再new新的对象;不能实例化类,abstract 可以修饰类,也可以修饰方法;抽象类中一定有构造器,便于子类实例化的时候调用;开发中都会提供抽象类的子类,让子类对像实例化;abstract修饰方法:无方法体,public abstract voiddfs();只有方法的声明,无方法体;包含抽象方法的类一定是抽象类;反之抽象类中不一定都是抽象方法或者可以没有抽象方法;若子类重...
2020-03-26 17:00:38
103
原创 java 中的switch -case语句
switch(常量表达式)case1 常量:执行语句1;break;(可选语句)方法区存放:常量池和静态域,类加载信息;栈中存放局部变量,堆中存放的是new 出来的结构;属性(成员变量)和局部变量的区别:1.类中声名的位置不同;局部变量声明在方法内,方法形参,代码块内,构造器形参,构造器内部变量,2.权限修饰符:属性:可以在声明变量时指明其权限,使用权限修饰符,3.默认初始化值...
2020-03-23 17:25:25
484
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人