算法
啊王佳敏
这个作者很懒,什么都没留下…
展开
-
用两个栈实现队列2021/06/21
描述 用两个栈来实现一个队列,分别完成在队列尾部插入整数(push)和在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。 示例 输入:["PSH1","PSH2","POP","POP"] 返回:1,2 解析: "PSH1":代表将1插入队列尾部 "PSH2":代表将2插入队列尾部 "POP“:代表删除一个元素,先进先出=>返回1 "POP“:代表删除一个元素,先进先出=>返回2 输入:["PSH1","PSH2原创 2021-06-21 20:58:03 · 129 阅读 · 0 评论 -
判断链表中是否有环2021/06/20
描述 判断给定的链表中是否有环。如果有环则返回true,否则返回false。 你能给出空间复杂度的解法么? 输入分为2部分,第一部分为链表,第二部分代表是否有环,然后回组成head头结点传入到函数里面。-1代表无环,其他的数字代表有环,这些参数解释仅仅是为了方便读者自测调试 ...原创 2021-06-20 15:51:29 · 75 阅读 · 0 评论 -
设计LRU缓存结构2021/06/18
描述 设计LRU缓存结构,该结构在构造时确定大小,假设大小为K,并有如下两个功能 set(key, value):将记录(key, value)插入该结构 get(key):返回key对应的value值 [要求] set和get方法的时间复杂度为O(1) 某个key的set或get操作一旦发生,认为这个key的记录成了最常使用的。 当缓存的大小超过K时,移除最不经常使用的记录,即set或get最久远的。 若opt=1,接下来两个整数x, y,表示set(x, y) 若opt=2,接下来一个整数x原创 2021-06-18 17:05:15 · 90 阅读 · 0 评论 -
二分查找2021/06/03
描述 请实现有重复数字的升序数组的二分查找给定一个 元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的第一个出现的target,如果目标值存在返回下标,否则返回 -1。 示例 示例1 输入:[1,2,4,4,5],4。 返回值:2。 说明:从左到右,查找到第1个为4的,下标为2,返回2。 示例2 输入:[1,2,4,4,5],3 返回值:-1 示例3 输入:[1,1,1,1,1],1 返回值:0 思路 运用二分查找的方法,找到后在往左边去找,循环原创 2021-06-03 11:48:45 · 77 阅读 · 0 评论 -
斐波那契数列2021/06/02
描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。 n\leq 39n≤39。 示例 输入:4 返回值:3 思路 我们都知道斐波那契数列是这样的一组数据,0、1、1、2、3、5、8、13、21、34。除第一个和第二个外,其余的都是前两个数字之和,所以,我们只需要知道前两个的数据就好了,第一个和第二个单独进行处理,我用的while,大家可以用for循环。 代码 package feifunaqie; public class Solu原创 2021-06-02 11:11:19 · 436 阅读 · 0 评论 -
括号序列(有效括号)2021/6/1
描述 给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列 括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。原创 2021-06-01 10:54:42 · 195 阅读 · 0 评论 -
二进制求和2021/6/1
描述 二进制求和 示例 输入 字符串a=“1111” 字符串b=“1011” 输出 100110 思路 第一思路就是转化为int,然后按位进行求和,行不通。因为数很大怎么办,超过了int存储范围。(而且我也没做出来) 所以转换为char,看这位是0还是1,然后进行相加,取一个变量存取进位,%2该位的结果,/2是进位的值。 代码 public class Solution { public static StringBuilder addBinary(String a, String b){原创 2021-06-01 10:25:25 · 105 阅读 · 0 评论 -
2021/05/31最长无重复子数组
描述 给定一个数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。 子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组。 示例 示例1 输入:[2,3,4,5] 返回值:4 说明:[2,3,4,5]是最长子数组 示例2 输入:[2,2,3,4,3] 返回值:3 说明:[2,3,4]是最长子数组 示例3 输入:[9] 返回值:1 示例4 输入:[1,2,3,1,2,3,2,2] 返回值:3 说明:最长原创 2021-05-31 09:56:29 · 144 阅读 · 0 评论 -
两数之和2021/05/30
描述 给出一个整数数组,请在数组中找出两个加起来等于目标值的数, 你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1 小于index2.。注意:下标是从1开始的 假设给出的数组中只存在唯一解 例如: 给出的数组为 {20, 70, 110, 150},目标值为90 输出 index1=1, index2=2 示例 输入:[3,2,4],6 返回值: [2,3] 说明: 因为 2+4=6 ,而 2的下标为2 , 4的下标为3 ,又因为 下标2 <原创 2021-05-30 22:15:34 · 215 阅读 · 0 评论 -
最小的K个数2021/5/29
描述 给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组。 示例 输入: [4,5,1,6,2,7,3,8],4 返回值: [1,2,3,4] 思路: 使用最大堆,构建容量为K的最大堆 遍历数组,每次比较数组中的元素与堆顶元素大小,堆堆顶小入堆即可 引入 什么是大根堆,小根堆? 构建大根堆 // 构建大顶堆 PriorityQueue<Integer&原创 2021-05-30 00:09:51 · 81 阅读 · 0 评论 -
反转链表Java
打卡算法 反转算法 2021/5/28 描述 输入一个链表,反转链表后,输出新链表的表头。 示例1 输入: {1,2,3} 返回值: {3,2,1} 解题思路 判断是否为null或者next为null,是return,否进去2。 设置当前指针为头指针,前指针pre和后指针next为null。 后指针next指向下一位。 当前指针指向前指针。 前指针指向当前指针。 当前指针指向next。 解题代码 public static ListNode ReverseList(ListNode nod..原创 2021-05-28 11:00:51 · 108 阅读 · 0 评论