LeetCode学习
面试题解题过程记录
我叫啥?
这个作者很懒,什么都没留下…
展开
-
LeetCode——石子游戏 IX
题目:解题思路:一开始拿到题目想到思路就是两个人轮流拿石子只要保证每次拿到的石子不会导致已移除的所有石子的值之和能够被整除3即可。这一思路存在的问题就是忽略了最佳,就仅仅是保证了当下这一步自己不会输掉游戏但是并没有考虑对手以及整局游戏的走向。例如当遇到stones = {1, 1, 7, 10, 8, 17, 10, 20, 2, 10}的情况时就会发生错误。按照上面的解题思路,双方选取石子的顺序为:{1,1,8,10,20,10,17,7,2,10}这样就成了Bob胜利,而实际上如果A选择{8,17原创 2022-01-20 22:39:00 · 2198 阅读 · 0 评论 -
LeetCode——存在重复元素 II
题目:解题思路:可以创建一个哈希表用来存储数据,把数组中的数字作为hashmap的key把索引作为value。然后我们对数组进行遍历,取到一个数首先判断哈希表中是否存在key相同的键值对,如果不存在那么就直接把这个数存入hashmap中,如果hashmap中存在这个键值对那么就将这个数值的索引取出来然后跟当前的i值做差,如果差值小于等于k那么直接返回true即可,如果大于那么久用num[i],i 这个键值对覆盖hashmap中key为num[i]的键值对。class Solution { pu原创 2022-01-19 11:25:02 · 230 阅读 · 0 评论 -
LeetCode——链表随机节点
题目:解题思路:首先是要实现使用整数数组初始化对象,这里由于我们不知道每次输入的数组长度是多少因此我们可以定义一个链表类型的类的成员变量用链表来存储数据。第二步根据题意我们可以使用random.nextInt方法来随机生成一个[0,list.size())范围内的值,这样我们就可以直接实现随机选择节点并且保证每个节点被选择个概率相等的目的。class Solution { ListNode head = new ListNode(); ArrayList<ListNode>原创 2022-01-16 21:44:42 · 292 阅读 · 0 评论 -
LeetCode——二叉树的中序遍历
题目:解题思路:对一个二叉树进行中序遍历,本质上就是对二叉树进行深度优先搜索。以上图中的树为例我们取出根节点首先判断其是否有左子树,如果有左子树则对其左子树进行搜索,搜索完左子树访问根节点然后再搜索这一节点的右子树。左子树和右子树的搜索过程与上述相同。根据解题思路不难发现上述的过程就是一个递归的过程因此我们可以用递归的方式来对其进行求解,代码如下:/** * Definition for a binary tree node. * public class TreeNode { *原创 2022-01-10 17:45:24 · 579 阅读 · 0 评论 -
LeetCode——完美数
题目:求解思路:根据提议来看,我们只要找到这个正整数的全部正因子就好,因此我们可以直接进行枚举,一个数的正因子除了他本身之外其他的因子均小于他的二分之一,因此我们的枚举的终止条件就是枚举的当前值大于次数的二分之一。class Solution { public boolean checkPerfectNumber(int num) { int result = 0; for(int i=1;i<=num/2;i++){ if(nu原创 2021-12-31 10:10:02 · 477 阅读 · 0 评论 -
LeetCode——一手顺子
题目:解题思路:首先根据题意不难看出要想满足题目的条件数据长度必须要是groupSize的整数倍,否则一定返回false。下一步我们我们就需要开始考虑数组长度满足要求的情况,经过观察可以发现hand数组是一个无序的数组这也就意味着可能存在第一个数字反倒是最大值的情况也无法判断这个数字就是是在第几组顺子的第几个位置,因此我们可以考虑将数组利用Arrays.sort()方法对其进行排序。排序后我们就会得到一个升序的序列,那么数组首个数字一定是第一个顺子的第一个数字,然后我们对其后的数字进行遍历当得到一原创 2021-12-30 14:29:14 · 2742 阅读 · 0 评论