matteo's coding field.

matteo's coding field.

better late than never

LeetCode.232 Implement Queue using Stacks
https://leetcode.com/problems/implement-queue-using-stacks/submissions/ 题意 用Stack来实现队列的功能解法 采用两个Stack sPush和sPop来实现,push时加进sPush,pop时判断sPop是否为空,否则将sPush中的所有元素加进sPop,再从sPop中pop class MyQueue { Stack<Integer> push = new Stack<>(); Stack<Integer> pop = new Stack<>(); ...
LeetCode.229 Majority Element II
https://leetcode.com/problems/majority-element-ii/ 题意 求数组中占比超过1/3的数解法 投票法(先背下~) class Solution { public List<Integer> majorityElement(int[] nums) { //Space Complexity : O(n) //Time Complexity : O(1) //There can be only 2 major elements ArrayList<Integer> resu...
LeetCode.224 Basic Calculator
https://leetcode.com/problems/basic-calculator/ 题意 实现一个带“(”,“)”,“+”,“-”运算符的简易计算器解法 不难但是好复杂 class Solution { public int calculate(String s) { s = s.replaceAll("\\s*", ""); int i = 0; Stack<String> stack = new Stack<>(); while ( i < s.len...
LeetCode.223 Rectangle Area
https://leetcode.com/problems/rectangle-area/ 题意 求两个矩形所占总面积解法 两个矩形可能有三种情况 相交,取两个矩形面积相加减去重叠面积 不相交,返回两个矩形面积之和 包含,取两上矩形面积中的最大值计算出重叠面积后如果重叠面积等于其中一个的面积,说明两个矩形是包含关系。虽然结果不出超出int范围,但中间过程中还是会溢出,所以先转成long计算class Solution { public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) { ...
LeetCode.206 Course Schedule
https://leetcode.com/problems/course-schedule/ 题意 选修课程里,基本一门课程可能要先学习另一门课程才能学习,判断是否能完成学习所有课程暴力解法 遇到依赖时直接往递归求解被依赖的课程能否完成学习,完成后需要放入缓存,以备后续计算可能再次计算到这门课程。需要注意的一点就是循环依赖,没想出好的方法,直接在计算后续依赖时加入计数,因为依赖数最大为numCourses-1,当计算依赖次数到达numsCourses肯定是存在循环依赖。 class Solution { HashMap<Integer, Boolean> status =...
LeetCode.209 Minimum Size Subarray Sum
https://leetcode.com/problems/minimum-size-subarray-sum/ 题意 从nums数组中找出最小连续子序列的和不小于s解法 一开始的想法就是从每一个数向后累加,直接和大于s,但是这样复杂度为O($n^2$),可能会超时 后来发现 假定nums[start, i]的和不小于s,那么nums[start, i - 1]的任意子序列的和肯定小于s。 假定sum - num[start]的和仍不小于s,根据1的结论,那么以start+1为起点的子序列长度的最小值肯定不小于[start, i],因此将start后移直到sum小于s。 s继续累加直...
LeetCode.201 Bitwise AND of Numbers Range
https://leetcode.com/problems/bitwise-and-of-numbers-range/ 题意 求[m,n]所有数字按位相与的结果 看题感觉需要对所有的[m,n]范围内的数字进行遍历一遍吧。。其实不需要的。我们知道,数组的数字是连续的,那么m,n范围内的二进制表示的末尾相同位置一定会出现不同的0,1.我们只要找出m,n的做左边起的最长相同的二进制头部即可呀。如[5, 7]里共有三个数字,分别写出它们的二进制为:101  110  111相与后的结果为100,仔细观察我们可以得出,最后的数是该数字范围内所有的数的左边共同的部分(即m,n左边的共同部分),如果上...
LeetCode.200 Number of Islands
https://leetcode.com/problems/number-of-islands/ 题意 1代表陆地,0代表海水,横向纵向相连的陆地认为是同一个岛,求有几个岛解法 开始想的是找到第一块陆地然后遍历查找,绕了一大圈发现好像不对。 正确思路就是找到第一块陆地然后向四个方向查找,并将找到的陆地置为’.’,计数加1,继续遍历直到最后一个位置 class Solution { public int numIslands(char[][] grid) { int row = grid.length; if (row == 0) { re...
LeetCode.199 Binary Tree Right Side View
https://leetcode.com/problems/binary-tree-right-side-view/ 题意 按层次输出二叉树最右结点解法 BFS按层次遍历BFS一般用queue作为辅助,先将根结点入列,然后依次出列,每次将出列结点的左右结点再加入队列。这里需要记下最右结点,需要做一个调整,普通遍历的时候并没有区分层次。这里需要每次while循环时记下当前结点数量个数,然后将当前所有结点出列,并将左右结点入列,每次while循环时的结点数量就是该层的数量,将该层第一个结点加入结果即可。class Solution { List<Integer> resul...
avatar
matteo