文章分类 -  剑指offer

摘要:题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4] 阅读全文
posted @ 2019-07-05 20:49 天涯海角路 阅读(133) 评论(0) 推荐(0) 编辑
摘要:二、题目 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}。 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4] 阅读全文
posted @ 2019-07-05 20:44 天涯海角路 阅读(77) 评论(0) 推荐(0) 编辑
摘要:题目 题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 思路 虽然一看就知道是使用位运算做这个题目,但还是没做出来。 先理解一下10进制是如何做加法的。例如5+7=12,分为3步。 对于10进制,还是用到了加法和乘法运算。 对于2进制的计算也是一样的,由于二进制的 阅读全文
posted @ 2019-07-05 17:59 天涯海角路 阅读(163) 评论(0) 推荐(0) 编辑
摘要:题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。输入为num1和num2方法不能用+-*/,那么只能用位运算来进行计算,可以把二进制像十进制加法一样,按位相加,满2进1,然后可以发现: 按位相加时,0和1相加等于1,0和0、1和1相加等于1,与^运算的结果相同, 阅读全文
posted @ 2019-07-05 17:58 天涯海角路 阅读(110) 评论(0) 推荐(0) 编辑
摘要:前面已经介绍了java实现单链表:http://www.cnblogs.com/lixiaolun/p/4643886.html 其实两者的主要差别就在于如何判断是否到了链表的结尾: 在单链表中 1 2 3 4 while(temp.next!=null) { temp=temp.next; } 1 阅读全文
posted @ 2019-07-05 17:27 天涯海角路 阅读(126) 评论(0) 推荐(0) 编辑
摘要:import java.util.Stack; public class Reverse { public static void reverse(String str){ Stack st=new Stack(); StringBuffer sb; int i=0; while(i<str.l... 阅读全文
posted @ 2019-07-05 17:13 天涯海角路 阅读(79) 评论(0) 推荐(0) 编辑
摘要:题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a 阅读全文
posted @ 2019-07-05 16:24 天涯海角路 阅读(74) 评论(0) 推荐(0) 编辑
摘要:本文首发于我的个人博客:尾尾部落 题目描述 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 解题思路 法一:递归法。求二叉树的深度,就是求左子树、右子树的中深度最大的加上一个根节点,依此递归即可。 法二:层次遍历。每遍历一层, 阅读全文
posted @ 2019-07-04 17:33 天涯海角路 阅读(124) 评论(0) 推荐(0) 编辑
摘要:题目描述:给定一个数组arr,数组中的元素有整数也有负数,数组中的一个或者连续多个数组成一个子数组。求所有子数组里面的最大和。例如现在有数组 {1 , -2 , 3 , 10 , -4 , 7 , 2 , -5 }。思路:1.用暴力的方法,找出所有可能的子数组,然后找和最大的那个。这是可行的,但是时 阅读全文
posted @ 2019-07-04 15:50 天涯海角路 阅读(104) 评论(0) 推荐(0) 编辑
摘要:题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1 阅读全文
posted @ 2019-07-04 15:43 天涯海角路 阅读(80) 评论(0) 推荐(0) 编辑
摘要:快速排序最优的情况就是当关键值位于序列中间时快速排序最坏的情况就是对已序的序列进行排序时间复杂度:O(N^2)最差使用场景:数据量大而杂乱的序列,避免出现最坏的情况快速排序递归算法之分治法基本思路:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放 阅读全文
posted @ 2019-07-04 10:41 天涯海角路 阅读(706) 评论(0) 推荐(0) 编辑
摘要:快速排序算法快速排序算法的思想:分治法这里写图片描述快速排序算法——递归方法一:左右指针法基本思路:1.将数组的最后一个数right作为基准数key。2.分区过程:从数组的首元素begin开始向后找比key大的数(begin找大);end开始向前找比key小的数(end找小);找到后然后两者交换(s 阅读全文
posted @ 2019-07-04 10:40 天涯海角路 阅读(667) 评论(0) 推荐(0) 编辑
摘要:快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想 分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。总的说来,要直接默写出快速排序还是有一 阅读全文
posted @ 2019-07-04 10:34 天涯海角路 阅读(113) 评论(0) 推荐(0) 编辑
摘要:快速排序是冒泡排序的改进版,也是最好的一种内排序,在很多面试题中都会出现,也是作为程序员必须掌握的一种排序方法。 思想:1.在待排序的元素任取一个元素作为基准(通常选第一个元素,但最的选择方法是从待排序元素中随机选取一个作为基准),称为基准元素; 2.将待排序的元素进行分区,比基准元素大的元素放在它 阅读全文
posted @ 2019-07-04 10:26 天涯海角路 阅读(162) 评论(0) 推荐(0) 编辑
摘要:快速排序的多种思路实现: 两边想中间靠拢: // 两边想中间靠拢,当a[left]<key a[right]>key时,两者交换 int PartSortBothSize(int *a, int left, int right) { assert(a != NULL); int key = a[ri 阅读全文
posted @ 2019-07-04 10:23 天涯海角路 阅读(381) 评论(0) 推荐(0) 编辑
摘要:快速排序算法是基于分治策略的另一个排序算法。 该方法的基本思想是: 1.先从数列中取出一个数作为基准数,记为x。 2.分区过程,将不小于x的数全放到它的右边,不大于x的数全放到它的左边。(这样key的位置左边的没有大于key的,右边的没有小于key的,只需对左右区间排序即可) 3.再对左右区间重复第 阅读全文
posted @ 2019-07-04 10:19 天涯海角路 阅读(325) 评论(0) 推荐(0) 编辑
摘要:目录 快排与冒泡排序比较快排分析代码如下: 测试结果: partion函数的应用(第k大数 力扣703)传统的堆(priority_queue)排序解决第k大数代码:堆排序结果:快排partion解决代码:partion思路结果:快排与冒泡排序比较相同:快速排序也属于交换排序,通过元素之间的比较和交 阅读全文
posted @ 2019-07-04 10:10 天涯海角路 阅读(320) 评论(0) 推荐(0) 编辑
摘要:想要了解快速排序,我们将其与冒泡排序加以对比说明。快速排序(都是交换排序:通过元素之间的比较和交换位置来达到排序的目的)是从冒泡排序演变而来的算法,但是比冒泡排序要高效得多。因为其使用了【分治法】。快速排序的操作过程:在每一轮挑选一个基准元素,并让其他比他大的元素移动到数列一边,比他小的元素移动到数 阅读全文
posted @ 2019-07-04 10:04 天涯海角路 阅读(362) 评论(0) 推荐(0) 编辑
摘要:算法介绍 编辑 快排图 设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它左边,所有比它大的数都放到它右边,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在 阅读全文
posted @ 2019-07-04 09:31 天涯海角路 阅读(227) 评论(0) 推荐(0) 编辑
摘要:快速排序的时间复杂度为O(nlogn),空间复杂度为O(n)。根据@张小牛 的文章快速排序(Quick Sort)详解,证明最优的排序算法,其时间复杂度可为O(nlogn),对应的空间复杂度可为O(n)。快速排序可实现理论最优效率,这可能是快速排序比较重要的原因吧。 我们基于Python学习写一下快 阅读全文
posted @ 2019-07-04 09:22 天涯海角路 阅读(437) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示