08 2021 档案
摘要:今天翻阅《Labuladuo的算法小抄》时发现在使用优先队列的PriorityQueue解决一道hard题时(leetCode 23),出现了如下代码: ListNode mergeKLists(ListNode[] lists) { if (lists.length == 0) return nu
阅读全文
摘要:这是道hard题,在处理时需要用到优先队列(PriorityQueue),即我们将每个链表的头结点放入最小堆中,每次取出最小的结点插入最终返回的链表。 当优先队列中不存在结点时,我们就得到了需要的链表。 public ListNode mergeKLists(ListNode[] lists) {
阅读全文
摘要:1.transient关键字 其实这个关键字的作用很好理解,就是简单的一句话:将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会被序列化。 2.transient的底层原理 Java的serialization提供了一个非常棒的存储对象状态的机制,说白了serial
阅读全文
摘要:记录一下师姐的笔试: 题目描述: 给定一个字符串,输出对应的数字,转换规则: 1.26个英文字母字符(不区分大小写,即a=A), 次序分别对应1-26个数字,即a=1,b=2....z=26 2.剔除非数字和非字母的字符。 3.对字母和数字分别按照字典序和大小进行升序排列,且在所有字母均在数字前。
阅读全文
摘要:虚拟头结点是在处理链表操作时的技巧,主要功能在于能使操作的链表不在需要关心新建头结点的初始状态或空指针的情况,在逻辑代码中能将所有结点一视同仁。 看一道题就很清楚了: 很简单的题,解法为: ListNode mergeTwoLists(ListNode l1, ListNode l2) { // 虚
阅读全文
摘要:师姐的测试岗笔试题,拿来记录一下: 题目描述: 一个整数如果由相同数字构成,可以称为完美整数,比如说1,11,333就是完美整数,12,19,101就不是完美整数。 现在想知道,在区间[x,y]中有多少个数是完美整数。 输入描述: 第一行t[1,1000],表示接下来有t个样例: 每个样例有一行,是
阅读全文
摘要:秋招已经开始了,之前师姐去面了字节的测试开发岗,记录一下她笔试的编程题: 题目描述: 某特种部队采用了一套性格密码机制来筛选执行特定任务的最佳士兵,该机制规则如下: 1.每个人的性格可以从M个维度来描述,每个维度分为ABCDE5种类型; 2.同一维度内字母距离越近,表示该维度性格类型差异越小,也越匹
阅读全文
摘要:在写toString的时候发现了一个小问题。 char [] chars={'a','A','c','5','8'}; int [] ints={1,2,3,4}; System.out.print(chars.toString()); //无法输出数组中的值 System.out.print(in
阅读全文
摘要:split方法转化字符串为数组: String[] strPicArr = map.get("hw_pic").toString().split("*"); 报错。 因为+、*、|、\等符号在正则表达示中有相应的不同意义,所以在使用时要进行转义处理。这里同样可以用 String[] strPicAr
阅读全文
摘要:这道题算是股票问题的变体之一,主要在于不限制交易次数而存在冷冻期,所以我们需要对我们的dp数组进行改变,第一维是指第几天,第二维是指是否持有股票,在这里因为不限制交易次数k,所以并未涉及第三维度。 同时,在这里我的状态转移方程为: 第i天未持有股票的可能性有:1.第i-1天未持有股票 2.第i-1天
阅读全文
摘要:这是一道hard题,和之前的买股票三都是同一类型,无非是限制的k为2或不知到k的值,但解决思路都是一样,三重dp,第一维记录第几天,第二位记录还最多能交易的次数,第三维记录手中是否存有股票,具体见算法思想中的股票问题。 public int maxProfit(int k, int[] prices
阅读全文
摘要:这是道hard题,但只要掌握了股票问题动态规划的大致思路,很容易就能写出初始条件,以及三重dp的状态转移方程,具体可见算法思想中的股票问题。https://www.cnblogs.com/xxsdbk/p/15174494.html 最后贴个代码: public int maxProfit(int[
阅读全文
摘要:股票问题一直是动态规划常见场景之一,其中的奇淫技巧也不在少数,而本文旨在阐述股票买卖问题的动态规划通用解法,虽然在运行速率上比针对题目的专门题解,但几乎能AC所有的股票买卖问题。 首先,股票买卖涉及到的题目有很多,但框架类似,基本都是给定一个数组里面包含着每天的股票价格,给定一个参数K,限制最多的交
阅读全文
摘要:比较简单常见的股票买卖问题,不限制交易的次数而去得最大利润。 思路一: 其实很好理解,想获得最大利润,我们可以遍历数组,直接把所有股票的上升阶段都加起来即可。 public int maxProfit(int[] prices) { int maxProfit=0; for(int i=0;i<pr
阅读全文
摘要:用简单的暴力法或者一次遍历,用minprice和maxprofit记录最小买入价格以及最大收益即可。 public int maxProfit(int prices[]) { int minprice = Integer.MAX_VALUE; int maxprofit = 0; for (int
阅读全文
摘要:说道回溯算法其实也就是我们常说的DFS深度遍历算法,而一个回溯的过程,其实也就是一个决策树遍历的过程。 代码大致框架为: result = [] def backtrack(路径, 选择列表): if 满足结束条件: result.add(路径) return for 选择 in 选择列表: 做选择
阅读全文
摘要:很正常的DFS深度遍历或者暴力递归也可以。 class Solution { List<List<Integer>> res=new LinkedList<>(); public List<List<Integer>> permute(int[] nums) { LinkedList<Integer
阅读全文
摘要:easy题不多赘述,直接暴力一遍即可。 public boolean checkRecord(String s) { int asum=0; int index=0; for(int i=0;i<s.length();i++) { if(s.charAt(i)=='L') { if(++index>
阅读全文
摘要:滑动窗口通用解法。不赘述。贴代码: public int lengthOfLongestSubstring(String s) { Map<Character,Integer> window=new HashMap<>(); int left=0,right=0; int length=0; whi
阅读全文
摘要:滑动窗口的经典用法,左右指针维持窗口,当找到合适子串就返回。 public boolean checkInclusion(String s1, String s2) { Map<Character,Integer> need=new HashMap<>(); Map<Character,Intege
阅读全文
摘要:滑动窗口算法的应用,通过两个while循环分别控制右指针和收缩条件 public List<Integer> findAnagrams(String s, String p) { List<Integer> res=new ArrayList<>(); Map<Character,Integer>
阅读全文
摘要:滑动窗口的经典范例,具体解法已在算法思想的滑动窗口中阐述,贴个解答代码。 public String minWindow(String s, String t) { Map<Character,Integer> need=new HashMap<>(); //子串窗口 Map<Character,I
阅读全文
摘要:关于双指针的方法,可能大家并不陌生,而滑动窗口算法,其实算是双指针的一种实现方式,主要用于解决子串问题。并且在leetCode上起码有10道以上的滑动窗口应用题目,难度均在middle和hard。因此,我本文也致力于阐述自己的想法,供大家互相学习。 首先滑动窗口算法,顾名思义,就是要维护一个窗口,然
阅读全文
摘要:相对来说属于middle中的easy了,五分钟ac,暴力,双指针等都可以,暴力的话因为只要求三个数组,所以只比较后一个和前一个和最初的d即可,反而速度是最快的。 再贴个官方的解法,很巧妙,将暴力的复杂度降到了O(n) 链接:https://leetcode-cn.com/problems/arith
阅读全文
摘要:个人感觉做这道题如果没有之前做过一些其他丑数题的经历还是比较吃力的,贴个官方解法。 class Solution { public int nthSuperUglyNumber(int n, int[] primes) { int[] dp = new int[n + 1]; dp[1] = 1;
阅读全文
摘要:先上结论:在我们常用的类中equals被重写后,作用就是为了比较对象的内容,==是比较对象的内存地址。但并不能说所有的equals方法就是比较对象的内容。 Java 中的==: 1、对于对象引用类型:“==”比较的是对象的内存地址。 比如说: String s1 = "Hello"; String
阅读全文
摘要:题目描述: 思路: 这道题算是很典型的动态规划问题了,不多赘述,自底向上,dp数据求解。
阅读全文
摘要:思路与算法 由于题目需要我们求出「访问所有节点的最短路径的长度」,并且图中每一条边的长度均为 11,因此我们可以考虑使用广度优先搜索的方法求出最短路径。 在常规的广度优先搜索中,我们会在队列中存储节点的编号。对于本题而言,最短路径的前提是「访问了所有节点」,因此除了记录节点的编号以外,我们还需要记录
阅读全文
摘要:这道题最初我的想法是遍历+BFS但时间超了,所以在这里给一个官方的解答: 深度优先搜索 + 三色标记法根据题意,若起始节点位于一个环内,或者能到达一个环,则该节点不是安全的。否则,该节点是安全的。 我们可以使用深度优先搜索来找环,并在深度优先搜索时,用三种颜色对节点进行标记,标记的规则如下: 白色(
阅读全文
摘要:题目描述: 平明伞兵解法: 既然要求满足三角形要求的三边,简单来说,就是最短两边之和大于第三边,所以,第一步Arrays.sort()。先排序,然后直接伞兵暴力法,三重循环。当然最后肯定是能跑出来的,但是复杂度之大。 思考后的解法: 其实在写暴力的时候,就应该心理有数,我们其实做了许多大量的重复工作
阅读全文
摘要:平民解法: 既然是找最小数组,那就得到一个排序好的数组,然后直接和初试数组比对,用一个left,right分别记录从最初开始不同,到最后不同的小标,最后左右做差再加一,就能得到长度。 其他参考解法: 链接:https://leetcode-cn.com/problems/shortest-unsor
阅读全文

浙公网安备 33010602011771号