Python面试练习题(现已支持代码风格)
星标历史
更新
问题 | 链接 |
---|---|
给定一个整数数组,找出相邻元素的最大乘积并返回该乘积。 | adjacentElementProduct.py |
将字符串"123"转换为123,不使用内置函数int() 。 | atoi.py |
给定一个数组,判断数字是否存在,实现二分查找的递归 方法。如果元素未找到则返回-1。 | binary_search_recursive.py |
Bresenham直线算法(BLA)是计算机图形学中最早开发的算法之一,用于绘制直线。 | bresenham_line_algorithm.py |
找出二叉搜索树中在给定范围内的节点数。 | bst_nodes_in_range.py |
冒泡排序 | bubbleSort.py |
计算任意给定时间时钟的时针和分针之间的夹角。假设是模拟时钟。 | calculateClockAngle.py |
给定两个长度为m和n的字符串,找出需要从两个字符串中删除多少个字符才能使它们成为彼此的变位词。 | check_anagrams.py |
在给定范围内找出半素数。半素数是两个素数的乘积,不一定是不同的素数。素数的平方也是半素数。 | check_semiprime.py |
给定一个图,有两种遍历方法:1. 深度优先搜索(DFS) 2. 广度优先搜索(BFS) | dfs_bfs.py |
树的直径(有时称为宽度)是两个端节点(最左叶节点和最右叶节点)之间最长路径上的节点数。 | diameterOfTree.py |
使用随机分布估算π值 | estimate_pi.py |
编写一个高效程序,打印数组中k个最大的元素。数组中的元素可以是任意顺序。 | find_k_largest.py |
给定一个链表,此方法将返回倒数第m个元素。2->3->4->8->5; m=2将返回8,因为8是倒数第二个。 | find_m_to_last_llist.py |
给定一个数字数组,找出所有和为k 的数字对。 | find_pairs_sum_k.py |
给定一个数字数组,找出所有乘积为k 的数字对。 | find_products_pair_k.py |
给定一个整数数组,编写一个函数,如果存在满足a^2 + b^2 = c^2的三元组(a, b, c),则返回true。 | find_pythagoras_triplet.py |
给定一个二叉树,找出其中第二大的节点。 | find_second_largest_in_binary_tree.py |
编写一个函数,计算前100个斐波那契数。 | first_n_fibo.py |
给定一个输入字符串,找出其中第一个不重复的字符。 | first_non_repeating.py |
给定一个输入字符串,找出其中第一个重复的字符。 | first_recurring_character.py |
给定一个字符串,找出其中第一个不重复的字符。例如,如果输入字符串是"GeeksforGeeks",则输出应为'f';如果输入字符串是"GeeksQuiz",则输出应为'G'。 | first_unique_letter.py |
编写一个函数,给定一个非负整数列表,将它们排列成可能形成的最大数字。例如,给定[50, 2, 1, 9],形成的最大数字是95021。 | gen_largest_num_frm_list.py |
Python中的树数据结构 | general_tree_structure.py |
给定所有到达火车站的列车的到达和离开时间,任务是找出火车站所需的最小月台数,以确保没有列车需要等待。 我们有两个数组,分别表示停靠列车的到达和离开时间。 | getMinPlatforms.py |
打印字符串中的重复字符 | get_dup_chars.py |
检查给定数组是否有和为零的子数组 | hasZeroSumSubArray.py |
给定一个字符串,检查它是否只包含数字 | has_only_digits.py |
给定两个经纬度坐标,计算它们之间的Haversine 距离 | haversine.py |
堆数据结构 | heap_structure.py |
不使用任何数字或整数打印1到100的数字 | hundred_without_int.py |
编写一个程序将整数转换为罗马数字表示 | interger_to_roman_num.py |
给定两个大小为m和n的有序数组,其中所有元素都是不同的。找出它们之间的共同元素。 | intersection_arrays.py |
检查矩阵是否对称 | isMatrixSymmetric.py |
检查两个字符串是否互为变位词 | is_anagram.py |
检查两个字符串是否互为变位词 | is_anagram_using_collections.py |
编写一个程序检查一个数字是否是回文数 | is_num_palindrome.py |
给定一个字符串,如果它是数字类型返回True,否则返回False | is_numeric.py |
N个士兵站成一圈,第一个人拿着剑,他杀死第二个人并把剑交给第三个人,依此类推直到第99个人杀死第100个人并把剑还给第一个人,如此循环直到只剩下一个人幸存。打印出幸存者。 | josephus.py |
这个改进版本的有效时间复杂度为O(logN)。问题描述请参考josephus.py | josephus_improved.py |
这个改进版本的有效时间复杂度为O(1)。问题描述请参考josephus.py | josephus_improved_v3.py |
实现Karatsuba算法 | karatsuba.py |
实现二叉树的层序遍历 | level_order_tree.py |
链表数据结构 | linked_list_data_structure.py |
检测链表是否有环 | loop_in_linkedlist.py |
在二叉搜索树中找到两个节点的最低公共祖先。设T是一个有根树。两个节点n1和n2的最低公共祖先定义为T中最低的同时包含n1和n2作为后代的节点(允许节点是自身的后代)。n1和n2在T中的LCA是距根最远的n1和n2的共同祖先。 | lowest_common_ancestor.py |
在大小为n的数组A[]中,出现次数超过n/2的元素称为多数元素。在给定数组中找出多数元素。 | majority_element.py |
不使用内置函数找出数组中的最大数 | max_in_array.py |
给定一个包含正数和负数的列表,找出最大子数组和。约束:在O(n)时间内解决 | maximum_subarray_sum.py |
归并排序的实现 | merge_sort.py |
在单次循环中找出数组中的最小和最大数 | min_max_array_oneLoop.py |
给定一个整数数组,需要将所有零移到末尾并保持其他元素的顺序不变。这应该是一个原地解决方案 | move_zeros_to_end.py |
打印二叉树中没有兄弟的节点 | no_sibling_tree.py |
让所有奇数排在偶数之前,并将奇数按升序排列,偶数按降序排列。例如,字符串'1982376455'变为'1355798642' | oddAscEvenDesc.py |
计算并打印给定层数的帕斯卡三角形 | pascal_triangle.py |
使用阶乘,将程序的时间复杂度从O(2^N)降低到O(N) | pascals_triangle_improved.py |
打印字符串的全排列 | permutations.py |
打印字符串的全排列(简化版) | permute_strings.py |
二叉搜索树的迭代前序遍历 | preorder_iterative_bst.py |
优先队列的实现 | priority_queue_simple.py |
将字符串"k:1 | k1:2 |
给定一个包含n个整数的数组arr[],构造一个大小相同的乘积数组prod[],使得prod[i]等于arr[]中除arr[i]外所有元素的乘积。 | product_puzzle.py |
队列数据结构的实现 | queue_data_structure.py |
快速排序的实现 | quick_sort.py |
编写一个高效的函数,从ASCII字符串中删除在remove中存在的任何字符。例如,给定str为"Battle of the Vowels: Hawaii vs. Grozny",remove为"aeiou",函数应将str转换为"Bttl f th Vwls: Hw vs. Grzny"。 | remove_chars.py |
从字符串中删除重复字符 | remove_dup_chars.py |
使用字典删除重复项 | remove_duplicates.py |
使用额外空间删除重复项 | remove_duplicates_v2.py |
原地反转字符串 | reverse_in_place.py |
使用递归反转字符串 | reverse_str_recursive.py |
给定一个句子,反转每个单词但不反转整个句子 | reverse_words.py |
给定一个矩阵,将其旋转180度 | rotateMatrix180Deg.py |
从整数数据流中找出中位数 | running_median_integers.py |
给定一个排序数组,其中所有元素都出现两次(一个接一个),只有一个元素出现一次。找出该元素。约束:时间复杂度为O(log n)。 | search_unique.py |
选择排序的简单实现 | selection_sort.py |
栈数据结构的简单实现 | stack_data_structure.py |
股票价格的跨度Si在给定的第i天被定义为恰好在给定日期之前的最大连续天数,在这些天中,股票的当前价格小于或等于给定日的价格。 问题:我们有一系列n天的股票每日报价,需要计算所有n天的股票价格跨度 | stock_span.py |
编写一个程序,使用递归对给定数组求和 | sum_array_recursion.py |
你正在接收两个以日期为键的数据流,合并这两个流,如果有共同日期则返回值的平均数,否则仅更新流中接收到的值,参考代码中的示例 | timeseries.py |
给定两个大小分别为m和n的已排序数组,其中所有元素都是不同的。以O(m+n)的复杂度找出它们的并集 | union_arrays.py |
用户名验证程序 | username_validation.py |
给定一个整数数组(包含正数、负数和0),找出所有给定值的乘积的符号 | signOfProduct.py |
可用问题:已解决 -- 63 个;新增 -- 57 个
1. 新增代码风格
2. 在 Interview_Questions.md
中新增 57 个问题。解决方案即将上传。
40+ 个常见代码和面试问题已用 Python 解决(数量持续增加中...)
核心理念是不使用内置函数或库,而采用更加基于逻辑的方法,以便于不同编程语言使用,避免成为另一个"Python 技巧和窍门"仓库。
代码质量如何?
- 经过充分测试
- 格式一致(使用 Black)
- 当前状态可编译(基本没有问题)
有多少支持?
- 常见问题解答(即将推出)
- 文档(即将推出)
问题
欢迎提交问题和改进建议。
贡献
请参考每个项目的风格指南和提交补丁及新增内容的指南。通常,我们遵循"fork-and-pull"Git 工作流程。
- 在 GitHub 上 Fork 仓库
- 将项目 Clone 到您自己的机器上
- 将更改 Commit 到您自己的分支
- 将您的工作 Push 到您的 fork
- 提交 Pull request,以便我们审核您的更改
注意:在提交拉取请求之前,请确保合并最新的"上游"更改!
许可证
MIT 许可证