Algorithm
算法
博弈星宇
Keep Running!
展开
-
程序员面试算法宝典-6.1如何判断一个自然数是否是某个数的平方
# 判断一个自然数是否是某个数的平方""""直接计算法"""def isPower1(n): if n<=0: print(n+"不是自然数") return False i = 1 while i<n: m = i*i if m==n: return True ...原创 2019-05-23 10:15:55 · 326 阅读 · 0 评论 -
程序员面试算法宝典-2.1 如何实现栈
题目描述:实现一个栈的数据结构,使其具有以下方法:压栈、弹栈、取栈顶元素、判断栈是否为空以及获取栈中元素个数。分析与解答:栈的实现有两种方法,分别采用数组来实现和采用链表来实现。# 方法一:用数组实现栈class MyStack(): # 模拟栈 def __init__(self): self.items=[] # 判断栈是否为空 ...原创 2019-03-12 20:13:48 · 132 阅读 · 0 评论 -
Leedcode: 96.不同的二叉搜索树
题目:二叉搜索树定义:左子树的节点均小于根(root)节点,右子数的节点均大于根(root)节点。Approach one:注:容易理解,但是时间复杂度大。分析:当给定n时,要求出有n个节点的不重复的二叉查找树。1.在n个节点中,有n中方式可以作为树的根节点;2.当i为根节点时,1~i-1都在根节点的左子树上,i+1~n都在根节点的右子树上,而左右子树也都是二叉查找...原创 2018-12-07 17:43:54 · 180 阅读 · 0 评论 -
程序员面试算法宝典-2.2 如何实现队列
题目描述:实现一个队列的数据结构,使其具有入队列、出队列、查看队列首尾元素、查看队列大小功能等。分析与解答:与实现栈的方法类似,队列的实现也有两种方法,分别为采用数组来实现和采用链表来实现。# 实现队列class MyQueue(): def __init__(self): self.arr=[] self.front=0 # 队列头 ...原创 2019-03-12 20:18:45 · 110 阅读 · 0 评论 -
程序员面试算法宝典-1.3 如何计算两个单链表所代表的数之和
题目描述:给定两个单链表,链表的每个结点代表一位数,计算两个数的和。例如:输入链表(3->1->5)和链表(5->9->2),输出:8->0->8,即513+295=808,注意个位数在链表头。"""链表"""# 定义链表的结点class LNode(): def __init__(self): self.data = No...原创 2019-03-11 19:51:39 · 229 阅读 · 0 评论 -
Leedcode: 102. 二叉树的层次遍历
题目:给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]解题:class Solution: de...原创 2018-12-19 16:57:42 · 98 阅读 · 0 评论 -
Leedcode: 1.两数之和
题目:给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]...原创 2018-12-17 17:47:23 · 106 阅读 · 0 评论 -
程序员面试算法宝典-1.1 如何实现链表的逆序
题目描述:给定一个带头结点的单链表,请将其逆序。即如果单链表原来为 head->1->2->3->4->5->6->7,那么逆序后变为head->7->6->5->4->3->2->1。class LNode: def __init__(self): self.data = Non...原创 2019-02-28 22:22:12 · 190 阅读 · 0 评论 -
随笔1(上楼梯, 每步只能上一个或者连个楼梯)
# approach one(利用递归的思想) 时间复杂度O(2^N)def total_paths(N): if N<1: return 0 if N==1: return 1; if N==2: return 2; # 递归 F(n) = F(n-1) + F(n-2) return total_...原创 2018-12-21 11:55:45 · 330 阅读 · 0 评论 -
程序员面试算法宝典-1.6 如何检测一个较大的单链表是否有环
# 声明类结点class LNode(): def __init__(self): self.data = None # 数据域 self.next = None # 指针域# 构造链表def ConstructList(): head = LNode() cur = head i = 1 while i<8:...原创 2019-06-22 19:40:35 · 143 阅读 · 0 评论 -
程序员面试算法宝典-3.2 如何把一个有序整数数组放到二叉树中
题目描述:如何把一个有序整数数组放到二叉树中分析与解答:取数组的中间元素作为根节点,将数组分成左右两部分,对数组的两部分用递归的方法分别构建左右子树。# 实现队列class BiTNode: def __init__(self): self.data = None self.lchild = None self.rchil...原创 2019-04-18 17:11:33 · 239 阅读 · 0 评论 -
字节跳动-提高文章质量
算法:class Solution(): def solution(self): sentence=[] """处理输入的数据,提高文章质量""" # 读取文本文件内容 with open("E:\\improve_title_quality.txt","r") as f: str = f....原创 2019-01-08 01:04:33 · 669 阅读 · 0 评论 -
程序员面试算法宝典-1.10 如何在只给定单链表中某个结点的指针的情况下删除该结点
# 如何在只给定单链表中某个结点的指针的情况下删除该结点class LNode(): def __init__(self): self.data = None # 数据域 self.next = None # 指针域# 输出链表def PrintList(head): cur = head.next while cur!=None:...原创 2019-06-22 19:47:01 · 214 阅读 · 0 评论 -
程序员面试算法宝典-1.5 如何找出单链表中的倒数第K个元素
题目描述:找出单链表中的倒数第k个元素,例如给定单链表:1->2->3->4->5->6->7,则单链表的倒数第k=3个元素为5。# 如何找出单链表中的倒数第K个元素# 定义链表class LNode(): def __init__(self): self.data = None # 定义数据域 self.n...原创 2019-06-11 20:36:49 · 168 阅读 · 0 评论 -
程序员面试算法宝典-4.1 如何找出数组中唯一重复的元素
题目描述:数字1-1000放在含有1001个元素的数组中,其中只有唯一的一个元素值重复,其他数字均只出现一次。设计一个算法,将重复元素找出来,要求每个数组元素只能访问一次。"""方法功能:在数组中找唯一重复的元素输入参数:array:数组对象的引用返回值:重复元素的值,如果无重复元素则返回-1"""# 使用字典def findDup1(array): if array...原创 2019-05-06 16:33:02 · 290 阅读 · 0 评论 -
程序员面试算法宝典-1.12 如何展开链接列表
class MergeList: def __init__(self): self.head = None def mergeList2(self, a, b): if a == None: return b if b == None: return a # 把两个链...原创 2019-06-22 19:51:01 · 536 阅读 · 0 评论 -
程序员面试算法宝典-1.8 如何把链表以K个结点为一组进行翻转
# 如何把链表以K个结点为一组进行翻转# 声明类结点class LNode(): def __init__(self): self.data = None # 数据域 self.next = None # 指针域# 对不带头结点的单链表翻转def Reverse(head): if head==None and head.next==N...原创 2019-06-22 19:43:51 · 141 阅读 · 0 评论 -
程序员面试算法宝典-8.1~8.8 选择排序、插入排序 、冒泡排序、 归并排序、 快速排序、 希尔排序、 堆排序、 基数排序
# 选择排序def select_sort(lists): count = len(lists) for i in range(0, count): min = i for j in range(i+1, count): if lists[min]>lists[j]: min = j...原创 2019-06-22 19:56:30 · 149 阅读 · 0 评论 -
程序员面试算法宝典-3.3 如何从顶部开始逐层打印二叉树结点数据
题目描述:如何从顶部开始逐层打印二叉树结点数据。分析与解答:采用队列来存储当前遍历到的结点的孩子结点,从而实现二叉树的层序遍历。from collections import dequeclass BiTNode: def __init__(self): self.data = None self.lchild = None ...原创 2019-04-18 19:23:56 · 167 阅读 · 0 评论 -
Leedcode: 120. 三角形最小路径和
题目:给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为11(即,2+3+5+1= 11)。说明:如果你可以只使用 O(n)的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会...原创 2018-12-19 18:35:01 · 103 阅读 · 0 评论 -
程序员面试算法宝典-1.9 如何合并两个有序链表
# 声明类结点class LNode(): def __init__(self): self.data = None # 数据域 self.next = None # 指针域# 创建单链表def ConstructList(start): i = start head = LNode() cur = head whi...原创 2019-06-22 19:45:44 · 168 阅读 · 0 评论 -
程序员面试算法宝典-1.4 如何对链表进行重新排序
题目描述:给定链表L0->L1->L2...->Ln,把链表重新排序为L0->Ln->l1->Ln-1->L2->Ln-2...。要求:(1)在原来链表的基础上进行排序,既不能申请新的结点;(2)只能修改结点的next域,不能修改数据域。# 声明类结点class LNode: def __init__(self): ...原创 2019-06-11 16:04:44 · 239 阅读 · 0 评论 -
程序员面试算法宝典-1.11 如何判断两个单链表(无环)是否交叉
# 声明结点class LNode(): def __init__(self): self.data = None # 数据域 self.next = None # 指针域# 判断两个链表是否相交def IsIntersect(head1, head2): if head1==None or head1.next==None or head...原创 2019-06-22 19:48:43 · 198 阅读 · 0 评论 -
Leedcode: 4. 寻找两个有序数组的中位数
题目:给定两个大小为 m 和 n 的有序数组nums1 和nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为O(log(m + n))。你可以假设nums1和nums2不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4...原创 2018-12-17 21:30:48 · 101 阅读 · 0 评论 -
程序员面试算法宝典-1.7 如何把链表相邻元素翻转
# 如何把链表相邻元素翻转# 声明类结点class LNode(): def __init__(self): self.data = None # 数据域 self.next = None # 指针域# 创建链表def ConstructList(): head = LNode() temp = head i = 1 ...原创 2019-06-22 19:42:25 · 147 阅读 · 0 评论 -
Leedcode: 62. 不同路径
题目:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?说明:m和 n 的值均不超过 100。示例1:输入: m = 3, n = 2输出: 3...原创 2018-12-19 14:46:19 · 143 阅读 · 0 评论 -
程序员面试算法宝典-1.2 如何从无序链表中移除重复项
题目描述:给定一个没有排序的链表,去掉其重复项,并保留原顺序,例如链表1->3->1->5->5->7,去掉重复项后变为1->3->5->7。class LNode(): def __init__(self): self.data = None # 数据域 self.next = None # 指针域...原创 2019-03-11 19:45:01 · 241 阅读 · 0 评论 -
面试题32:从上到下打印二叉树
# 面试题32:从上到下打印二叉树# 定义二叉树节点class BinaryTreeNode: def __init__(self, val): self.val = val self.left = None self.right = Noneclass Solution: # 从上到下按层打印 def Print_...原创 2019-08-22 22:01:19 · 121 阅读 · 0 评论 -
面试题31:栈的压入、弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路:定义一个辅助栈,并把压栈序列的数字依次压入辅助栈。 如果下一个弹出的数字刚好...原创 2019-08-22 15:35:22 · 161 阅读 · 0 评论 -
面试题30:包含min函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。在该栈中,调用min、push、pop的时间复杂度都是O(1)class Solution: def __init__(self): self.stack = [] # 数据栈 self.minStack = [] # 辅助栈 def push(self, node)...原创 2019-08-22 10:34:37 · 109 阅读 · 0 评论 -
面试题29:顺时针打印矩阵
# -*- coding:utf-8 -*-class Solution: # matrix类型为二维列表,需要返回列表 def printMatrix(self, matrix): # write code here if not matrix or len(matrix) <= 0 or len(matrix[0]) <= 0:...原创 2019-08-22 10:43:18 · 197 阅读 · 0 评论 -
面试题28:对称的二叉树
# 定义树节点class BinaryTreeNode: def __init__(self, data=None, left=None, right=None): self.data = data self.left = left self.right = right# 对称二叉树class Solution: # 判断是...原创 2019-08-13 14:53:17 · 118 阅读 · 0 评论 -
面试题27:二叉树的镜像
题目: 请完成一个函数,输入一棵二叉树,该函数输出它的镜像。# 定义二叉树节点class BinaryTreeNode: def __init__(self, data=None, left=None, right=None): self.data = data self.left = left self.right = right...原创 2019-08-13 10:40:46 · 94 阅读 · 0 评论 -
面试题26:树的子结构
题目:输入两棵二叉树A和B,判断B是不是A的子结构。解题思路:递归,注意空指针的情况。# 判断B树是否是A树的一个子树# 定义树节点class BinaryTreeNode: def __init__(self, data=None, left=None, right=None): self.data = data # 树节点数字 se...原创 2019-08-12 22:29:30 · 146 阅读 · 0 评论 -
面试题25:合并两个排序的链表
# 声明类结点class LNode(): def __init__(self): self.data = None # 数据域 self.next = None # 指针域 # 创建单链表def ConstructList(start): i = start head = LNode() cur = head wh...原创 2019-08-12 15:35:56 · 99 阅读 · 0 评论 -
面试题24:反转链表
解题思路:注意反转时出现断裂现象,定义3个指针,分别指向当前遍历到的节点pNode、它的前一个节点pPrev及后一个节点pNext。# 定义结点class LNode: def __init__(self): self.data = None self.next = Noneclass Solution: # 创建链表 def C...原创 2019-08-12 15:25:48 · 111 阅读 · 0 评论 -
面试题23:链表中环的入口结点
解题分析:其实此题可以分解为三个题目:1)如何判断一个链表中是否包含环?2)如何找到环的入口节点?3)如何得到环中节点的数目?解决此题:可以设置两个指针,一快一慢。1.两个指针一个fast、一个slow同时从一个链表的头部出发 fast一次走2步,slow一次走一步,如果该链表有环,两个指针必然在环内相遇,(如果相遇就证明此链表包含环,否则没有环,解决问题1)2.1 此时只需要把...原创 2019-08-10 14:10:44 · 107 阅读 · 0 评论 -
面试题22:链表中倒数第K个结点
题目:输入一个链表,输出该链表中倒数第k个结点。解题思路:为了实现只遍历链表一次就能找到倒数第k个节点,我们可以定义两个指针。让第一个指针先向前走k-1步,第二个指针保持不动;从第k步开始,第二个指针也开始从链表的头指针开始遍历。由于两个指针的距离保持在k-1,当第一个指针到达链表的尾节点时,第二个指针刚好到达倒数第k个节点。# 声明链表结点class LNode: def _...原创 2019-08-09 17:06:36 · 164 阅读 · 0 评论 -
面试题21:调整数组顺序使奇数位于偶数前面
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。解题思路:使用两个指针,第一个指针初始化指向数组的第一个数字,从前向后移动,遇到偶数就停下来;第二个指针指向数组的最后一个数字,从后向前移动,遇到奇数就停下来,交换两个指针指向的元素,直到两个指针相遇。class Solution: def ReorderOd...原创 2019-08-04 14:34:50 · 83 阅读 · 0 评论 -
面试题20:表示数值的字符串
题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。思路:表示数值的字符串遵循模式A[.[B]][e/EC] 或者.B[e/EC],其中A为数值的整数部门,B为小数部分,C紧跟着e或E为指数部分...原创 2019-08-02 08:28:57 · 143 阅读 · 0 评论