摘要: 今天刷了一道PTA的题,该题的意思是:已知N人的狼人杀游戏中,有2人扮演狼人的角色,有2人说的不是实话,有狼人撒谎,但并不是所有的狼人都撒谎。请找出扮演狼人的角色? 已知输入格式为:第一行输入一个正整数N,表示有几名玩家,5≤N≤100;随后的N行,第i行给出第i名玩家说的话。如第一行:+2,表示第 阅读全文
posted @ 2019-08-19 21:19 刘云生 阅读(276) 评论(0) 推荐(0) 编辑
摘要: 今天刷的题是LeetCode230题,该题是给定一个二叉搜索树,要求查找其中第k个最小的元素,并且你可以假定k总是有效的 我这里采用的是暴力解法,具体的思路是层级遍历,将二叉树的值放入到一个list中,然后排序。当然排序可以用collections.sort,但是我这里是自己写的快排。具体的代码如下 阅读全文
posted @ 2019-08-19 19:35 刘云生 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 这是周六应该做的题,是LeetCode第124题。题目的要求是:给定一个二叉树,求出其二叉树上最大路径和,可以不经过根节点 这个题到最后也没啥思路,于是借用了LeetCode官方解答的思路。 具体地,是用递归,初始化 max_sum 为最小可能的整数并调用函数 max_gain(node = roo 阅读全文
posted @ 2019-08-19 15:58 刘云生 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 今天刷的题是LeetCode第104题,说的是给定一个二叉树,找出树的最大深度。 所谓二叉树的深度是指根节点到最远叶子节点的最长路径的节点数 首先想到的是递归法。递归法其实就是图中的深度优先算法。该算法与走迷宫类似,当遇到一个岔口的时候,就选择其中一条路走到头,当找不到出口的时候,再回到上一个岔口走 阅读全文
posted @ 2019-08-14 15:25 刘云生 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 今天遇到的题是LeetCode第231题。该题是一道简单题,要求输入一个数n,判断这个数是不是2的幂次方看到这个题,首先想到的就是利用位运算,因为二进制的位运算是比较高效的我自己的解决方案是下面的代码: 但是该方案在n特别大的时候,会超时。在参考了其他人的解答方案后,发现如果一个数n是2的幂次方,那 阅读全文
posted @ 2019-08-14 10:47 刘云生 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 今天刷的题是LeetCode第169题,求众数。我采用的方法是:hashmap的方式。具体代码如下: 阅读全文
posted @ 2019-08-12 17:28 刘云生 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 今天做的第二道题是LeetCode第136题,说的是给一个数组,除了其中一个元素外,其余的元素都出现了两次,要求输出只出现了一次的元素的值。具体代码如下: 第一次修改,20190812。新增了位运算解决该问题。可以考虑位运算中的异或(从高位开始比较,相同为0,否则为1)。具体地代码如下: 阅读全文
posted @ 2019-08-11 17:28 刘云生 阅读(84) 评论(0) 推荐(0) 编辑
摘要: 今天刷的题是LeetCode的第78题,子集。题目的要求是:给定一个不含相同元素的数组,要求输出所有的子集。该题也是没有思路,看的别人的答案写的代码 目前通过参阅别人的解答思路,掌握了两种比较好的解决方法。第一种是位运算。这个解决方法很有意思,就是每个元素其实都是两种状态,在子集中和不在子集中,那么 阅读全文
posted @ 2019-08-11 16:00 刘云生 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 今天刷的题是LeetCode第148题,难度中等 题目的要求是在O(nlogn)的时间复杂度情况下和常数级的空间复杂度对链表进行排序 一般地数据排序,冒泡、插入和选择排序都是O(N2),而归并排序和快速排序的时间复杂度是O(nlogn)。因此在算法上可以考虑归并排序和快速排序 如果采用一般的上述排序 阅读全文
posted @ 2019-08-09 19:51 刘云生 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 今天刷的题是买卖股票的最佳时机,在求解的过程中,也参考了LeetCode的官方解答思路。 第一个解题的思路是采用递归的方法来做:当找到了一个赚钱的点后,更新搜索范围,继续查找。最后把所有的赚钱的加起来就对了。 第二个是采用峰谷法。首先是峰谷都是起点。先查找谷的位置。谷的位置就是前面的点都比后面的点大 阅读全文
posted @ 2019-08-08 20:25 刘云生 阅读(180) 评论(0) 推荐(0) 编辑