首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
在线笔面试、雇主品牌宣传
登录
/
注册
BeRichOk
获赞
4
粉丝
0
关注
0
看过 TA
3
深圳大学
2023
Java
IP属地:广东
暂未填写个人简介
私信
关注
拉黑
举报
举报
确定要拉黑BeRichOk吗?
发布(20)
评论
刷题
收藏
BeRichOk
关注TA,不错过内容更新
关注
2023-03-17 16:24
已编辑
深圳大学 Java
题解 | #N皇后问题#
解法:一行一行地填,recursive(int start, int end);表示选择从start行到n行的元素递归结束的条件是:start == n, 即所有的位置都已经选好了,而且都是符合条件的(不符合条件的话会中途退出)对于某一行来说,从0到n的位置(从做到右)选它的列坐标它所在的列不能有皇后,同时它所在的两条对角线上也不能有皇后,如果不满足条件就continue,找下一个看,所有能到下一个环节的每个点都是满足条件的按要求选好一个位置后,更新相应的辅助数组:isColumnFilled保存的是该列是否已经有皇后,isPosSlantFill保存某条正对角线上是否有皇后, isConSl...
0
点赞
评论
收藏
分享
2023-03-17 10:12
已编辑
深圳大学 Java
题解 | #字符串的排列#
和《有重复数字的全排列》是一样的,有两种解法,第一种是使用选择和撤销,第二种是交换解法1: 选择和撤销每个位置的值都可以从所有的元素中选择,选择了当前位置的元素之后,再选下一个元素的,知道选完所有的值,得到一条结果然后撤销,让当前位置选下一个元素,如此循环,知道该位置选了不同的元素 import java.util.*; public class Solution { ArrayList<String> result = new ArrayList<String>(); public ArrayList<String> Permuta...
0
点赞
评论
收藏
分享
2023-03-16 16:37
深圳大学 Java
题解 | #岛屿数量#
解题思路:访问节点,如果该节点是1,那么将岛屿数量加一,同时将与它相临的1找出来,mark为0,因为这么多相邻的1只算一个岛屿而第二步将相邻的1找出来mark为0有两种办法: 深度优先(depth first search)和广度优先(breadth-first-search)具体实现1 dfs: import java.util.*; public class Solution { /** * 判断岛屿数量 * @param grid char字符型二维数组 * @return int整型 */ public int solve ...
0
点赞
评论
收藏
分享
2023-03-07 12:39
已编辑
深圳大学 Java
题解 | #LRU Cache#
解题思路:最近访问的元素放在第一个,其他的往后挪,可以用双向链表LinkedList来实现需要实现两个方法:put和getget的时候需要调整优先级,要把当前访问的item移到第一个put需要实现更新/增加/替换的操作更新:key已经存在的情况,找到对应的item,更新value增加:key不存在,cache没有满,即cache size小于capacity,那么直接将它加到第一个替换:key不存在,cache满了,即cache size等于capacity,那么要将最后一个元素删除,然后将当前的item加入到第一个put和get都有查找findEntryByKey操作,时间复杂度是O(n),...
0
点赞
评论
收藏
分享
2023-02-22 21:45
深圳大学 Java
题解 | #有重复项数字的全排列#
解法:选择撤销和没有重复数字的全排列相比,选择的时候要多加一个条件如果本轮迭代中,相同的数字已经被选择了,那么就不要选,其他情况就还是一样的如果判断本轮迭代中相同的数字已经被选择首先看会出现相同数字的情况, 出现相同数字的时候:num[index] == num[index - 1], 除此之外加一个index > 0防止数组越界,如果是在本轮迭代中,那么num[index-1]的visited标记已经被撤回了,也就是!visited[index - 1]所以两个条件加起来就能判断在同一个迭代中,相同的数字已经被选择具体可以看图示:时间复杂度:f(n) = n* f(n-1),可以推断出...
0
点赞
评论
收藏
分享
2023-02-20 19:52
已编辑
深圳大学 Java
题解 | #没有重复项数字的全排列#
解法:定好第一位(递归)每个元素都可以作为第一个元素,当它作为第一个元素时,其他元素进行全排列,再把他们拼起来而数组不是很好操作,可以先转为列表,这样在删除某个元素的时候不需要移动数组后面的元素 import java.util.*; public class Solution { public ArrayList<ArrayList<Integer>> permute(int[] num) { ArrayList<Integer> allElements = toArrayList(num); return per...
0
点赞
评论
收藏
分享
2023-02-19 17:03
已编辑
深圳大学 Java
题解 | #链表的奇偶重排#双指针|借助队列
解法1: 双指针交替指针odd和even相互只想对方的下一个节点以构造对应的链,最后可以得到odd链和even链,再让odd链的尾节点指向even链的头节点需要注意边界条件,也就是退出while循环的条件,可以分两个case来考虑: 链表节点为奇数时,链表节点为偶数时当链表节点为奇数时,even == null时退出:当链表节点为偶数时,even.next == null时退出:最后再让odd.next指向evenHead; import java.util.*; public class Solution { public ListNode oddEvenList (ListNode...
0
点赞
评论
收藏
分享
2023-02-19 15:47
已编辑
深圳大学 Java
题解 | #单链表的排序#快慢指针归并排序
解法:归并排序归并排序需要将链表分成长度均等的左右两部分,分别对两部分进行排序之后再合并如何把两个链表分成长度均等的两部分? 快慢指针 import java.util.*; public class Solution { /** * * @param head ListNode类 the head node * @return ListNode类 */ public ListNode sortInList (ListNode head) { if (head == null || head.next == null) ...
0
点赞
评论
收藏
分享
2023-02-18 16:16
深圳大学 Java
题解 | #删除有序链表中重复的元素-II#遍历|递归
解法1:遍历然后删除所有的用一个临时变量conpared来存储当前需要比较的值如果发现这个值是重复的,那么就用while循环找到最后一个重复的节点,直接删除这一堆重复的点prev.next = current.next;如果没有发现重复的,那就prev继续往下去遍历每一轮结束都要重新让current指向prev的下一个节点 import java.util.*; public class Solution { public ListNode deleteDuplicates (ListNode head) { if (head == null || head.next...
0
点赞
评论
收藏
分享
2023-02-17 23:03
深圳大学 Java
题解 | #删除有序链表中重复的元素-I#遍历
解法1:遍历挨个遍历,同时保存上一个节点的值,如果当前节点的值等于上一个节点的值就删除,否则就继续遍历 import java.util.*; public class Solution { public ListNode deleteDuplicates (ListNode head) { if (head == null || head.next == null) { return head; } ListNode current = head; while (current != null &...
0
点赞
评论
收藏
分享
2023-02-17 22:39
已编辑
深圳大学 Java
题解 | #判断一个链表是否为回文结构#栈|反转后半部分
解法1:使用栈出栈后和原来的节点对比,注意比较的是val,而不是节点本身:if(reverse.val != original.val)时间复杂度:O(n)空间复杂度:O(n) import java.util.*; public class Solution { public boolean isPail (ListNode head) { if (head == null) { return false; } Stack<ListNode> reversedList = new Stack<...
0
点赞
评论
收藏
分享
2023-02-17 18:30
已编辑
深圳大学 Java
题解 | #链表相加(二)#栈/反转链表后相加
解法1:栈用2个栈来存储链表1和2,链表3来表示加和的结果,一个临时变量保存进位carryOver需要注意的点是:当某个链表的长度较长的时候,将它放入结果是,也要记得处理carryOver的部分时间复杂度:O(m + n)空间复杂度:O(m + n) import java.util.*; public class Solution { public ListNode addInList (ListNode head1, ListNode head2) { if (head1 == null) { return head2; } ...
0
点赞
评论
收藏
分享
2023-02-10 14:17
已编辑
深圳大学 Java
题解 | #两个链表的第一个公共结点#双指针相遇
解法1:双指针遍历指针A先遍历链表1,结束了再遍历链表2指针B先遍历链表2, 结束了再遍历链表1相遇时:1.如果有公共节点假设链表1不在公共节点的部分长度为a1,在公共节点的长度为b,链表2不在公共节点的部分长度为a2,在公共节点的长度为bA和B走过了相同的节点数total,A在链表2上走过的节点数为x, B在链表2上走过的节点数为y,total = a1 + b + xtotal = a2 + b + y很容易得出:x = a2, y = a1也就是说,他们第二圈会走到第一个相同的节点相遇2.如果没有相同的节点那么它会走到链表末尾时等于null而相等 import java.util.*; ...
0
点赞
评论
收藏
分享
2023-02-07 17:39
深圳大学 Java
题解 | #删除链表的倒数第n个节点#快慢指针/栈/递归
解法1:快慢指针先找到倒数第n+1个节点,然后删除倒数第n个节点如果这个节点是头节点,需要特殊处理一下 import java.util.*; public class Solution { public ListNode removeNthFromEnd (ListNode head, int n) { if (head == null || head.next == null) { return null; } int count = 1; // find the node before Nth...
0
点赞
评论
收藏
分享
2023-02-07 16:56
已编辑
深圳大学 Java
题解 | #链表中倒数最后k个结点# 快慢指针/栈/递归
解法1:快慢指针快指针先走K-1步慢指针再出发,当快指针到结尾的时候时候,慢指针就到了倒数第K个节点 import java.util.*; public class Solution { public ListNode FindKthToTail (ListNode pHead, int k) { if (pHead == null || k == 0) { return null; } if (pHead.next == null && k == 1) { return pHead; ...
0
点赞
评论
收藏
分享
1
2
创作者周榜
更多
关注他的用户也关注了:
牛客网
牛客企业服务