
算法设计与分析
voidfaceless
这个作者很懒,什么都没留下…
展开
-
【快速排序】python实现快速排序及思路讲解
python实现快速排序def quick_sort(a, l, r): if l >= r: return m = par(a, l, r) quick_sort(a, l, m-1) quick_sort(a, m+1, r)def partition(a, l, r): x = a[r] i = l - 1 index = l while index < r: if a[index] &l原创 2020-06-26 15:47:37 · 492 阅读 · 0 评论 -
【Leetcode】面试题57 - II. 和为s的连续正数序列
题目输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]限制:1 <= target <=...原创 2020-03-06 18:52:36 · 157 阅读 · 0 评论 -
【Leetcode] 915.分割数组
题目给定一个数组 A,将其划分为两个不相交(没有公共元素)的连续子数组 left 和 right, 使得:left 中的每个元素都小于或等于 right 中的每个元素。left 和 right 都是非空的。left 要尽可能小。在完成这样的分组后返回 left 的长度。可以保证存在这样的划分方法。示例 1:输入:[5,0,3,8,6]输出:3解释:left = [5,0,3],...原创 2020-02-25 18:41:47 · 320 阅读 · 0 评论 -
【Leetcode】1129. 颜色交替的最短路径
题目在一个有向图中,节点分别标记为 0, 1, ..., n-1。这个图中的每条边不是红色就是蓝色,且存在自环或平行边。red_edges中的每一个 [i, j]对表示从节点i到节点j的红色有向边。类似地,blue_edges 中的每一个[i, j]对表示从节点 i 到节点j的蓝色有向边。返回长度为 n 的数组answer,其中 answer[X]是从节点0到节点X 的最短路径的长度,且路径...原创 2020-02-19 14:47:07 · 360 阅读 · 0 评论 -
【Leetcode】563. 二叉树的坡度
题目给定一个二叉树,计算整个树的坡度。一个树的节点的坡度定义即为,该节点左子树的结点之和和右子树结点之和的差的绝对值。空结点的的坡度是0。整个树的坡度就是其所有节点的坡度之和。示例:输入: 1 / \ 2 3输出: 1解释: 结点的坡度 2 : 0结点的坡度 3 : 0结点的坡度 1 : |2-3| = 1树的坡度 : 0 + 0 + 1 =...原创 2020-02-17 17:02:44 · 207 阅读 · 0 评论 -
【Leetcode】Leetcode143.重排链表
Leetcode143.重排链表题目给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3...原创 2019-12-04 09:27:11 · 196 阅读 · 0 评论 -
【Leetcode】Leetcode61.旋转链表
Leetcode61.旋转链表题目给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例 1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL...原创 2019-12-02 20:36:37 · 187 阅读 · 0 评论 -
【Leetcode】Leetcode86.分隔链表
Leetcode86.分隔链表题目给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例:输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5来源:力扣(LeetCode...原创 2019-12-02 20:11:59 · 156 阅读 · 0 评论 -
【Leetcode】19. 删除链表的倒数第N个节点
【Leetcode】19. 删除链表的倒数第N个节点题目给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?思路两个指针,一...原创 2019-11-30 22:19:17 · 110 阅读 · 0 评论 -
【Leetcode】Leecode 45. 两数相加 II
Leecode 45. 两数相加 II题目给定两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。进阶:如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。示例:输入: (7 -> 2 -> 4 -> 3) + (5 -...原创 2019-11-30 16:00:38 · 134 阅读 · 0 评论 -
【Leetcode】Leetcode 82. 删除排序链表中的重复元素 II
Leetcode 82. 删除排序链表中的重复元素 II题目给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。示例 1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例 2:输入: 1->1->1->2->3输出: 2->3来源:力扣(...原创 2019-11-26 23:19:40 · 180 阅读 · 0 评论 -
【Leetcode】Leetcode 206.反转链表
Leetcode 206.反转链表题目反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/r...原创 2019-11-24 12:47:41 · 172 阅读 · 0 评论 -
【Leetcode】Leetcode 75.颜色分类
Leetcode 75.颜色分类题目:给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解决方...原创 2019-11-23 19:44:54 · 156 阅读 · 0 评论 -
【Leetcod】Leetcode77.组合
Leetcode77.组合题目描述给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。示例:输入: n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/combina...原创 2019-11-18 20:21:37 · 155 阅读 · 0 评论 -
【Leetcode】Leetcode54.螺旋矩阵
Leetcode54.螺旋矩阵给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例 1:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例 2:输入:[[1, 2, 3, 4],[5, 6, 7, 8],[9,10,11,12...原创 2019-11-18 09:28:29 · 110 阅读 · 0 评论 -
【Leetcode】Leetcode66.加一
Leetcode66.加一题目:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1: 输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123。示例 2: 输入: [4,3,2,1] 输出: [4,3,...原创 2019-11-13 22:15:37 · 148 阅读 · 0 评论 -
Leetcode 58. 最后一个单词的长度
Leetcode 58. 最后一个单词的长度题目给定一个仅包含大小写字母和空格 ’ ’ 的字符串,返回其最后一个单词的长度。如果不存在最后一个单词,请返回 0 。说明:一个单词是指由字母组成,但不包含任何空格的字符串。示例:输入: "Hello World"输出: 5来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/lengt...原创 2019-11-12 20:16:11 · 188 阅读 · 0 评论 -
Leetcode83.删除排序链表中的重复元素
Leetcode83.删除排序链表中的重复元素给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/...原创 2019-11-11 20:32:07 · 118 阅读 · 0 评论 -
Leetcode21.合并两个有序链表
Leetcode21.合并两个有序链表1. 问题描述将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/me...原创 2019-11-08 20:09:04 · 167 阅读 · 0 评论 -
leetcode35.搜索插入位置
leetcode35.搜索插入位置题目:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,...原创 2019-11-06 09:37:06 · 124 阅读 · 0 评论 -
Leetcode.38报数
Leetcode.38报数报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:1112112111112211 被读作 “one 1” (“一个一”) , 即 11。11 被读作 “two 1s” (“两个一”), 即 21。21 被读作 “one 2”, “one 1” (“一个二” , “一个一”) , ...原创 2019-11-04 22:20:20 · 99 阅读 · 0 评论 -
华为机试——找出字符串中第一个只出现一次的字符
题目描述找出字符串中第一个只出现一次的字符 输入描述:输入一个非空字符串输出描述:输出第一个只出现一次的字符,如果不存在输出-1示例1输入asdfasdfo输出o思路:利用string的count()函数即可实现def func(str1): for ss in str1: if(str1.count(ss)==1): return ss ...原创 2018-07-09 10:22:46 · 278 阅读 · 0 评论 -
华为机试——称砝码
题目描述现有一组砝码,重量互不相等,分别为m1,m2,m3…mn;每种砝码对应的数量为x1,x2,x3...xn。现在要用这些砝码去称物体的重量,问能称出多少中不同的重量。 注:称重重量包括0 方法原型:public static int fama(int n, int[] weight, int[] nums)输入描述:输入包含多组测试数据。对于每组测试数据:第一行:n --- 砝码数(...原创 2018-07-09 10:08:29 · 980 阅读 · 0 评论 -
python应聘(1)——ljust()方法
1.Python ljust() 方法描述Python ljust() 方法返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。语法ljust()方法语法:str.ljust(width[, fillchar])参数width -- 指定字符串长度。fillchar -- 填充字符,默认为空格。返回值返回一个原字符串左对齐,并使用空格填充至指...原创 2018-04-09 20:59:18 · 1032 阅读 · 0 评论 -
python应聘(2)——容易采坑的round() 函数
Python round() 函数这个前段时间做华为在线编程题目时候遇到的坑,一直懒写,但是为了防止忘了,还是提前补上。题目贴在下面:https://www.nowcoder.com/practice/3ab09737afb645cc82c35d56a5ce802atpId=37&tqId=21230&tPage=1&rp=&ru=%2Fta%2Fhuawei&am...原创 2018-04-09 21:10:28 · 870 阅读 · 0 评论 -
剑指offer(4)
剑指offer(4)题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。二叉树有三种遍历方法,分别是:前序、中序、后序遍历。首先,我们看看前序、中序、后序遍历的特性: 前序遍历: 1原创 2017-08-15 20:36:33 · 318 阅读 · 0 评论 -
华为机试——表示数字
题目描述将一个字符中所有出现的数字前后加上符号“*”,其他字符保持不变 public static String MarkNum(String pInStr) { return null; }输入描述:输入一个字符串输出描述:字符中所有出现的数字前后加上符号“*”,其他字符保持不变示例1输入Jkdi234klowe90a3输出Jkdi*234*klowe*90*a*3*思路:前后如果分...原创 2018-07-09 11:12:15 · 383 阅读 · 0 评论 -
华为机试——记票统计
题目描述请实现接口:unsigned int AddCandidate (char* pCandidateName);功能:设置候选人姓名输入: char* pCandidateName 候选人姓名输出:无返回:输入值非法返回0,已经添加过返回0 ,添加成功返回1 Void Vote(char* pCandidateName);功能:投票输入: char* pCandidateName 候选人姓...原创 2018-07-09 21:36:51 · 573 阅读 · 0 评论 -
机试——字符串匹配
题目描述题目标题:判断短字符串中的所有字符是否在长字符串中全部出现详细描述:接口说明原型:boolIsAllCharExist(char* pShortString,char* pLongString);输入参数: char* pShortString:短字符串 char* pLongString:长字符串 输入描述:输入两个字符串。第一个为短字符,第二个为长字符。输出描述:返回...原创 2018-07-10 09:39:22 · 355 阅读 · 0 评论 -
2019阿里巴巴大规模图计算小组面试感悟
昨天下午面了阿里巴巴大规模图计算小组。先说结论,应该是没戏了。刚开始是聊项目,让我介绍了一个比较有趣的项目,之后又谈了实际的业务,还聊了关于图计算、个性化推荐的一些,问了我树的深度对效果有什么影响?问了GBDT既然是很多树,为什么会过拟合?问了模型优化有哪些途径?问了特征有哪些提取的思路?问了多模型有哪些融合的方式?问了我调参有哪些途径?之后是让我写代码,说实话,这才是最打击我的地方,...原创 2018-07-17 20:44:54 · 968 阅读 · 0 评论 -
最大堆、最大堆的应用及其python实现
堆是一个数组,它可以被看成一个近似的完全二叉树,树上的每一个节点对应数组的一个元素。除了最底层外,该树是完全充满的,而且是从左到右填充的。堆一般可以分为两种形式:最大堆和最小堆。最大堆是指,根节点的值大于其孩子节点的值;最小堆是指,根节点的值小于其孩子节点的值。A.length表示数组元素的个数,A.heap-size表示有多少个堆元素,left表示i节点的左节点,如下图所示,left =...原创 2018-07-26 16:54:52 · 4957 阅读 · 0 评论 -
剑指offer——合并链表
题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。其实这题考的是归并排序。很简单,贴出代码:# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next = None...原创 2018-07-22 16:02:32 · 148 阅读 · 0 评论 -
剑指offer——树的子结构
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)递归思想,看每一个节点是否对应相当就好了。先判断B是不是当前节点的子树,不是再判断B是否是A的左子树的子树,然后B是否是A的左子树的子树。中间有几个注意的,如果A遍历完了,而B没完,说明B比A大,不是子树;如果A完了,B完了;如果A没完,B完了,同时所有节点都能对上,就说明B是A的子树。返回True...原创 2018-07-22 16:40:42 · 149 阅读 · 0 评论 -
算法分析与设计基础(1)汉诺塔问题
问题描述就不说了,自行百度。问题求解的思路本来想用文字描述一下的,结果发现知乎上有人发了个图,我觉得解释的十分清楚。下面贴图:总结出来一共就三步:将底盘n以上的环(n-1个)移动到B将底盘n从A移动到C将B上的环(n-1个)移动到C下面贴上java实现代码:import java.util.Scanner;publ原创 2017-05-04 10:03:21 · 1331 阅读 · 0 评论