算法问题合集
算法问题合集二分只要有排他性,就能二分,可以确保一半肯定有答案,直接砍一,不一定要有序
问题1:局部最小值题目:无需数组,值随机,任意两个相邻的数不相等,找到一个局部最小值,只要一个就行。
局部最小的定义:两个边界,0位置的数比1位置的数小,N-1位置的数比N-2位置的数小就叫局部最小值,如果是中间的数,就要比相邻左右两个数小就叫局部最小值
解题思路:一个数组从0到N-1,先单独看0位置和N-1的位置,如果成功返回,如果都失败,说明0到1是下降,N-1到N-2也是下降,中间肯定有局部最小,这时候找中间位置,分情况如果中间比左边小,又比右边小,直接返回,如果只比左边小,直接砍右边,再继续二分,总会找到的。
注意:重要的是学会思想!!!!
162. 寻找峰值 - 力扣(LeetCode)
下面这个是力扣的答案
1234567891011121314151617181920212223class Solution { public int findPeakElement(int[] nums) { if (nums == null || nums.le ...
Maven
Maven实战一、Maven介绍1.1 现存问题jar包问题
jar包需要在本地保存,而且在使用的时候需要将jar复制到项目中,再build才可以生效。
jar包的体量不小,一个项目中可能需要上百的jar的支持,这样一个项目就太大了。
如果jar包的版本需要升级,需要重新去搜集新版本的jar包,重新去build,时间成本太高了。
做一些功能时,可能需要因为几个,甚至十几个jar包,才能完成一个功能,都需要自己维护,甚至记住。
项目结构的问题
之前开发工具很多,有Eclipse,MyEclipse,IDEA,VSCode等等……不同的开发工具的项目的结构会有一些不同,多人协同开发时,就会造成冲突,甚至还需要统一开发工具。
整体项目的生命流程
整个项目从立项开发,到最后的发布上线到生产环境,没用一套统一的流程开控制。
1.2 MavenMaven可以帮助咱们更好的去管理jar包,只需要指定好jar的一些基本的标识,就可以让jar包支持咱们的项目。而且Maven可以帮助咱们导入一个jar包后,自动将和他绑定好的其他jar包引入。
Maven可以提供一个统一的项目结构。
Mave ...
常用注解
常用注解Mybatis@Param在Mybatis代理模式的时候,用于传递各种参数的时候,给参数起别名
例子:
接口:
123456public interface EmpMapper { List<Emp> findByDeptnoAndSal(@Param("deptno") int deptno,@Param("sal") double sal); List<Emp> findByDeptnoAndSal4(@Param("empa") Emp empa,@Param("empb") Emp empb);}
mapper映射文件:
12345678910111213141516171819202122232425262728293031<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-/ ...
Servlet进阶
Servlet进阶内容概述
Cookie和Session的引入Cookie和Session技术的目的:为了解决http协议是无状态的。http协议无状态的意思是,浏览器发起请求(请求中一般是需要携带数据的),服务器接收到请求后调用相关的后端代码去处理该请求,处理完后会响应浏览器。 本次请求与响应结束后,相关的请求与响应数据就会销毁。
如果浏览器又发送了请求,而且本次请求需要用到上次请求传递过的数据,那么本次请求又要重新带上上次请求传递的数据。这样效率不高,而且用户体验度也差!
如何记住这些想要记住的信息呢?使用Cookie技术或者Session技术。
通过一个生活案例类比,来大致了解Cookie和Session的特点,后面再详细学习。
Cookie对象Cookie的引入问题:
为了解决http协议是无状态的。
http协议无状态的意思是,浏览器发起请求(请求中一般是需要携带数据的),服务器接收到请求后调用相关的后端代码去处理该请求,处理完后会响应浏览器。 本次请求与响应结束后,相关的请求与响应数据就会销毁。
如果浏览器又发送了请求,而且本次请求需要用到上 ...
Servlet入门
Servlet入门内容概述
JavaEE(Java Enterprise Edition),Java企业版,是一个用于企业级web开发(不需要使用控制台)平台。最早由Sun公司定制并发布,后由Oracle负责维护。
JavaEE平台规范了在开发企业级web应用中的技术标准。
在JavaEE平台共包含了13个技术规范(随着JavaEE版本的变化所包含的技术点的数量会有增多)。它们分别是:JDBC、JNDI、EJB、RMI、Servlet、JSP、XML、JMS、Java IDL、JPA、JTA、JavaMail和JAF。
浏览器和服务器的交互模式
客户端
浏览器
服务端
服务器(高性能的计算机相对于普通的PC来说,服务器在稳定性、安全性、性能等方面有更高的要求)
请求
客户端发送数据给服务端的过程
响应
服务端返回数据给客户端的过程
HTTP协议
客户端请求和响应的标准协议
HTTP协议 HTTP 协议(Hypertext Transfer Protocol, 超文本传输协议),是一个客户端请求和响应的标准协议,这个协议详细 ...
JSP
JSP主要内容
JSPJSP的基础语法JSP的引入和原理 JSP:Java Server Page SUN 公司提供的动态网页编程技术,是 Java Web 服务器端的动态资源。
它相比 html 而言,html是静态页面,只能为用户提供静态数据,而 Jsp 技术允许在页面中嵌套 java 代码,为用户提供动态数据(比如可以从服务器中获取数据库中数据到jsp中去)。我们不可能所有数据都写死在页面上,所以在这里要学习jsp动态网页技术。
相对servlet而言,servlet也确实可以向页面输出html标签,比如:
但是如果想要自行用代码对数据进行排版,太麻烦了啊!此时就需要jsp,jsp 除了可以用 java 代码产生动态数据的同时,也很容易对数据进行排版,因为在jsp中可以编写html代码的。
所以:
(1)不管是 JSP 还是 Servlet,虽然都可以用于开发动态 web 资源,但由于这 2 门技术各自的特点,在长期的软件实践中,人们逐渐把 servlet 作为 web 应用中的控制器组件来使用(后台代码), ...
队列和栈
队列和栈先入先出的数据结构在 FIFO 数据结构中,将首先处理添加到队列中的第一个元素。
如上图所示,队列是典型的 FIFO 数据结构。插入(insert)操作也称作入队(enqueue),新元素始终被添加在队列的末尾。 删除(delete)操作也被称为出队(dequeue)。 你只能移除第一个元素。
队列 - 实现为了实现队列,我们可以使用动态数组和指向队列头部的索引。
如上所述,队列应支持两种操作:入队和出队。2*入队会向队列追加一个新元素,而出队会删除第一个元素。 所以我们需要一个索引来指出起点。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980// 定义一个队列类 MyQueueclass MyQueue { // 用于存储队列中的元素 private List<Integer> data; ...
链表
链表单链表单链表中的每个结点不仅包含值,还包含链接到下一个结点的引用字段。通过这种方式,单链表将所有结点按顺序组织起来。
下面是一个单链表的例子:
蓝色箭头显示单个链接列表中的结点是如何组合在一起的。
结点结构
以下是单链表中结点的典型定义:
12345678// Definition for singly-linked list.public class SinglyListNode { int val; SinglyListNode next; SinglyListNode(int x) { val = x; }}
操作与数组不同,我们无法在常量时间内访问单链表中的随机元素。 如果我们想要获得第 i 个元素,我们必须从头结点逐个遍历。 我们按索引来访问元素平均要花费 O(N) 时间,其中 N 是链表的长度。
例如,在上面的示例中,头结点是 23。访问第 3 个结点的唯一方法是使用头结点中的“next”字段到达第 2 个结点(结点 6); 然后使用结点 6 的“next”字段,我们能够访问第 3 个结 ...
java8新特性
java8新特性Lambda表达式Lambda是一个匿名函数。
直接给例子。
12345public void test1(){ Runnable r1 = () -> System.out.println(111); Comparator<Integer> com = (o1,o2) -> Integer.compare(o1,o2); Comparator<Integer> com2 = Integer :: compare;}
但是一开始看不懂下面会详细讲解一下
举例 (o1,o2) -> Integer.compare(o1,o2);
格式:
这个箭头 -> 称为箭头操作符
箭头的左边是形参列表(其实就是接口中的抽象方法的 形参列表)
箭头的右边:Lambda体(其实就是重写的抽象方法的方法体)
Lambda表达式本质:作为接口的实例
使用(分为6种情况)
12345678910111213141516171819202122232425262728293031323334353637 ...
数组和字符串(算法)
数组和字符串(算法)数组和列表、集合之间有什么不同?集合:一个比较抽象的概念,集合里元素类型不一定相同,集合里的元素没有顺序。
列表:没有索引,有顺序,类型没有限制,地址可以相邻也可以不相邻。
数组:有索引,有顺序,类型相同,地址相同
数组中的查询按位置查询。时间复杂度:O(1)。索引+偏移量(下标)按值查询。时间复杂度:O(N)。计算机不知道个位置处的值信息,需要一一查询判断。数组添加元素时间复杂度:O(n)删除元素:时间复杂度:O(n)
处理数组常用APIArrays类:
1234567891011121314151617181920212223//Arrays.toString(数组)方法。方法作用:快速输出数组内容。//Arrays.sort(数组)。方法运用:给数组排序,默认升序//Arrays.sort(数组名,起始下标,排序个数)。对字符串进行排序时,是对每一个字符比较,而不是简单的比较长度//Arrays.equals()方法。方法作用:比较两个数组内容是否相等//Arrays.equals()是比较数组内容,而a.equals(b) 这样的方法是比较地址值//Arra ...