题目链接 20. 有效的括号 这道题目在学习数据结构的时候是一个标准的用栈结构解决的问题,具体代码如下: 代码参考的题解中第3个答案,代码很简洁,链接 c语言实现如下: bool isValid(char * s){if (s == NULL || s[0] == '\0') return true;char stack[10000];int top = 0, i = 0;for (int i = 0; s[i] != '\0'; i++) {if (s[i] == '(' || s[i] == '[' || s[i] == '{') {stack[top++] = s[i];} else {if (--top < 0) return fals...
题目链接 环形链表 方法1:hash表法,用hash记录访问过的节点,如果新访问的节点在hash表中,就说明有环 方法2:快慢指针法 1.快指针每次走两步,慢指针每次走一步 2.如果有环,则快指针会一直在环中转圈 3.慢指针到达环入口节点时,快慢指针变成一个追击问题,快指针速度比慢指针快1,必然能追上慢指针 代码如下: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ bo...
Wikipedia关于原地算法的描述:原地算法(in-place algorithm)基本上不需要额外辅助的数据结构,然而,允许少量额外的辅助变量来转换数据的算法。当算法运行时,输入的数据通常会被要输出的部分覆盖掉。 很容易看出,原地算法的特点是不需要辅助的数据结构而只需要辅助变量。通常,维护一个复杂的数据结构时间空间复杂度都是比较高的,原地算法的优越性正来自于不依赖数据结构,尽管它借鉴了数据结构的思想。 同时也不难看出,原地算...
题目描述 给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。1/ 2 2/ \ / 3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:1/ 2 2\ 3 3/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/ class Solution {public boolean isSymmetric(TreeNode ...
@Leetcode二进制加法 这是一道不需要看题干就知道在问啥的题,a+b的二进制版本,来看题干: 给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。 示例 1:输入: a = “11”, b = “1” 输出: “100”示例 2:输入: a = “1010”, b = “1011” 输出: “10101”首先在落笔之前,请每个小白coder不要犯和笔者一样的错误:不要试图将二进制转换成十进制来进行计算!其实这个道理稍微思索就能明...
执行结果: 通过 显示详情 执行用时 :3 ms, 在所有 Java 提交中击败了73.56% 的用户 内存消耗 :37.1 MB, 在所有 Java 提交中击败了38.60%的用户 题目: 给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其自底向上的层次遍历为: [ [15,7], [9,20], [3] ] 思路: 利用队列...
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果: [ [3], [9,20], [15,7] ] 思路:采用队列广搜一遍就行了。class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { val = x; } }class Solution {public List<List<Integer>> levelOrder(TreeNode root) {int...
class Solution(object):def isInterleave(self, s1, s2, s3):""":type s1: str:type s2: str:type s3: str:rtype: bool"""if len(s1)+len(s2)!=len(s3):return Falsepath=[]p0=-1p1=-1i=0checked=set()while i<len(s3):matched=0if (p0,p1,i) not in checked:if p0+1<len(s1) and s1[p0+1]==s3[i]:checked.add((p0,p1,i))p0+=1matched=1if p1+1<len(s2) and s2[p1+1]==s3[i]:if matched==1:path.append((i+1,p0,p1+1))else:matche...
问题描述:给定一个 n n 的二维矩阵表示一个图像。 将图像顺时针旋转 90 度。 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 示例 1: 给定 matrix = [[1,2,3],[4,5,6],[7,8,9] ],原地旋转输入矩阵,使其变为: [[7,4,1],[8,5,2],[9,6,3] ]示例 2: 给定 matrix = [[ 5, 1, 9,11],[ 2, 4, 8,10],[13, 3, 6, 7],[15,14,12,16] ], 原地旋转输入矩阵,使其变为: [[15,13, 2, ...
下面题目中的路径,定义有所延伸,在解法思路及时间空间复杂度上有所挑战。 437. Path Sum III You are given a binary tree in which each node contains an integer value. Find the number of paths that sum to a given value. The path does not need to start or end at the root or a leaf, but it must go downwards (traveling only from parent nodes to child nodes). The tree has no more than 1,00...
题目:实现两个整数相加,并返回元素位置。 说明:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 编程环境:python3class Solution:def twoSum(self, nums, target):c=[]i=0while i<len(nums):b=target-nums[i]if b in nums:if i==nums.index(b):i+=1else:c.append(i)c.append(nums.index(b))i=1+i+nums.index(b)else:i+=1return c 执行用时:1192ms 内存消耗:...
题目:解法1:当做“两数之和”题目的续集 前情提要传送门:[算法] LeetCode 1.两数之和(python) 把 -c 当做上一题的target,然后用上次的哈希方法找到时a+b=-c成立的a和b。 难点在于输出全部结果的同时不能重复,所以先给数组排序很关键。这个算法三个地方保证了a, b, c三个数字不同时重复,见注释。 时间复杂度O(n2) class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:nums.sort() #先排序,方便解决“不...
LeetCode 56 合并区别Given [1,3],[2,6],[8,10],[15,18], return [1,6],[8,10],[15,18]. 关键就是a[1]>=b[0] 也就是array[i-1][1]>=array[i][0]const merge = array => {array.sort((a, b) => a[0] - b[0])for (let i = 1; i < array.length; i++) {let minLeft = Math.min(array[i - 1][0], array[i][0]);let maxRight = Math.max(array[i - 1][1], array[i][1]);if (array[i - 1][1] >= array[i][0]) {array[i - 1] = [minLeft, ...
目录Leetcode 121题目与分析代码Leetcode 1014题目与分析代码Leetcode 1131题目与分析代码总结其他 Leetcode 121题目与分析题目大意是有一个股票价格序列,找到最优的买进卖出时间点,算出最高差价。O(N)时间可以找到最低买入点和最大差价。 虽然是很简单的一道题,但这个解题的范式是非常典型的。 基本范式: res = A[j] - A[i], i < j find Max(res)如果没有i<ji < ji<j的限制,那就是一次遍历找到最大最小值做差值就可以了。 有...
因为一些公司的校招提前批开始了,所以翻了翻LeetCode做下准备工作。首先看了easy的题目(循序渐进),发现一些题目使用Python解题非常奇妙,所以写一个帖子记录一下。 题目一:To Lower Case。将输入的字符串全部改为小写,并以字符串输出。 这题一般的思路就是遍历字符串,根据ASCII码表来转换大小写。如果用Python可以使用str.lower(),然后就秒答了。代码如下:class Solution(object):def toLowerCase(self, str):""":type st...