算法面试100题
给你两个按非递减顺序排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你合并 num...
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列;每列的元素从上到下升序排...
给你一个 m 行 n 列的矩阵 matrix,请按照顺时针螺旋顺序,返回矩阵中的所有元素。
给定一个 n x n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在原地旋转图像。
给你单链表的头节点 head,请你反转链表,并返回反转后的链表。
给你一个链表的头节点 head,判断链表中是否有环。
将两个升序链表合并为一个新的升序链表并返回。
给你两个单链表的头节点 headA 和 headB,请你找出并返回两个单链表相交的起始节点。
给你一个链表,删除链表的倒数第 n 个节点,并且返回链表的头节点。
给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的。请你将两个数相加,并以相同形式返回一个表示和的链表。
给你一个单链表的头节点 head,请你判断该链表是否为回文链表。
给定一个已排序的链表的头 head,删除所有重复的元素,使每个元素只出现一次。
给你二叉树的根节点 root,返回它节点值的前序遍历。
给定一个二叉树的根节点 root,返回它的中序遍历。
给你二叉树的根节点 root,返回其节点值的层序遍历。
给定一个二叉树 root,返回其最大深度。
给你一个二叉树的根节点 root,检查它是否轴对称。
给你一棵二叉树的根节点 root,翻转这棵二叉树,并返回其根节点。
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum。判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。
给定一个只包括 '(',')','{','}','[',']'的字符串 s,判断字符串是否有效。
请你仅使用两个栈实现先入先出队列。
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。
给你一个整数数组 nums,判断是否存在三元组满足 nums[i] + nums[j] + nums[k] == 0。返回所有和为 0 且不重复的三元组。
请你设计并实现一个满足 LRU (最近最少使用) 缓存约束的数据结构。
给定一个大小为 n 的数组 nums,返回其中的多数元素。多数元素是指在数组中出现次数大于 n/2 的元素。
给定一个未排序的整数数组 nums,找出数字连续的最长序列的长度。
给定两个字符串形式的非负整数 num1 和 num2,计算它们的和并同样以字符串形式返回。
编写一个函数来查找字符串数组中的最长公共前缀。
给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。
给定一个 n 个元素有序的整型数组 nums 和一个目标值 target,写一个函数搜索 nums 中的 target。
整数数组 nums 按升序排列,数组中的值互不相同。在传递给函数之前,nums 在预先未知的某个下标 k 上进行了旋转。给你旋转后的数组 nums 和一个整数 ...
给你一个非负整数 x,计算并返回 x 的算术平方根。
给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
给你一个整数数组 nums,请你将该数组升序排列。使用快速排序算法实现。
给你一个整数数组 nums,请你将该数组升序排列。使用归并排序算法实现。
以数组 intervals 表示若干个区间的集合,请你合并所有重叠的区间。
给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。
给你一个大小为 m x n 的二进制矩阵 grid。计算并返回 grid 中最大的岛屿面积。
给你一个非空整数数组 nums,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。
给你两个版本号 version1 和 version2,请你比较它们。
给定一个字符串 s,请你找出其中不含有重复字符的最长子串的长度。
给你一个字符串 s、一个字符串 t。返回 s 中涵盖 t 所有字符的最小子串。
给定一个不含重复数字的数组 nums,返回其所有可能的全排列。
给你一个整数数组 nums,数组中的元素互不相同。返回该数组所有可能的子集。
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。
给你一个无重复元素的整数数组 candidates 和一个目标整数 target,找出 candidates 中可以使数字和为目标数 target 的所有不同组...
给你一个整数数组 nums,请你找出一个具有最大和的连续子数组,返回其最大和。
给定一个数组 prices,它的第 i 个元素 prices[i] 是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易,设计一个算法来计算你所能获取的...
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶?
给你一个整数数组 nums,找到其中最长严格递增子序列的长度。
给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。
给你一个整数数组 coins,表示不同面额的硬币;以及一个整数 amount,表示总金额。计算并返回可以凑成总金额所需的最少的硬币个数。
给定一个包含非负整数的 m x n 网格 grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
一个机器人位于一个 m x n 网格的左上角。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。问总共有多少条不同的路径?
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,相邻的房屋装有相互连通的防盗系统。给定一个代表每个房屋存放金额的非负整数数组,计算你不触动警报...
给定方法 rand7 可生成 [1,7] 范围内的均匀随机整数,试写一个方法 rand10 生成 [1,10] 范围内的均匀随机整数。
给你单链表的头指针 head 和两个整数 left 和 right,其中 left <= right。请你反转从位置 left 到位置 right 的链表节点,...
给你链表的头节点 head,每 k 个节点一组进行翻转,请你返回修改后的链表。
给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。
给定一个链表的头节点 head,返回链表开始入环的第一个节点。如果链表无环,则返回 null。
给你链表的头结点 head,请将其按升序排列并返回排序后的链表。
给定一个已排序的链表的头 head,删除原始链表中所有重复数字的节点,只留下不同的数字。返回已排序的链表。
给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random,该指针可以指向链表中的任何节点或空节点。构造这个链表的深拷贝。
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。
给你一个二叉树的根节点 root,判断其是否是一个有效的二叉搜索树。
给定一个二叉树,判断它是否是高度平衡的。
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。
给定一个二叉树的根节点 root,和一个整数 targetSum,求该二叉树里节点值之和等于 targetSum 的路径数目。
二叉树中的路径被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中至多出现一次。该路径至少包含一个节点,且不一定经过根节点。路径...
给定两个整数数组 preorder 和 inorder,其中 preorder 是二叉树的先序遍历,inorder 是同一棵树的中序遍历,请构造二叉树并返回其根...
给你二叉树的根节点 root,返回其节点值的锯齿形层序遍历。
给定一个二叉树的根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
给你一个字符串表达式 s,请你实现一个基本计算器来计算并返回它的值。表达式包含非负整数、+、-、*、/,中间没有空格。
给你一个未排序的整数数组 nums,请你找出其中没有出现的最小的正整数。
请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数。
给你一个字符串 s,逐个翻转字符串中的所有单词。
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
给定一个字符串 queryIP。如果是有效的 IPv4 地址,返回 'IPv4';如果是有效的 IPv6 地址,返回 'IPv6';如果不是上述类型的 IP 地...
给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 ...
已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次旋转后,得到输入数组。找出数组中最小的元素。
峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组 nums,找到峰值元素并返回其索引。
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
给你一个二叉树的根节点 root,树中每个节点都存放有一个 0 到 9 之间的数字。每条从根节点到叶节点的路径都代表一个数字,计算所有数字之和。
给定一个二叉树的 root,确定它是否是一个完全二叉树。
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返...
给定一个只包含数字的字符串 s,用以表示一个 IP 地址,返回所有可能的有效 IP 地址。
给你二叉树的根节点 root 和一个整数目标和 targetSum,找出所有从根节点到叶子节点路径总和等于给定目标和的路径。
给定一个数组 prices,其中 prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易。
给你一个字符串 s,找到 s 中最长的回文子串。
给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数。
给两个整数数组 nums1 和 nums2,返回两个数组中公共的、长度最长的子数组的长度。
给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。
输入一个链表,输出该链表中倒数第k个节点。
给定一棵二叉搜索树,请找出其中第k大的节点。