首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
课程
专栏·文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
在线笔面试、雇主品牌宣传
登录
/
注册
OfferCall!
获赞
200
粉丝
18
关注
6
看过 TA
59
男
东北大学
2022
Java
IP属地:北京
暂未填写个人简介
私信
关注
拉黑
举报
举报
确定要拉黑OfferCall!吗?
发布(72)
刷题
OfferCall!
2021-04-01 08:00
Java
DFS+回溯
将字符串划分成ip地址,需要注意几点:1、ip地址由四个整数组成;2、每个整数的范围是[0,255];3、四个整数通过逗号分隔符连接4、每个整数除了它本身是0的情况之外,不能以0开头我主要采用深度优先搜索+回溯的方法解决 对每一部分的整数的处理方式都是一样的,先取一位数,然后添加到临时要划分的ip字符串中,继续递归进行后面整数的划分,递归的过程中,如果划分出四个整数同时字符串又使用完毕,则组成了一种ip,否则就不是,直接返回。 public ArrayList<String> restoreIpAddresses (String s) { // write ...
0
点赞
评论
收藏
转发
OfferCall!
2021-03-31 21:46
Java
坐标变换
public int[][] rotateMatrix(int[][] mat, int n) { // write code here if (mat == null){ return null; } if (n <= 1){ return mat; } int[][] res = new int[n][n]; for (int i = 0; i < n; i++) { for (int ...
0
点赞
评论
收藏
转发
OfferCall!
2021-03-31 20:42
Java
位运算,统计二进制位1出现的次数
因为除了出现一次的那个数,其他数都出现k次,那么这些出现k次的数,它对应的二进制位中,为1的bit位,也是出现k次的,那么就可以用一个大小为32的数组,记录数组中所有数在这32个bit位中,出现的1的次数,最终出现1次的数,它对应的为1的bit位中1出现的次数必定是对k取模余1的,那么这32个bit位中,谁对k取模,就将一个1向左移动对应数量的位,将所有这些移动后的数相加就是出现一次的数了。 public int foundOnceNumber (int[] arr, int k) { // write code here if (arr == nul...
0
点赞
评论
收藏
转发
OfferCall!
2021-03-30 22:51
Java
逆波兰法求解
题目给出的算术表达式主要包括三部分:操作数、括号、运算符一般的算术表达式都是中缀表达式,不易于编程计算。所以我们可以利用逆波兰算法将算术表达式的中缀形式转为更易于计算的后缀形式。转换为后缀表达式的过程需要借助两个额外空间,栈S和数组列表L,其中栈用于存储左括号和运算符,数组列表用于存储后缀表达式。整个步骤是: 遍历算术表达式: 1、如果遇到了操作数,那么此时需要考虑一个问题:那就是当前这个操作数是单位数还是多位数的一部分,如果是单位数,那么直接加入到数组列表L中;如果是多位数,那么需要利用while循环,将这个多位数连接起来,形成一个整体,然后放入数组列表 2...
0
点赞
评论
收藏
转发
OfferCall!
2021-03-30 20:26
Java
哈希表+排序
方法一:哈希表+数组排序 public String[][] topKstrings (String[] strings, int k) { // write code here if (strings == null || strings.length == 0){ return null; } HashMap<String, Integer> map = new HashMap<>(); for (String string : strings) { ...
0
点赞
评论
收藏
转发
OfferCall!
2021-03-30 19:34
Java
双指针
使用快慢指针先找到链表的中间节点,如果链表的节点数量是奇数个,那就是正中间那个节点;如果链表的节点数量是偶数个,那么中间节点就是偏左的那个。中间节点找到以后,将中间节点右边的那部分链表和原链表断开,采用头插法将这部分链表逆置,然后再同时从左往右的遍历这两个部分的链表,进行节点的插入。时间复杂度为O(n) public void reorderList(ListNode head) { if (head == null || head.next == null){ return; } ListNode p = h...
0
点赞
评论
收藏
转发
OfferCall!
2021-03-30 00:06
已编辑
Java
双指针法
定义四个变量:leftMax表示arr[0..L-1]中的最大值L表示位于左侧的指针变量,初始值为1rightMax表示arr[L+1..N-1]中的最大值R表示位于右侧的指针变量,初始值为N-2 求解容器中水容量的每一步就是R向左或者L向右进行移动,其中具体的逻辑是:1、如果leftMax<=rightMax,那么可以求出L位置上的水量,为Max{leftMax-arr[L],0},然后L向右移动,移动之前要更新leftMax,leftMax = Max{leftMax,arr[L++]}2、如果leftMax>rightMax,那么同样的道理,可以求出R位置上的水量Max{ri...
0
点赞
评论
收藏
转发
OfferCall!
2021-03-28 18:59
Java
快慢指针
删除倒数第n个节点,就是删除正数第m-n+1个节点,所以可以定义一个快指针,让它先走n步,快指针距离链表尾部还有m-n步,然后慢指针开始移动,当快指针移动到最后一个节点的时候,慢指针走走到了第m-n个节点,然后直接删除即可 public ListNode removeNthFromEnd (ListNode head, int n) { // write code here if (head == null){ return null; } ListNode node = new ...
0
点赞
评论
收藏
转发
OfferCall!
2021-03-27 23:16
Java
TreeMap解决
import java.util.Scanner; import java.util.TreeMap; public class HJ8 { public static void main(String[] args){ Scanner sc = new Scanner(System.in); TreeMap<Integer,Integer> map = new TreeMap<>(); int nums = sc.nextInt(); for (int i = 0; i < nums;...
0
点赞
评论
收藏
转发
OfferCall!
2021-03-27 23:16
Java
使用map解决
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); String nums = sc.nextLine(); int[] map = new int[10]; StringBuilder sb = new StringBuilder(); for(int i = nums.length() - 1;i >=...
0
点赞
评论
收藏
转发
OfferCall!
2021-03-27 22:16
Java
坑好多
总结一下可能的坑:1、字符串前后端可能有空格;2、空串3、字符串首个字符可能是正负号;4、字符串中间可能有‘0’ - ‘9’之外的非法字符,如果有的话,那么只将第一个出现的非法字符之前的数字串转换为数字;5、溢出,有正数溢出和负数溢出,所以要注意 public static int atoi (String str) { // write code here if (str == null || str.length() == 0){ return 0; } String s = str.tri...
0
点赞
评论
收藏
转发
OfferCall!
2021-03-27 20:45
Java
双指针
先定义一个头节点用于指示链表的头部位置,方便最后返回链表。然后定义两个指针p和q,初始化时,p先指向头结点,q指向head,开始遍历链表,因为链表是有序的,所以重复元素一定是连续出现的,所以我的策略就是先找出重复的一段子链表,然后一网打尽,具体做法就是: 如果q.next.val != q.val时,就移动p和q; 如果q.next.val == q.val时,就不动p,然后移动q,移动到与当前重复子链表相邻的第一个元素(不与子链表中的元素相等),此时p位于重复子链表的左边相邻位置,q位于右边的相邻位置,将p的next指针指向q即可完成删除。 public ListNode...
0
点赞
评论
收藏
转发
OfferCall!
2021-03-27 19:58
Java
栈1负责进栈,栈2负责出栈
入栈操作都往stack1入栈出栈时,先判断stack2中是否有元素,如果没有,则stack1中元素全部出栈放入stack2中,然后从stack2中取栈顶元素;如果stack2中有元素,则直接从stack2中出栈 Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push(int node) { stack1.push(node); } ...
0
点赞
评论
收藏
转发
OfferCall!
2021-03-26 22:50
Java
每一个数都可以分解成素数的乘积
每一个数都可以分解成素数的乘积 所以当我们求一个数target的所有的质因子时,可以先从最小的素数开始去尝试分解,如果2是这个数的质因子,那么就可以一次性的将这个数的所有可能的因子中,是2的幂的因子全部分解掉,那么在之后继续寻找因子的时候,就不会再有2以及2的倍数的因子了;同样的道理,在将2及2的倍数因子全部分解掉以后(target /= 2),如果3是新的target的因子,那么继续将3及3的幂的因子全部除掉(while循环:target /= 3),通过这种方式,我们在往后继续寻找因子的时候,像4、6、8、9这些2或3的幂就不会再作为因子去分解了。而只有那些素数,才有可能作为因子去分解...
0
点赞
评论
收藏
转发
OfferCall!
2021-03-26 21:24
Java
DFS
其实就是求给的二维网格图中,连通分量的总数,那么我们就依次遍历二维数组中的每一个点,凡是值为1且未被访问过的点,都进行依次深度优先遍历,求出这个点对应的连通分量,然后将这个分量中的点都设置为已被访问,然后岛屿数量加一,继续进行遍历。直到所有的点都遍历完全,最后就可以求出总的岛屿数量。 public int solve (char[][] grid) { // write code here if (grid == null || grid.length == 0){ return 0; } int...
0
点赞
评论
收藏
转发
1
2
3
4
5
工具箱
TA的圈子
暂未加入圈子
TA的圈子
TA的笔记
暂无笔记
TA的笔记
登录
0
天
已登录
0
天
连续登录
0
人
今日访客
牛客网
牛客企业服务