
笔试题
力扣,牛客的笔试题
苗秋秋
向大佬看齐!
展开
-
389.找不同
题目给定两个字符串 s 和 t,它们只包含小写字母。字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。请找出在 t 中被添加的字母。思路: 与316只出现一次的数字 类似的思路 最容易想到的就是使用哈希表进行运算,遍历第一个字符串标记出现的字符数量,再遍历第二个减去出现的数量,直到遇到为 0 或者原哈希表就不存在的情况.可以用哈希表来求解但是代码较复杂.1.异或方法...原创 2020-05-07 17:33:56 · 188 阅读 · 0 评论 -
217.存在重复元素
题目:给定一个整数数组,判断是否存在重复元素。如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。思路:方法1:排序解决,排序后相同元素会相邻.标准库中的Arrays.sort方法,一般是插排,归并,快排的集合,系统会根据数组长度和类型来选择合适的排序方法.注意:排序时,一般不直接改动原数组,可以在副本上进行排序方法2:...原创 2020-05-06 12:23:08 · 122 阅读 · 0 评论 -
205.同构字符串
题目思路:s可以被t替换,t也可以被s替换,意味着他们之间存在映射关系,那么用map来表示判断这种映射关系即可.当map中存在s时,判断s的映射是否为t,当map中不存在s时,在map中新添加s,t的映射注意,要s映射t的同时t也能映射到s才行代码class Solution { //205.同构字符串 public boolean isIsomorphic(...原创 2020-05-06 11:13:29 · 214 阅读 · 0 评论 -
387.字符串中第一个唯一字符
题目:思路:使用map操作,k代表字符,V代表出现次数先遍历字符串入map同时记录其出现次数,再次遍历找到第一个V为1的值返回即可.注意map方法的灵活使用,get,和put的区别代码 //字符串中第一个唯一字符 public int firstUniqChar(String s) { //k代表字符,V代表出现次数 Map< Character,...原创 2020-05-02 21:16:42 · 114 阅读 · 0 评论 -
1046.最后一块石头的重量
题目:思路:利用优先级队列求解,因为优先级队列默认升序排序,所以要先重写比较方法.因为每次拿的都是最重的两块石头,就相当于取优先级队列的队首两个元素进行比较操作.在比较过程中有可能会产生新的较轻的石头,所以通过使用优先级队列可以减少每次的比较操作.注意compare方法里的写法代码: //最后一块石头的重量.使用优先级队列来做 public int lastStone...原创 2020-05-02 20:00:01 · 160 阅读 · 0 评论 -
150.逆波兰表达式求值
题目:思路:栈的典型问题,定义一个栈用来存放遍历到的元素遍历字符串数组,如果当前遍历到的是四大运算符,则将此时前两个栈顶元素做相应的运算,并将每次运算后的结果压入栈中.如果遍历到的当前元素不是运算符,则将该字符串拆箱成 int 后入栈.体会Inerger.parseInt 和Interger.valueOf的区别Integer.parseInt代替Integer.valueOf...原创 2020-05-02 15:34:39 · 125 阅读 · 0 评论 -
猫狗收容所
题目:思路:用代码模拟挑选过程,思路都在代码里先对ops的第一个元素进行判断,是1则入收容所,是2则分为3种情况领养动物(领养最早的猫或狗可合并为一种情况)注意过程中对list自带方法的应用注意细节,在最后一个循环中,由于不确定第一只猫或狗在list中出现的位置,所以需要remove(i)而不是remove(0);代码:import java.util.*;import j...原创 2020-05-01 18:16:05 · 335 阅读 · 0 评论 -
约瑟夫问题II
题目:约瑟夫问题是一个著名的趣题。这里我们稍稍修改一下规则。有n个人站成一列。并从头到尾给他们编号,第一个人编号为1。然后从头开始报数,第一轮依次报1,2,1,2…然后报到2的人出局。接着第二轮再从上一轮最后一个报数的人开始依次报1,2,3,1,2,3…报到2,3的人出局。以此类推直到剩下以后一个人。现在需要求的即是这个人的编号。给定一个int n,代表游戏的人数。请返回最后一个人的编号思...原创 2020-04-30 23:32:08 · 699 阅读 · 0 评论 -
933.最近的请求次数
题目:写一个 RecentCounter 类来计算最近的请求。它只有一个方法:ping(int t),其中 t 代表以毫秒为单位的某个时间。返回从 3000 毫秒前到现在的 ping 数。任何处于 [t - 3000, t] 时间范围之内的 ping 都将会被计算在内,包括当前(指 t 时刻)的 ping。保证每次对 ping 的调用都使用比之前更大的 t 值。来源:力扣(LeetCo...原创 2020-04-30 21:02:41 · 848 阅读 · 0 评论 -
682.棒球比赛
题目:思路:这四个操作里面只有C是删除操作,其余均为加分操作,所以可以将其他操作均当数值来看用栈来存储有效元素,模拟积分过程最终总分就是栈中元素的和注意:ops是一个字符串数组,所以匹配各项时要与字符串(" ")比较,而不是与字符(’ ‘)比较.写成(’ '),就会匹配不成功,导致最终转换出错.(掉坑里了)代码:class Solution { //棒球比赛 力扣682...原创 2020-04-29 23:54:54 · 245 阅读 · 0 评论 -
844.比较含有空退格的字符串
题目给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/backspace-string-compare思路:1.因为对S,T实现相同的步骤,所以可以单独写一个build...原创 2020-04-29 16:27:09 · 175 阅读 · 0 评论 -
155.实现一个最小栈
题目:思路:要求时间复杂度为O(1),所以要通过空间换取时间创建两个栈AB,A中用来正常存放元素,B中用来存放A中的最小值入栈操作:对于A直接入栈,B的话,取当前元素和B的栈顶元素进行比较,谁小就入栈作为新的栈顶元素出栈操作:AB同时出栈取栈顶元素:取A 的栈顶元素取最小值:取B的栈顶元素代码:class MinStack { //最小栈问题,要求时间复杂度O(1...原创 2020-04-28 23:06:36 · 127 阅读 · 0 评论 -
232.用栈实现队列
题目:使用栈实现队列的下列操作:push(x) – 将一个元素放入队列的尾部。pop() – 从队列首部移除元素。peek() – 返回队列首部的元素。empty() – 返回队列是否为空。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/implement-queue-using-stacks思路:使用两个栈的思路来实现队列...原创 2020-04-28 20:24:57 · 171 阅读 · 0 评论 -
20.有效的括号
题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/valid-parentheses思路:可以借助栈来解决多层括号...原创 2020-04-28 16:46:52 · 116 阅读 · 0 评论 -
225.用队列实现栈
题目:使用队列实现栈的下列操作:push(x) – 元素 x 入栈pop() – 移除栈顶元素top() – 获取栈顶元素empty() – 返回栈是否为空来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/implement-stack-using-queues思路:1.通过两个队列来实现栈,模拟进行栈的先进后出操作2.pop...原创 2020-04-28 16:37:54 · 144 阅读 · 0 评论 -
118.杨辉三角的实现
题目:给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。思路:杨辉三角的特点:1.第一行,是一个12.第二行是两个1;3.第i行有i个元素,并且首尾两个元素都是14.第i行第j列的元素等于 第 i-1 行第j-1列 + 第i-1行第j列.最后返回的result是一个类似二维数组的List,所以分为各行来处理问题.尤其注意处理第i行情况时,循环次数以及下标...原创 2020-04-26 15:09:22 · 269 阅读 · 0 评论 -
1013.将数组分成三个相等的部分
题目给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false。形式上,如果可以找出索引 i+1 < j 且满足 (A[0] + A[1] + … + A[i] == A[i+1] + A[i+2] + … + A[j-1] == A[j] + A[j-1] + … + A[A.length - 1]) 就可以将数组三等分。来源:力扣(Lee...原创 2020-04-22 22:16:30 · 708 阅读 · 0 评论 -
997.找到小镇法官
题目在一个小镇里,按从 1 到 N 标记了 N 个人。传言称,这些人中有一个是小镇上的秘密法官。如果小镇的法官真的存在,那么:小镇的法官不相信任何人。每个人(除了小镇法官外)都信任小镇的法官。只有一个人同时满足属性 1 和属性 2 。给定数组 trust,该数组由信任对 trust[i] = [a, b] 组成,表示标记为 a 的人信任标记为 b 的人。如果小镇存在秘密法官并且可以确...原创 2020-04-22 16:07:53 · 211 阅读 · 0 评论 -
690.员工的重要性
题目给定一个保存员工信息的数据结构,它包含了员工唯一的id,重要度 和 直系下属的id。比如,员工1是员工2的领导,员工2是员工3的领导。他们相应的重要度为15, 10, 5。那么员工1的数据结构是[1, 15, [2]],员工2的数据结构是[2, 10, [3]],员工3的数据结构是[3, 5, []]。注意虽然员工3也是员工1的一个下属,但是由于并不是直系下属,因此没有体现在员工1的数据结...原创 2020-04-21 22:35:12 · 201 阅读 · 0 评论 -
692.前k个高频单词
题目思路1.先将字符串及字符串出现个数存入一个Map中,key表示字符串,value表示该字符串出现的次数2.将刚才统计好的字符串内容放在ArrayList中。3.按照刚才字符串出现的次数,按照降序对字符进行排序。 可以直接使用标准库中的排序操作,但是标准库中的sort是默认按照字符串升序排列的(string的字典顺序),而这里我们要求降序,所以要通过自制比较器来比较。注意compa...原创 2020-04-21 17:12:56 · 180 阅读 · 0 评论 -
牛客网——旧键盘打字
题目注意牛客网的输入是循环输入,输出格式要同题示例。思路1.因为在牛客网中输入都是循环的,所以循环读入两个字符串,第一个字符串是期待字符串,第二个字符串是坏键实际输出字符串。2.将实际输出的字符串循环遍历入set中(注意:根据题目所给的示例,应将所有字符都改为大写输出)。再循环遍历预期数组,看看哪个字符没有在set中,如果没有在set中就代表他是个坏键,就输出它。3.在输出坏键之前要...原创 2020-04-20 15:05:32 · 165 阅读 · 0 评论 -
771.宝石与石头
题目思路看石头里面有几个跟宝石长得一样1.先遍历宝石,将宝石放到set集合中去2.再遍历石头,运用Set的comtains()方法判断是set里面是否有和石头相对应的元素,将石头依次与宝石对比,相同则ret+1;代码 //宝石与石头 力扣771 public int numJewelsInStones(String J, String S) { //遍历宝石,将宝石...原创 2020-04-20 14:51:13 · 193 阅读 · 0 评论 -
138.复制带随机指针的链表
题目思路1.创建一个Map<K,V>,创建一个map<k,v>,k代表旧节点,v代表复制旧节点得到的新节点。从头循环遍历旧链表,将旧链表的所有元素都入Map。以后就可以通过旧节点(K),找到新节点(V)。2.循环修改新链表的指针关系。经过1的操作可以通过旧1找到新1,所以也可以通过旧1.next找到新1的next,通过旧1的random.next找到新1的rand...原创 2020-04-20 14:41:46 · 102 阅读 · 0 评论 -
136.只出现一次的数字
题目描述给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。思路方法一:通过map统计每个数字出现的次数map<Integer,Integer>,k用来表示当前数字,V用来表示该数字出现的次数。注意打印映射关系的操作 //返回只出现一次的数字 public int singleNumber(int[] nums) ...原创 2020-04-18 13:01:21 · 145 阅读 · 0 评论