algorithms_and_data_structures
1.0.0
目前状态 | 统计数据 |
---|---|
C++ 问题总数 | 188 |
Python 问题总数 | 15 |
当前每日连胜 | 11 |
最后的连胜 | 2019年6月20日 - 2019年6月21日 |
当前连胜 | 2019年6月23日 - 2019年3月7日 |
注意:这里的一些代码是旧的,是我学习 C++ 时编写的。代码可能不安全或做出错误的假设。请谨慎使用。始终欢迎拉取请求。
问题 | 解决方案 |
---|---|
找到链表中倒数第n个节点。 | nthToLastNode.cpp、nth_to_last_node.py |
添加数字,其中数字的每个数字都由链表的节点表示。以链接列表的形式给出输出。 | add_two_numbers_lists.cpp, add_two_numbers_list.py |
交换链表的节点而不交换数据。 | swapNodesWithoutSwappingData.cpp,swap_nodes_without_swapping_data.py |
以迭代和递归方式反转链表 | verseLinkedListIterAndRecurse.cpp,reverse_linkedlist.py |
给定一个链表,反转备用节点并在末尾追加。 | 反向替代节点.cpp |
仅给定一个节点指针,从链表中删除该节点。 | 删除节点.cpp |
删除整个链表。 | 删除链表.cpp |
打印链表的中间节点而不迭代两次。 | 打印MiddleNode.cpp |
确定链表是否是回文。 | listPallindrome.cpp |
将数据插入已排序的链表中。 | insertInASortedLinkedList.cpp |
确定两个给定链表的交集(合并)点。 | findIntersectionPointOfLists.cpp,intersection_of_lists.py |
克隆一个具有 next 和一个随机指针的链表,空间复杂度 - O(1)。 | cloneListWithRandomPtr.cpp、clone_list_with_random_ptr.py |
给定一个包含重复项的排序链表,在一次迭代中删除重复项。 | 从排序列表中删除重复项.cpp |
使用Floyd的环路查找算法,检测链表是否包含环路,如果包含环路,则删除环路 | floyedCycleDetection.cpp |
使用归并排序对链表进行排序 | merge_sort.cpp |
给定一个单链表 L 0 -> L 1 -> … -> L n-1 -> L n 。重新排列列表中的节点(就地),使新形成的列表为: L 0 -> L n -> L 1 -> L n-1 -> L 2 -> L n-2 .... | 重新排列列表.cpp |
Include 包含数据结构和一些算法的单个标头实现。
数据结构/算法 | 执行 |
---|---|
通用宏和算法,如交换、随机数生成 | 通用.h |
通用堆栈实现 | 堆栈.h |
通用队列实现 | 队列.h |
通用列表实施 | 列表.h |
二叉搜索树的实现 | 二叉搜索树.h |
快速排序的实现 | 快速排序.h |
归并排序的实现 | 合并排序.h |
选择排序的实现 | 选择排序.h |
冒泡排序的实现 | 冒泡排序.h |
Linux内核双链表实现 | 双链表.h |
通用图实现(邻接表) | 图.h |
堆排序的实现 | 堆排序.h |
我自己的字符串库实现 | pstring.h pstring.cpp |
问题 | 解决方案 |
---|---|
判断一个数是否是2的幂。 | power_of_2.cpp |
添加两个表示为字符串的二进制数。 | addBin.cpp |
确定给定数字的下一个 2 的幂。 | next_power_of_2.cpp |
使用位操作确定数字是否是 3 的倍数。 | multiple_of_3.cpp |
确定机器的字节顺序,以相反的字节顺序打印一个数字。 | 反向字节序.cpp |
求给定数的奇偶性。 | 查找奇偶校验.cpp |
使用位操作实现数字与 7 的快速乘法。 | 乘以7.cpp |
反转无符号整数的位(两种方法 - 逐位反转和分而治之)。 | 整数的反向位.cpp |
用于确定给定整数中最右边设置位的位置的小函数。 | right_most_set_bit.cpp |
给定一个数字向量,只有一个数字出现奇数次,求该数字。 | find_odd_one_out.cpp |
给定两个整数,确定它们的和是否会整数溢出。 | 整数溢出.cpp |
将数字 A 转换为 B 需要多少位翻转操作。 | countNumberOfBitFlips.cpp |
给定数字 x 和 x 的二进制表示形式的两个位置(从右侧开始),编写一个函数,在给定的两个位置处交换 n 个右位并返回结果。还假定两组比特不重叠。 | 交换位集.cpp |
不使用任何算术运算符将两个数字相加 | addition_without_operators.cpp |
路易丝和理查德玩游戏。他们将计数器设置为 N。路易丝获得第一个回合,此后回合交替。在游戏中,他们执行以下操作:
| 计数器游戏.cpp |
确定两个整数是否符号相反。 | check_opposite_signs.cpp |
交换给定整数的位置 p 和 q 处的两位。 | 交换位.cpp |
检查一个数是否是4的幂。 | check_if_power_of_4.cpp |
问题 | 解决方案 |
---|---|
问题 1-1:第 6 版:编写一个算法来确定字符串是否具有唯一字符。我们可以在不使用额外数据结构的情况下做到这一点吗? | 1-1-hasUniqueChars.cpp, 1-1-hasUniqueChars.py |
问题 1-2:第 5 版:当您传递一个以 null 结尾的 C 字符串时,反转字符串。 | 1-2-edi5-reverseString.cpp |
问题 1-2:第 6 版:给定两个字符串,确定一个字符串是否是另一个字符串的排列。 | 1-2-perm-strings.cpp, 1-2-perm-strings.py |
问题 1-3:第 5 版:编写一个算法来删除字符串中的重复字符。 | 1-3-edi5-removeDuplicates.cpp |
问题 1-3:第 6 版:URLify:将字符串中的所有空格替换为“%20”。最好就地 | 1-3-URLify.cpp |
问题 1-4:第 6 版:给定一个字符串,编写一个函数来检查它是否是回文排列。 | 1-4-回文排列.cpp |
问题 1-5:第 6 版:可以对字符串执行三种可能的编辑 - 插入字符、删除字符、替换字符。给定两个字符串,确定它们是 1 编辑还是 0 编辑。 | 1-5-one-edit-away.cpp |
问题 1-6:实现一种执行基本字符串压缩的方法。示例字符串aabcccccaaa应压缩为a2b1c5a3 ,但是如果压缩字符串大于原始字符串,则返回原始字符串 | 1-6-字符串压缩.cpp |
问题1-7:将矩阵顺时针(&逆时针)旋转90度 | 1-7-矩阵旋转.cpp |
问题1-8:编写一个算法,如果MxN矩阵的一个元素为0,则其整个行和列都设置为0。 | 1-8-零矩阵.cpp |
问题 1-9:给定两个字符串 s1 和 s2,只需调用一个函数来确定 s2 是 s1 的旋转,该函数检查一个字符串是否是另一个字符串的旋转。 | 1-9-字符串旋转.cpp |
问题 2-1:从未排序的链表中删除重复项。如果不允许临时缓冲区怎么办? | 2-1-删除-dups.cpp |
问题 2-2:从单链表的最后一个节点确定第 k个节点。 (迭代和递归方法) | 2-2-kthToLast.cpp |
问题2-3:实现删除单链表中间节点的算法 | 2-3-删除-中间节点.cpp |
问题 2-4:围绕值 x 划分链表,所有小于 x 的节点都位于所有大于等于 x 的节点之前 | 2-4-分区.cpp |
问题 2-5:有两个由链表表示的数字,其中每个节点包含一个数字。这些数字以相反的顺序存储,使得 1 的数字位于列表的开头。编写一个函数,将两个数字相加并以链表形式返回总和。示例:
| 2-5-添加列表.cpp |
问题2-6:判断链表是否是回文(2次迭代和1次递归方法) | 2-6-回文.cpp |
问题2-7:判断两个单链表是否相交,如果相交,则返回相交节点。交集是根据参考而不是值定义的 | 2-7-交叉点.cpp |
问题2-8:检测链表是否存在环路,找到环路的起始节点并去除环路 | 2-8-循环检测.cpp |
问题 | 解决方案 |
---|---|
使用不同记忆技术的斐波那契第N 项 | 斐波那契.cpp |
最长公共子序列问题 | lcs.cpp,longest_common_subsequence.py |
最大值连续子序列问题 wiki | 最大子序列.cpp |
加泰罗尼亚数 - 计算具有 n 个键的可能二叉搜索树的数量 | 加泰罗尼亚语号码.cpp |
计算 amxn 网格中从源起点 (0, 0) 到目的地 (m-1, n-1) 的唯一路径的数量。您只能向下或向右移动。 | 唯一路径.cpp |
0-1 背包问题:假设你是一个小偷,你想偷东西,房间里装满了东西。您有一个背包,其最大容量为 W,您希望将其装满,使其价值最大。作为一个聪明的小偷,你知道房间里每件物品的重量和价值。你会如何装满你的背包,这样你就可以获得最大可能的价值,这样你只能装满容量W。 | 0_1_knapsack_problem.cpp |
问题 | 解决方案 |
---|---|
使用队列对树进行迭代级别顺序遍历 | levelOrderTraversalIterative.cpp,level_order_tree_traversal_iterative.py |
Tree的递归层序遍历 | levelOrderTraversalRecursive.cpp,level_order_tree_traversal_recursive.py |
树的之字形遍历 | zigZagTraversal.cpp,zig_zag_traversal.py |
二叉搜索树中给定节点的前驱和后继 | 前驱后继.cpp |
给定二叉搜索树中两个节点的值,找到最低公共祖先(LCA)。假设这两个值都存在于树中。 | 最低共同祖先.cpp,最低共同祖先.py |
给定一棵二叉树(与二叉搜索树不同),找到最低公共祖先(LCA)。 | 最低共同祖先二元树.cpp |
给定一棵二叉树,每行打印出其所有根到叶路径。 | printAllRootToLeafPath.cpp |
判断一棵树是否是和树。 SumTree 是二叉树,其中节点的值等于其左子树和右子树中存在的节点之和。空树就是SumTree,空树的和可以认为是0。叶子节点也可以认为是SumTree。 | sumTree.cpp |
将树转换为 sumTree,使得每个节点都是原始树的左子树和右子树的和。 | Convert_to_sum_tree.cpp,convert_to_sum_tree.py |
将排序数组转换为平衡二叉搜索树。 | 排序数组到BST.cpp |
给定一棵二叉树,生成每个垂直列的总和。 | 垂直求和.cpp |
给定二叉树和键,具有键的节点存在于树中。找到带有key的节点的所有祖先,这里的祖先是从节点到根的直线路径上的节点。 | node_ancestors_in_root_path.cpp |
给定二叉树和键,返回具有键的节点的级别。根位于第 1 层,如果树中不存在具有键的节点,则返回 0 | 节点级别.cpp |
给定一棵二叉树,找到从根到节点的所有路径,其总和为k。 | k_sum_paths.cpp |
给定一棵二叉树,以相反的顺序逐层打印其节点。即最后一级的所有节点应首先打印,然后是倒数第二级的节点,依此类推。任何级别的所有节点都应从左到右打印。 | 反向层序遍历.cpp |
以递归和迭代方式反转二叉树。 | 反转树.cpp |
给定一个二叉搜索树,找到其中给定键的 ceil 和 Floor。如果给定的键位于 BST 中,则 Floor 和 ceil 都等于该键,否则 ceil 等于 BST 中的下一个更大的键(如果有),而 Floor 等于 BST 中的上一个更大的键(如果有) | Floor_ceil_bst.cpp |
查找二叉搜索树中的第 k 个最小元素 | kth_smallest.cpp |
验证给定的二叉树是否是二叉搜索树。 | validate_bst.cpp |
给定二叉搜索树和目标数,如果 BST 中存在两个元素且它们的总和等于给定目标,则返回 true。 | 查找目标k.cpp |
给定一个非空二叉搜索树和一个目标值,找到 BST 中最接近目标的值。另外,要注意目标值是浮点数。只有一个最接近目标的唯一值。 | 最接近的bst_value.cpp,最接近的_bst_value.py |
给定一棵二叉树,遍历前序,构造一个包含节点值和括号的字符串输出。空节点需要用空括号对“()”表示。并且需要省略所有不影响字符串和原始二叉树之间一对一映射关系的空括号对。代码文件中的示例 | string_from_tree.cpp |
问题 | 解决方案 |
---|---|
字符串搜索的 Robin-Karp 算法的实现 | robinKarpStringMatching.cpp |
找到给定字符串的下一个排列,即。重新排列给定的字符串,使其成为按字典顺序大于给定字符串的下一个字符串 | next_permutation.cpp |
模式匹配Z算法的实现 | z.cpp |
自建字符串库的测试用例 | pstring_test.cpp |
获取字符串中最后一个单词的长度。 | 最后一个单词的长度.cpp |
找出两个字符串之间的差异。字符串 t 是通过随机打乱字符串 s 生成的,然后在随机位置再添加一个字母。确定 t 中不同的字符 | 查找差异.cpp |
问题 | 解决方案 |
---|---|
以螺旋顺序打印矩阵的内容 | 矩阵螺旋打印.cpp |
给定一个 M x N 矩阵,将其逆时针旋转 R 次,并显示结果矩阵。 | 旋转矩阵.cpp |
将数组旋转 r 个元素(向左或向右) | 数组旋转.cpp |
给定一个重复/非重复整数数组,确定该数组中的第一个非重复整数 | 第一个非重复整数.cpp |
在Quantumland中,有n个城市,编号从1到n。这里,c i表示第 i 个城市。 Quantumland 有 n−1 条道路。这里,对于每个 i < n, ci和 c i+1之间有一条双向道路。有传言说 Flatland 将攻击 Quantumland,而女王想要保证她的土地安全。如果 c i或 c i+1中有警卫,则 c i和 c i +1之间的道路是安全的。女王已经在一些城市安置了一些警卫,但她不确定他们是否足以保证道路安全。她想知道需要雇用的最低数量的新警卫。有关输入/输出详细信息,请参阅解决方案中的注释。 | save_quantamland.cpp |
给定一个整数 N。找出该数字中恰好能整除 N(余数为 0 的除法)的数字,并显示它们的个数。对于 N=24,有 2 位数字(2 和 4)。这两个数字都可以整除 24。所以我们的答案是 2。请参阅解决方案文件的标头注释中了解更多详细信息。 | 查找数字.cpp |
使用 Caeser Cipher 加密然后解密文本。 | caeser_cipher.cpp |
使用维吉尼亚密码加密然后解密文本。 | vigenere_cipher.cpp |
高效生成 1 到 N 之间的二进制数。 | n_binary.cpp |
实现电源功能 | 电源函数.cpp |
问题 | 解决方案 |
---|---|
打印字符串的所有排列。示例:ABC 的排列为 ABC、ACB、BCA、BAC、CAB、CBA | 字符串排列.cpp |
欧几里得算法找到两个数字的最大公约数。 (迭代和递归) | gcd.cpp |
使用分而治之的方法实现 pow(x,y)。尝试以 O(logn) 实现它 | 战俘.cpp |
计算大数的阶乘,例如 100(它将有 158 位数字) | Factorial_of_large_num.cpp |
根据在传统移动键盘上输入的数字生成所有可能的单词 | 电话号码.cpp |
给定数字的字符串表示形式,从字符串中删除 n 个字符,以使数字表示形式尽可能最低。 | 最低可能数.cpp |
检测一个数字是否是一个快乐的数字。如果将数字替换为其数字的平方和的一系列运算最终导致 1,则该数字是快乐数字。如果执行上述操作时处于无限循环中,则该数字不是快乐数字。 | happy_number.cpp |
问题 | 解决方案 |
---|---|
我们有一系列股票的 n 个每日报价。我们需要计算所有 n 天的股票价格跨度。第 i 天的跨度定义为股票价格小于或等于第 i 天的最大连续天数。对于股票报价 {100, 60, 70, 65, 80, 85},跨度将为 {1, 1, 2, 1, 4, 5}。第 1 天的跨度始终为 1,现在第 2 天的股票价格为 60,并且之前没有一天库存低于 60。因此跨度仍为 1。对于第 3 天,股票定价为 70,因此其跨度是 2,前一天是 60,依此类推。 | stock_span_problem.cpp |
给定一个中缀表达式,将其转换为后缀表达式,示例 (A+B)*C --> AB+C* | 中缀到后缀.cpp |
给定一个仅包含字符 '(', ')', '{', '}', '[' 和 ']' 的字符串,确定输入字符串是否有效。括号必须以正确的顺序结束,“( )”和“()[]{}”均有效,但“(]”和“([)]”无效。 | 有效括号.cpp |
问题 | 解决方案 |
---|---|
给定一个排序向量,返回向量中某个值出现的第一个索引,如果数字不存在,则返回 -1 | First_occurrence_binary_search.cpp |
查找整数数组中的第一个重复元素。给定一个整数数组,找到其中的第一个重复元素。我们需要找到出现多次且首次出现索引最小的元素。 | 第一个重复元素.cpp |
给定一个未排序的整数列表,A={a 1 ,a 2 ,…,a N },找到它们之间绝对差最小的一对元素?如果有多对,则将它们全部找到。 | 最接近的数字.cpp |
给定一个排序数组,确定该数组中固定点的索引。如果数组没有定点,则返回 -1。当元素的索引与索引相同时,数组具有不动点,即 i == arr[i],期望时间复杂度 O(logn) | 定点.cpp |
求数组中先递增后递减的最大元素。输入:arr[] = {8, 10, 20, 80, 100, 200, 400, 500, 3, 2, 1},输出:500。数组也可以严格递增或递减。预期时间复杂度为 O(logn)。 | 查找最大值.cpp |
给定一个正整数和/或负整数数组,在数组中找到总和最接近 0 的一对。 | findClosestPairToZero.cpp |
艺术家 Numeros 有两个列表 A 和 B,其中 B 是 A 的排列。Numeros 对这些列表感到非常自豪。不幸的是,在将它们从一个展览运送到另一个展览时,A 中遗漏了一些号码。你能找到丢失的号码吗?笔记:
| 缺失数字.cpp |
从两个排序数组中找到最接近的一对。给定两个排序数组和一个数字 x,找到总和最接近 x 的对,并且该对包含每个数组中的一个元素。给定两个数组 ar1[0…m-1] 和 ar2[0..n-1] 和一个数字 x,我们需要找到一对 ar1[i] + ar2[j],使得 (ar1 [i] + ar2[j] – x) 是最小值。 | ClosestPairSorted.cpp |
给定一个包含 n 个元素的数组 A,找到三个索引 i、j 和 k,使得 A[i]^2 + A[j]^2 = A[K]^2。 O(n2) 时间复杂度和 O(1) 空间复杂度 | 平方和.cpp |
给定一个大小为 n 的未排序数组 arr[0..n-1],找到最小长度子数组 arr[s..e],以便对该子数组进行排序使整个数组排序。 | minLengthUnsortedArray.cpp |
找出算术级数中缺失的数字 | 缺失号码2.cpp |
找出 3 个排序向量中的共同元素 | commonIn3Arrays.cpp |
在未排序的数组/向量中查找具有给定总和的所有对 | find_pairs_with_sum.cpp |
给定一个数组,找到其中的峰值元素。峰值元素是大于其邻居的元素。 | 峰元素.cpp |
给定一个不同非负整数的排序数组,找到其中最小的缺失元素。 | 最小缺失.cpp |
将向量中的所有零移至末尾 | move_zeros.cpp |
问题 | 解决方案 |
---|---|
图的深度优先遍历 | dfsDemo.cpp |
图的广度优先遍历 | bfsDemo.cpp |
使用 Dijkstra 算法计算从起始位置(节点 S)到图中所有其他节点的最短距离。 | dijkstra-最短到达.cpp |
使用 Prim 算法计算给定图的最小生成树的总权重(形成 MST 的边的权重之和) | primsMST.cpp |
使用 Kruskal 算法打印给定图的最小生成树 ( MST )。 | 克鲁斯卡尔MST.cpp |
创建一个程序,为每个字符生成霍夫曼编码作为表格。 | 哈夫曼编码.cpp |
在包含字母的 2D 板上搜索给定单词。可以通过顺序遍历相邻的水平或垂直单元来构造单词。在组成单词的序列中,同一位置上的字母不能使用多次。 (查看文件顶部的示例。) | grid_word_search.cpp |
给定 2D 屏幕、像素的位置和要填充的颜色的新值,用新颜色替换像素的颜色和所有相邻(上、下、左、右)相同颜色的像素。这与 MS-PAINT 中的区域洪水填充(记住桶符号)相同。 | 洪水填充.cpp |
问题 | 解决方案 |
---|---|
给定两个整数数组 A 和 B,每个数组包含 N 个整数。您可以自由排列数组中元素的顺序。 A 和 B 是否存在可能的排列 A', B',使得对于所有 i,A' i +B' i ≥ K,其中 A' i表示数组 A' 中的第i 个元素,B' i表示数组 B' 中的第 i 个元素。 | 两个数组.cpp |
约翰正在接受命令。第 i个订单是由第 i个客户在 t i时间下的,需要 d i时间才能处理。客户收到订单的顺序是什么? (请参阅解决方案评论中的更多详细信息) | 订单_订单.cpp |
问题 | 解决方案 |
---|---|
您将获得一个数字字符串(例如“1234”、“567”等),根据我们在电话/移动拨号盘上看到的映射,提供我们可以从该数字字符串生成的所有可能的字母组合。如果您在老式手机中输入过短信,您就会知道。例如,“1”映射到“abc”,2 映射到“def”。你可以参考一下图片..
| dialpad_combinations.cpp |
实现通配符模式处理并支持“?” &' '。
| 通配符匹配.cpp |
给定一个 2D 棋盘和字典中的单词列表,从列表中找到棋盘上所有可能的单词。 (检查解决方案中的示例) | word_search.cpp |
问题 | 解决方案 |
---|---|
给定一个没有重复项的排序整数数组,返回其范围的摘要。例如,给定 [0,1,2,4,5,7],返回 ["0->2","4->5","7"]。 | 摘要_范围.cpp |
给定一个二维矩阵,具有以下属性
| 搜索2DII.cpp |
给定一个未排序的整数数组,找到第一个缺失的正整数。示例:[1,2,0] 应返回 3,[3,4,-1,1] 应返回 2。预期时间复杂度 O(n) 且解决方案应使用恒定空间 | 第一个缺失正数.cpp |
给定一个未排序的整数数组,找到最长连续元素序列的长度。例如:给定 [100, 4, 200, 1, 3, 2]。最长的连续元素序列是[1,2,3,4]。返回其长度:4。算法应以 O(n) 复杂度运行。 | 最长连续Seq.cpp |
给定两个已排序的整数数组 nums1 和 nums2,将 nums2 作为一个已排序数组合并到 nums1 中。您可以假设 nums1 有足够的空间(大小大于或等于 m + n)来容纳 nums2 中的其他元素。 nums1和nums2中初始化的元素数量分别为m和n。 | 合并数组.cpp |
给定一个非负整数数组,您最初位于数组的第一个索引处。数组中的每个元素代表您在该位置的最大跳跃长度。确定您是否能够到达最后一个索引。例如:
| 跳跃游戏.cpp |
给定一个正整数,返回 Excel 工作表中显示的相应列标题。例如 1 -> A、2 -> B、...26 -> Z、27 -> AA、28 -> AB、...705 -> AAC | excelColSheetTitle.cpp |
给定一个数组 nums,编写一个函数将所有 0 移至其末尾,同时保持非零元素的相对顺序。例如,给定 nums = [0, 1, 0, 3, 12],调用函数后,nums 应为 [1, 3, 12, 0, 0]。 | moveZeroes.cpp |
给定一个整数数组,查找该数组是否包含任何重复项。如果任何值在数组中至少出现两次,函数应返回 true;如果每个元素都不同,则函数应返回 false。 | 包含重复的.cpp |
给定一个列表,将列表向右旋转 k 个位置,其中 k 为非负数。例如:
| 旋转列表.cpp |
给定两个单词 word1 和 word2,找到将 word1 转换为 word2 所需的最少步骤数。 (每次操作计为1步。)。允许对单词进行以下 3 种操作:
| 编辑距离.cpp |
给定一棵二叉树,填充每个下一个指针以指向其下一个右侧节点。如果没有下一个右节点,则下一个指针应设置为 NULL。最初,所有 next 指针都设置为 NULL。您只能使用常量额外空间。您可以假设它是一个完美的二叉树(即,所有叶子都在同一级别,并且每个父节点都有两个子节点)。 | 连接下一个指针.cpp |
给定 n 对括号,编写一个函数来生成格式正确的括号的所有组合。例如,给定 n = 3,解集为“((()))”、“(()())”、“(())()”、“()(())”、“( )()()" | 生成括号.cpp |
给定一个包含从 0, 1, 2, ..., n 中选取的 n 个不同数字的数组,找到该数组中缺少的一个。例如,给定 nums = [0, 1, 3] 返回 2。 | 失踪号码.cpp |
假设已排序的数组在您事先未知的某个枢轴处旋转。 (即,0 1 2 4 5 6 7 可能变为 4 5 6 7 0 1 2)。求最小元素。您可以假设数组中不存在重复项。 | find_min_rotated.cpp |
给定一个包含 n 个整数的数组 S,在 S 中找到三个整数,使得总和最接近给定数字 target。返回三个整数的总和。您可以假设每个输入都有一个解决方案。 | ThreeSumClosest.cpp |
给定 n 个非负整数 a 1 , a 2 , ..., a n ,其中每个表示坐标 (i, a i ) 处的一个点。绘制 n 条垂直线,使得线 i 的两个端点位于 (i, a i ) 和 (i, 0) 处。找到两条线,它们与 x 轴一起形成一个容器,使得该容器包含最多的水。注意:容器不得倾斜。 | 最大面积.cpp |
给定一棵仅包含 0-9 数字的二叉树,每个根到叶路径都可以代表一个数字。一个例子是根到叶子路径 1->2->3,它代表数字 123。求所有根到叶子数字的总和。解决方案评论中的示例 | sumRootToLeafNumbers.cpp |
假设您有一个数组,其中第 i 个元素是给定股票在第 i 天的价格。如果您最多只被允许完成一笔交易(即买入一份股票并卖出一份股票),请设计一种算法来找到最大利润。 | 最大利润股票.cpp |
给定充满非负数的 amxn 网格,找到一条从左上角到右下角的路径,该路径最小化沿其路径的所有数字的总和。注意:在任何时间点您只能向下或向右移动。 | 最小路径.cpp |
计算小于非负数 n 的素数的数量。 | 质数计数.cpp |
假设只能使用从 1 到 9 的数字,并且每个组合应该是一组唯一的数字,请找出 k 个数字的所有可能组合,总和为数字 n。确保集合中的数字按升序排序。示例:对于 k = 3, n = 9 结果将是 [[1,2,6], [1,3,5], [2,3,4]],类似地对于 k = 3, n = 7,结果将是[[1,2,4]]。 | 组合Sum3.cpp |
给定一个非负整数 num,重复将其所有数字相加,直到结果只有一位数字。例如:给定 num = 38,过程如下:3 + 8 = 11, 1 + 1 = 2。由于 2 只有一位数字,因此返回它。跟进:你能在 O(1) 运行时中不使用任何循环/递归来完成它吗? | 添加数字.cpp |
给定一个单元格值为 0 或 1 的矩阵。找到从 (a1, b1) 到 (a2, b2) 的最短路径的长度,这样路径只能通过值为 1 的单元格构建,并且只能在 4 中行驶可能的方向,即左、右、上、下。 | 最短路径迷宫.cpp |
两个整数之间的汉明距离是对应位不同的位置的数量。给定两个整数 x 和 y,计算汉明距离。 | 汉明距离.cpp |
给定两棵二叉树,想象一下,当您将其中一棵树覆盖另一棵时,两棵树的某些节点重叠,而其他节点则不重叠。您需要将它们合并到一个新的二叉树中。合并规则是,如果两个节点重叠,则将节点值相加作为合并节点的新值。否则,NOT null 节点将被用作新树的节点。 | merge_trees.cpp |
编写一个函数,将字符串作为输入并仅反转字符串的元音。 | 反向元音.cpp |
给定一个字符串,根据字符出现的频率将其按降序排序。例如:
| 按频率排序Char.cpp |
除 Self 之外的数组的乘积。给定一个由 n 个整数组成的数组,其中 n > 1,nums,返回一个数组输出,使得 output[i] 等于 nums 中除 nums[i] 之外的所有元素的乘积。 | 产品_例外_自我.cpp |
给定一个已排序的数组,就地删除重复项并返回新的长度。数组中超出唯一元素大小的内容并不重要。预期 O(1) 空间复杂度和 O(n) 时间复杂度。 | 删除重复项.cpp |
计算网格中岛屿的数量。给定一个网格,1表示陆地,0表示水体,确定岛屿的数量(更多详细信息请参见问题评论) | 岛屿计数.cpp |
从数据流中查找中位数。设计一个数据结构,支持addNum向流中添加数字,findMedian返回目前为止看到的当前数字的中位数。另外,如果数字个数为偶数,则返回中间两个元素的平均值,否则返回中位数。 | 中值流.cpp |
删除最少数量的无效括号以使输入字符串有效。返回所有可能的结果。注意:输入字符串可能包含除括号 ( 和 ) 之外的字母 | 删除_无效_括号.cpp |
给定一个数组和一个值,就地删除该值的所有实例并返回新的长度。不要为另一个数组分配额外的空间,必须通过使用 O(1) 额外内存就地修改输入数组来完成此操作。元素的顺序可以更改。在新长度之外留下什么并不重要。 | 删除元素.cpp |
找到两个阵列/向量的交点,给定两个向量找到它们相互作用的结果。结果应仅包含独特的字符,并且可以按任何顺序 | Intersection_of_array.cpp |
给定模式和弦弦,请查找是否遵循相同的模式。以下内容意味着完整的匹配,因此图案中的字母与str中的非空词之间存在双重匹配。例子: | |
模式=“ abba”,str =“狗猫狗”应该返回true。 | |
模式=“ abba”,str =“狗猫鱼”应该返回假。 | |
模式=“ AAAA”,str =“狗猫狗”应该返回false。 | |
模式=“ abba”,str =“狗狗狗”应该返回假。 | word_pattern.cpp |
为您提供了一个数字向量,其中每个数字代表 | |
股票的价格。如果您只能完成 | |
每天一笔交易(即购买一张并出售一张股票),设计 | |
一种算法以找到最大利润。 | best_time_to_buy_sell.cpp |
给定一个句子,扭转一个句子中每个单词中字符的顺序,同时仍保留空格和初始单词顺序。 | |
例子: | |
输入:她喜欢巧克力 | |
输出:ehs sevol etalocohc | reverse_words.cpp |