
leetcode刷题
用于记录在leetcode刷题中遇到的各种问题,分享讨论解题方法
西瓜程序设计
在职全栈开发工程师
展开
-
微软实习生面试的2道算法题目——20220119
微软实习生面试的2道算法题目题目一题目一有点类似于leetcode中的旋转数组那一系列题目https://leetcode-cn.com/problems/search-rotate-array-lcci/solution/xuan-zhuan-shu-zu-cong-yi-dao-nan-ge-ge-dcv7a/,考察二分。面试官将题目变形为V型或倒V数组找最小值的下标,具体题目如下。题目:在一个数组中,元素是有序的,至多出现一个拐点,让我们求出数组中的最小值的下标。对题目理解:题目是面试官口述原创 2022-01-19 16:03:45 · 236 阅读 · 0 评论 -
美团春招暑期实习笔试——20220312
题目一题目描述幸运数字至少满足以下两个特征中的一种1.数字是11的数倍2.数字中至少包含两个1小美现在给你若干的数字,希望你回答这个数字是不是幸运数字。输入描述:第一行一个数字n,表示小美有n组询问接下来每一行一个正整数表示小美询问的数字。数据保证1<=n<=500,每个询问的数字在【1,1e9】范围内样例输入:2221234样例输出:yesnoJava代码import java.util.Scanner;public class Main{原创 2022-03-12 22:58:38 · 9263 阅读 · 0 评论 -
字节暑期实习一面——20220304
问题1. 自我介绍。挑一个简历中比较熟悉的项目展开来讲一下。登录认证的实现讲一下JWT、token、session有啥区别库表是自己参与设计的吗支付的逻辑讲一下流程,或者找一个自己熟悉的模块讲一下(业务层)2. 了解哪些linux的常用命令?项目部署项目在什么容器?3.遇到过什么JVM问题,并去排查吗?4.了解什么是单例模式?写代码实现一下单例模式?5. 一般在哪学技术,最近有学什么新的技术吗?6.你有什么问题或者要补充的吗?...原创 2022-03-04 14:59:23 · 500 阅读 · 0 评论 -
Java版ACM标准输入输出以及性能优化
介绍Java版ACM标准输入输出以及性能优化1.输入类的形式import java.io.BufferedInputStream;import java.util.Scanner;public class Main { public static void main(String[] args) { //两种输入流的方式都可以 Scanner in=new Scanner(System.in); Scanner in=new Scanne原创 2021-10-27 22:47:07 · 401 阅读 · 0 评论 -
试除法分解质因数
试除法分解质因数给定一个整数n,分解所有组成n的质因数,求出所有质因数的和sum.JAVA解答用试除法进行分解代码class Solution { public int minSteps(int n) { int sum=0,i; for(i=2;i*i<=n;++i){ while(n%i==0){ sum+=i; n/=i; }原创 2021-09-19 18:49:07 · 143 阅读 · 0 评论 -
leetcode1109.航班预定统计——差分+前缀和
1109.航班预定统计题目这里有 n 个航班,它们分别从 1 到 n 进行编号。有一份航班预订表 bookings ,表中第 i 条预订记录 bookings[i] = [firsti, lasti, seatsi] 意味着在从 firsti 到 lasti (包含 firsti 和 lasti )的 每个航班 上预订了 seatsi 个座位。请你返回一个长度为 n 的数组 answer,其中 answer[i] 是航班 i 上预订的座位总数。示例输入:bookings = [[1,2,10原创 2021-08-31 19:59:16 · 170 阅读 · 0 评论 -
leetcode 802 找到最终的安全状态——反向图(链式前向星存图方式)+拓扑排序
题目在有向图中,以某个节点为起始节点,从该点出发,每一步沿着图中的一条有向边行走。如果到达的节点是终点(即它没有连出的有向边),则停止。对于一个起始节点,如果从该节点出发,无论每一步选择沿哪条有向边行走,最后必然在有限步内到达终点,则将该起始节点称作是 安全 的。返回一个由图中所有安全的起始节点组成的数组作为答案。答案数组中的元素应当按 升序 排列。该有向图有 n 个节点,按 0 到 n - 1 编号,其中 n 是 graph 的节点数。图以下述形式给出:graph[i] 是编号 j 节点的一个列表原创 2021-08-07 17:35:26 · 182 阅读 · 0 评论 -
详解链式前向星存图方式
##详解链式前向星存图方式什么是前向星的构造?也就是对邻接表的一种存储方式,前向星就是一种特殊的边集数组,我们把边集数组中每一条边按照起点从小到大进行排序,起点相同的话,就按照终点的从小到大进行排序。并且记录下以某个点为起点的所有边在数组中的存储的起始位置和权重,这样前向星就构造好了。这种存图方式适用于边数较少的稀疏图,即边的数量接近于点的数量的时候。存储的方式的详解int[] he = new int[N], e = new int[M], ne = new int[M], w = new in原创 2021-08-07 17:16:55 · 1567 阅读 · 0 评论 -
剑指 Offer 14- II. 剪绳子 II——大数求余(循环求余、快速幂法)
剑指 Offer 14- II. 剪绳子 II题目样例输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36提示2 <= n <= 1000题解:首先根据数学的结论得出每段的长度是3的时候是最优的解。详细的推到见https://leetcode-cn.com/problems/jian-sheng-zi-lcof/solution/mian-shi-ti-14-i-jian-sheng-zi-tan-xin-si-xiang-by/原创 2021-07-31 09:39:24 · 231 阅读 · 0 评论 -
leetcode剑指offer 44 数字序列中某一位的数字——找规律
数字序列中某一位的数字题目数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。样例输入:n = 3输出:3输入:n = 11输出:0解题思路主要的思想就是找规律,先找出不同位数的数字所对应的有多少个不同的数字,然后判断输入的位次n在哪一个位数范围内。然后找规律判断n所对应的数真实是多少num,找出n对应在num的哪一个下标index中,然原创 2021-07-08 17:59:29 · 196 阅读 · 0 评论 -
leetcode 1239. 串联字符串的最大长度——回溯+位运算
1239. 串联字符串的最大长度题目给定一个字符串数组 arr,字符串 s 是将 arr 某一子序列字符串连接所得的字符串,如果 s 中的每一个字符都只出现过一次,那么它就是一个可行解。请返回所有可行解 s 中最长长度。示例输入:arr = ["un","iq","ue"]输出:4解释:所有可能的串联组合是 "","un","iq","ue","uniq" 和 "ique",最大长度为 4。解析我们需要计算可行解的长度,至于可行解具体是什么,以及可行解中各个字符的顺序我们是不用考虑的。因原创 2021-06-19 17:55:38 · 223 阅读 · 0 评论 -
剑指offer 43 1~n整数中1出现的次数
1~n整数中1出现的次数题目输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。示例输入:n = 12输出:5题解计算总共出现1的次数,我们可以将其分解为先定义一个当前位cur,然后计算当前位为1的时候总共可能出现的次数,会出现3中情况,分别是当前为大于1、等于1、小于1的时候如下图所示。逐个计算每一位然后相加得到最终的结果。代码(Java)class Solution {原创 2021-06-07 21:10:12 · 159 阅读 · 1 评论 -
Java中的set的toArray()转成的数组如何进行接收
Java中的set的toArray()转成的数组如何进行接受强制类型转换报错代码Set<Integer> set=map.keySet(); Integer[] num=null; num=(Integer[])set.toArray(); System.out.println(num.toString());原因:为set.toArray()返回的是Object类型,强制转换的时候发生ClassCastException错误。修原创 2021-06-06 16:30:49 · 1207 阅读 · 0 评论 -
leetcode 523.连续的子数组的和——前缀和+哈希表
523.连续的子数组的和题目给你一个整数数组 nums 和一个整数 k ,编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组:子数组大小 至少为 2 ,且子数组元素总和为 k 的倍数。如果存在,返回 true ;否则,返回 false 。如果存在一个整数 n ,令整数 x 符合 x = n * k ,则称 x 是 k 的一个倍数。示例输入:nums = [23,2,4,6,7], k = 6输出:true解释:[2,4] 是一个大小为 2 的子数组,并且和为 6 。题解原创 2021-06-03 15:21:13 · 224 阅读 · 1 评论 -
leetcode 1882.使用服务器处理任务——优先队列
1882.使用服务器处理任务题目给你两个 下标从 0 开始 的整数数组 servers 和 tasks ,长度分别为 n 和 m 。servers[i] 是第 i 台服务器的 权重 ,而 tasks[j] 是处理第 j 项任务 所需要的时间(单位:秒)。你正在运行一个仿真系统,在处理完所有任务后,该系统将会关闭。每台服务器只能同时处理一项任务。第 0 项任务在第 0 秒可以开始处理,相应地,第 j 项任务在第 j 秒可以开始处理。处理第 j 项任原创 2021-06-01 16:56:01 · 324 阅读 · 0 评论 -
leetcode 477. 汉明距离总和——超出时间限制
477. 汉明距离总和题目两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。计算一个数组中,任意两个数之间汉明距离的总和。示例输入: 4, 14, 2输出: 6解释: 在二进制表示中,4表示为0100,14表示为1110,2表示为0010。(这样表示是为了体现后四位之间关系)所以答案为:HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14, 2) = 2 + 2 + 2 = 6.题解方法一原创 2021-05-28 11:42:07 · 282 阅读 · 0 评论 -
剑指 Offer 39. 数组中出现次数超过一半的数字——摩尔投票法
数组中出现次数超过一半的数字题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2方法这里主要讲解摩尔投票法。代码class Solution { public int majorityElement(int[] nums) { //摩尔计数法 int x=0,votes=0;原创 2021-05-17 17:32:01 · 144 阅读 · 0 评论 -
剑指offer面试题16. 数值的整数次方——快速幂
剑指offer面试题16. 数值的整数次方——快速幂题目实现 pow(x, n) ,即计算 x 的 n 次幂函数。不得使用库函数,同时不需要考虑大数问题。示例:输入:x = 2.00000, n = 10输出:1024.00000思路刚开始用的试模拟的方法,通过循环n个x乘起来,时间复杂度为O(n)。运行时候会超出时间限制。故该方法舍弃!之后看题解了解到快速幂。该方法的详细过程如下:代码用的是Java代码,Java 代码中 int32 变量 n 范围是[-2147483648原创 2021-05-14 18:01:16 · 162 阅读 · 0 评论 -
Java中map容器分别根据键key和值value进行排序的总结
map中根据键key来进行排序根据键key来进行排序比较容易,我们只需要使用map中的Treemap就可以实现,它会根据key值的自然顺序来进行排序。下面用一个示例来进行说明演示,给定一串全部是小写字符的字符串,要求它能够按照字符的顺序输出各个字母出现了多少次。public class javaPractice { public static void main(String[] args) { String str="aaassssbb"; //map函数原创 2021-05-11 10:42:25 · 563 阅读 · 0 评论 -
剑指offer12.矩阵中的路径—DFS+剪枝
剑指offer12.矩阵中的路径题目给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCE原创 2021-04-27 21:25:37 · 105 阅读 · 0 评论 -
剑指Offer 13.机器人的运动范围——DFS和BFS
题目地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?示例示例 1:输入:m = 2, n = 3, k = 1输出:3示例 2:输入:m原创 2021-04-26 17:45:42 · 196 阅读 · 0 评论 -
牛客(中兴捧月)—B-切绳子
题目示例输入3123输出123思路1,可以运用循环计数的方法,每次取截取后最长的那个进行之后的判断,每判断一次加一,当长度等于一的时候退出循环。2,运用递归的算法,和方法一思想相同,形式改成递归的形式。代码import java.util.*;public class Main{ public static void main(String[] args) { Scanner in=new Scanner(System.in); i原创 2021-04-26 11:18:44 · 158 阅读 · 0 评论 -
leetcode 80. 删除有序数组中的重复项 II
80. 删除有序数组中的重复项 II题目给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝int len原创 2021-04-06 19:50:35 · 130 阅读 · 0 评论 -
leetcode1792第232场周赛第三题,以及二维数组根据某一列进行排序——优先队列
leetcode1792第232场周赛第三题,以及二维数组根据某一列进行排序题目一所学校里有一些班级,每个班级里有一些学生,现在每个班都会进行一场期末考试。给你一个二维数组 classes ,其中 classes[i] = [passi, totali] ,表示你提前知道了第 i 个班级总共有 totali 个学生,其中只有 passi 个学生可以通过考试。给你一个整数 extraStudents ,表示额外有 extraStudents 个聪明的学生,他们 一定 能通过任何班级的期末考。你需要给这原创 2021-03-16 18:29:55 · 311 阅读 · 1 评论 -
leetcode面试题01.06.字符串压缩,超出时间限制,样例通过31/32
leetcode面试题01.06.字符串压缩,超出时间限制,样例通过31/32题目:字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。 样例 输入:"aabcccccaaa" 输出:"a2b1c5a3"语言C++方法:利用双指针来统计相同字符的个数,i指向相同字符第一个不动,j指向i后面一个,若相同则j++,原创 2020-11-27 17:56:32 · 319 阅读 · 0 评论