随笔分类 - 每日AC
包括leetcode以及java各类问题的探索
摘要:这道题要求的是单次遍历,所以暴力肯定是不行了,我们可以尝试使用双指针,第一个指针P1从head开始,先走n步,再把head结点给第二个指针p2,此时两个指针相差n步,中间相差n-1个结点,同时移动两个结点,当P1到尾结点的next结点时,即P1==null时,p2即到达倒数第n个结点。因为要删除倒数
阅读全文
摘要:这是道hard题,在处理时需要用到优先队列(PriorityQueue),即我们将每个链表的头结点放入最小堆中,每次取出最小的结点插入最终返回的链表。 当优先队列中不存在结点时,我们就得到了需要的链表。 public ListNode mergeKLists(ListNode[] lists) {
阅读全文
摘要:记录一下师姐的笔试: 题目描述: 给定一个字符串,输出对应的数字,转换规则: 1.26个英文字母字符(不区分大小写,即a=A), 次序分别对应1-26个数字,即a=1,b=2....z=26 2.剔除非数字和非字母的字符。 3.对字母和数字分别按照字典序和大小进行升序排列,且在所有字母均在数字前。
阅读全文
摘要:师姐的测试岗笔试题,拿来记录一下: 题目描述: 一个整数如果由相同数字构成,可以称为完美整数,比如说1,11,333就是完美整数,12,19,101就不是完美整数。 现在想知道,在区间[x,y]中有多少个数是完美整数。 输入描述: 第一行t[1,1000],表示接下来有t个样例: 每个样例有一行,是
阅读全文
摘要:秋招已经开始了,之前师姐去面了字节的测试开发岗,记录一下她笔试的编程题: 题目描述: 某特种部队采用了一套性格密码机制来筛选执行特定任务的最佳士兵,该机制规则如下: 1.每个人的性格可以从M个维度来描述,每个维度分为ABCDE5种类型; 2.同一维度内字母距离越近,表示该维度性格类型差异越小,也越匹
阅读全文
摘要:这道题算是股票问题的变体之一,主要在于不限制交易次数而存在冷冻期,所以我们需要对我们的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[
阅读全文
摘要:比较简单常见的股票买卖问题,不限制交易的次数而去得最大利润。 思路一: 其实很好理解,想获得最大利润,我们可以遍历数组,直接把所有股票的上升阶段都加起来即可。 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深度遍历或者暴力递归也可以。 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
阅读全文
摘要:相对来说属于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;
阅读全文
摘要:题目描述: 思路: 这道题算是很典型的动态规划问题了,不多赘述,自底向上,dp数据求解。
阅读全文
摘要:思路与算法 由于题目需要我们求出「访问所有节点的最短路径的长度」,并且图中每一条边的长度均为 11,因此我们可以考虑使用广度优先搜索的方法求出最短路径。 在常规的广度优先搜索中,我们会在队列中存储节点的编号。对于本题而言,最短路径的前提是「访问了所有节点」,因此除了记录节点的编号以外,我们还需要记录
阅读全文

浙公网安备 33010602011771号