算法练习
文章平均质量分 51
潇洒亦如我
这个作者很懒,什么都没留下…
展开
-
数据结构与算法-练习打卡day16(LRU 缓存)
数据结构与算法-练习打卡day16问题:解题:性能:问题:解题:分析:需要对最近使用的操作进行排序,需要判断缓存最大值,但是要注意若对一个值进行多次操作只能有一条记录;至少有一个链表用于存储对值的操作,方便去除队尾,有一个map对值进行操作,用于随机,LinkedHashMap是个不错的选择 class LRUCache { private int maxSize; private LinkedHashMap<Integer, Integer> hashMap; pub原创 2021-05-11 10:52:22 · 120 阅读 · 0 评论 -
数据结构与算法-练习打卡day15(二叉树找祖先)
数据结构与算法-练习打卡day14问题:解题:性能:问题:解题:分析:需要遍历二叉树,也不仅仅是遍历,需要判断自己的子是不是包含目标节点,判断自己和目标节点是不是相同,相同的问题,要一层一层重复判断,那么得用递归,递归的判断条件想全不容易,多试试吧/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode righ原创 2021-05-10 19:05:17 · 136 阅读 · 0 评论 -
数据结构与算法-练习打卡day14(旋转找最小)
数据结构与算法-练习打卡day14问题:解题:问题:解题:分析:寻找最小值的问题,无论旋转多少次,整体都是从小到大,但是最小值和最大值的交界却是递减的,所以就变成了找到递减位置class Solution { public int findMin(int[] nums) { if (nums.length < 2) { return nums[0]; } // 找到递减的,说明递减的最小 for (int i = 1; i < nums.length;原创 2021-04-22 20:01:46 · 102 阅读 · 0 评论 -
数据结构与算法-练习打卡day13(找峰值)
数据结构与算法-练习打卡day13问题:解题:问题:解题:分析:寻找峰值就是找到拐点,就是上升转变成下降的拐点,除此之外需要考虑开始和结束的边界,开始若是下降,说明第一个是峰值,若是最后是上升,说明最后一个是峰值class Solution { public int findPeakElement(int[] nums) { if (nums.length < 2) { return 0; } int before, after, bIndex; Boole原创 2021-04-22 18:45:38 · 146 阅读 · 0 评论 -
数据结构与算法-练习打卡day12(接雨水)
数据结构与算法-练习打卡day12问题:解题:性能:问题:解题:分析:多种思路吧,我的一定想法是判断波峰,然后获得波峰之间的水,但是需要考虑波峰之间的关系,比如中间都是小波峰,边缘都是大波峰,就比较尴尬;还有一种比较好理解的就是两个方向都计算一下,然后取双方重叠的部分如下图思来想去,还是想继续让判断波峰的程序可以使用,就是得判断边界是不是向内部递减的,这样边界也要算到波峰中,去掉中间的波峰就得判断中间部分的波峰是不是比两次的波峰小,这样的话,为什么不直接从两侧开始判断呢,就找到了双指针的方法原创 2021-04-21 15:31:07 · 110 阅读 · 0 评论 -
数据结构与算法-练习打卡day11(动物收容所)
数据结构与算法-练习打卡day11问题:解题:性能:问题:解题:分析:添加到队列不需要条件直接添加,获取的时候需要判断内容,最简单的就是获取迭代器,然后判断第一个,可以符合条件就移除,双向链表比较符合要求,直接用LinkedLIst class AnimalShelf { private LinkedList<int[]> list; public AnimalShelf() { list = new LinkedList<>(); } publ原创 2021-04-21 14:38:52 · 208 阅读 · 0 评论 -
数据结构与算法-练习打卡day10(链表快速排序)
数据结构与算法-练习打卡day10问题:解题:性能:问题:解题:分析:读到要求时间复杂度是n*log(n),那基本上就是快排或者归并排序了,快排需要索引,优先考虑归并进行解答;实际编码 的时候,还是得调试,一不小心就成了无底洞,最重要的就是终止条件,对长度1,2,3,4进行举例调试 class Solution { public ListNode sortList(ListNode head) { // 1.先判断特殊条件 if (null == head || null == h原创 2021-04-12 15:11:47 · 71 阅读 · 0 评论 -
数据结构与算法-练习打卡day9(汉诺塔)
数据结构与算法-练习打卡day9问题:解题:性能:问题:解题:分析:从最简单的开始分析,若是一个的时候为终止条件,若是2个的情况应该处理的情况,但是这个操作和汉诺塔真正的限定还是有出入,咱们没啥好想法class Solution { public void hanota(List<Integer> A, List<Integer> B, List<Integer> C) { if (A.size() == 1) { // 如果A还剩1个,判定最原创 2021-04-11 23:23:09 · 74 阅读 · 0 评论 -
数据结构与算法-练习打卡day8(滑动窗口)
数据结构与算法-练习打卡day8问题:解题:性能:问题:解题:分析:第一个区间要是找到最大值,之后值需要比较新增的值和最大值的比较,但是最大值不再新的区间内就需要重新比较class Solution { public int[] maxSlidingWindow(int[] nums, int k) { if (nums.length == 0) { return new int[0]; } int[] res = new int[nums.length - k + 1];原创 2021-03-30 18:16:43 · 750 阅读 · 0 评论 -
数据结构与算法-练习打卡day7(队列最大值)
数据结构与算法-练习打卡day7问题:解题:性能:问题:解题:分析:需要一个链表实现先进先出,用一个树来实现计数桶,这样时间复杂度都是O(1),不过这个执行时间和空间优化没想好class MaxQueue { /** * 链表 */ private LinkedList<Integer> list = new LinkedList<>(); /** * 计数桶 */ private TreeMap<Integer, Integer> tr原创 2021-03-30 16:00:18 · 105 阅读 · 0 评论 -
数据结构与算法-练习打卡day6(简单计算器)
数据结构与算法-练习打卡day6问题:解题:性能:问题:解题:分析:首先需要拆分指令和数字,指令有两个层级,先乘除再加减;需要先把乘除的两个数字计算出并替换为一个数字;两个思路,先把符号和数字,有序的表示出来,再跟进顺序遍历,先计算加减,遇到加减将相邻的数字合并成一个,可以用链表,不过两个层级需要遍历三遍;第二个思路就是一共就两个层级,索性就在或者去数字符号的时候就进行计算,遇到-就把之后的数字变成负数,遇到乘除就进行计算,然后最后求和,两次遍历解决,比较快,用数组应该更快class Soluti原创 2021-03-28 01:45:18 · 155 阅读 · 0 评论 -
数据结构与算法-练习打卡day5(每日温度)
数据结构与算法-练习打卡day5问题:解题:性能:问题:解题:分析:至少需要两层,最简单就是两层for循环,也可以引入单调栈,可以去掉一些不是单调的中间值,节省遍历个数class Solution { /** * public int[] dailyTemperatures(int[] temperatureArray) { * int[] diffArray = new int[temperatureArray.length]; * int x = temperat原创 2021-03-25 19:44:40 · 247 阅读 · 0 评论 -
数据结构与算法-练习打卡day4(翻转链表)
数据结构与算法-练习打卡day4问题:解题:性能:问题:解题:分析:第一个元素的next->null,之后每次将下一个挪在第一个之前,挪到临时node为null/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = va原创 2021-03-17 18:49:21 · 90 阅读 · 0 评论 -
数据结构与算法-练习打卡day3(数组加法)
数据结构与算法-练习打卡day2问题:解题:性能:问题:解题:分析:直接用字符串数组操作最快/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNod原创 2021-03-15 17:24:03 · 104 阅读 · 0 评论 -
数据结构与算法-练习打卡day2(字符串重排)
数据结构与算法-练习打卡day2问题:解题:性能:问题:解题:分析:直接用字符串数组操作最快class Solution { public String restoreString(String s, int[] indices) { char[] array = new char[indices.length]; for (int i = 0; i < indices.length; i++) { array[indices[i]] = s.charAt(i); }原创 2021-03-10 14:37:55 · 131 阅读 · 0 评论 -
数据结构与算法-练习打卡day1(字符串替换)
数据结构与算法-练习打卡day1问题:解题:性能:问题:解题:分析:直接用字符串数组操作最快,考虑转换的最大范围初始化最大返回数组class Solution { public static final char A1 = '%'; public static final char A2 = '2'; public static final char A3 = '0'; public String replaceSpaces(String S, int length) { int l原创 2021-03-09 15:21:40 · 116 阅读 · 0 评论