摘要:一.题目链接:https://leetcode.com/problems/3sum-closest/ 二.题目大意: 给定一个数组A和一个目标值target,要求从数组A中找出3个数来,使得这三个数的和最接近target。 三.题解: 这道题实质就是3sum(http://www.cnblogs.c
阅读全文
随笔分类 - 刷题&&LeetCode
主要是刷题心得
摘要:一.题目链接:https://leetcode.com/problems/3sum/ 二.题目大意: 3和问题是一个比较经典的问题,它可以看做是由2和问题(见http://www.cnblogs.com/wangkundentisy/p/7525356.html)演化而来的。题目的具体要求如下: 给
阅读全文
摘要:一.题目大意 给定一个数组A,对于数组A中的两个数字,如果排在前面的一个数字大于(必须大于,等于不算)后面的数字,则这两个数字组成一个逆序对。要求输出数组A中的逆序对的总数。例如,对于数组{7,5,6,4},一共存在5个逆序对,分别是(7,5)、(7,6)、(7,4)、(5,4)、(6,4)。 注:
阅读全文
摘要:对于简易的哈希表的实现,在刷题过程中用的最多的就是利用一个数组作为一个哈希表,其中数组的下标作为“键”,数组中的内容作为“值”。 1.一个比较常见的情况,是目标字符串只包含小写的字母。 这种情况下,只需要建立一个大小为26的数组,并且以str[i] - 'a'作为哈表中的“键”,例如: 2.另一个更
阅读全文
摘要:一.题目大意 给你一个数n,要求返回第n个丑数。其中,丑数的定义如下: 丑数是指只包含因子2、3和5的数。(数字1也是丑数,不过是个特例)引用《剑指offer》上的话来说,对于一个数M,如果M能被2整除,就连续除以2;若果能被3整除,就连续除以3;如果能被5整除,就连续除以5。如果最终的结果是1的话
阅读全文
摘要:由于这道题目在牛客上没有,所以在此记录一下。 一.题目大意: 数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从0开始计数,即从第0位开始)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。 二.题解《剑指offer
阅读全文
摘要:题意: 给定一个整数n,求1~n这n个整数中十进制表示中1出现的次数。 思路: 方法1:最直观的是,对于1~n中的每个整数,分别判断n中的1的个数,具体见《剑指offer》。这种方法的时间复杂度为O(N*logN),当N比较大的时候,一般会超时。 方法2:这种类别的题目,如果直观求解不行的话,那么通
阅读全文
摘要:算法岗,一共两道编程题,题目具体如下: 第一题: # 给你A数组,询问ΣΣA[gcd(i,j)],1<=i<=n,1<=j<=m# 输入:# 每行有四个整数,N,n,m,p,其中N表示A数组长度,n,m,p为参数;对于A数组如下得出:## A[1]=p,A[x]=(A[x-1]+153)%p## 数
阅读全文
摘要:题目描述: 给定三个整数X,Y,Z,要求进行若干次操作使得X,Y,Z相等,操作有两种: 1.从X,Y,Z中选择两个数都加1。 2.从X,Y,Z中选择一个数加2。 求最少需要多少次操作。 题目思路: 1.对X,Y,Z三个数进行排序,此处用的是降序排序。假设排序完之后X>Y>Z,如果Y-Z是奇数的话,那
阅读全文
摘要:从一堆无序的数中(共n个数)找到最小的K个数,这也算是一道比较经典的题目了,关于这道题目的解法,一般有几种: 方法1:先对所有的数据进行排序,然后直接找出前K个数来,即最小的K个数。时间复杂度为O(N*logN)。 方法2:采用类似快排的思想,只要找到第K小的数值的位置的话,那么数组中的前K个数值一
阅读全文
摘要:给定一个数组A,要求找到数组A中第K大的数字。对于这个问题,解决方案有不少,此处我只给出三种: 方法1: 对数组A进行排序,然后遍历一遍就可以找到第K大的数字。该方法的时间复杂度为O(N*logN) 方法2: 利用简单选择排序法的思想,每次通过比较选出最大的数字来,比较上K次就能找出第K大的数字来。
阅读全文
摘要:我在之前的一篇文章中,写的是关于全排列问题的小结(http://www.cnblogs.com/wangkundentisy/p/8570082.html),这篇文章主要介绍的为字符串的组合问题。首先需要弄清楚排列和组合的区别,对于字符串"abc",它的全排列包括:abc、acb、bac、bca、c
阅读全文
摘要:具体的题目大意和参考思路在此处不详述(见《剑指offer》),实质就是在中序遍历的过程中调整指针的指向,关于中序遍历有递归和非递归两种操作,所以此处也用了两种方法。 方法1(递归法): 代码如下: 关于递归法此处有几点需要注意: 1.实际整个过程中需要记录的节点只有一个:即在遍历过程中当前节点的前一
阅读全文
摘要:在使用递归函数时,如果函数的形参带来的信息比较明确的的话,例如形参为int *a,int start,int end三个参数的话,分别表示数组a和a的起始小标、终止下标;这样递归的时候用起来会比较方便。例如: 但在有的时候,题目给定的函数的参数可能信息不是很明确,例如只给你一个数组或者一个vecto
阅读全文
摘要:对于层次遍历二叉树,我们应该都挺熟悉。但是对于不同类型的返回值的函数,有些处理手段也不同。 1.例如,返回值是void型的话,此时如果打印二叉树的各个节点的值的话,直接在函数内部实现即可,而且遇到空指针时,可以在开头直接判断,类似于: 2.但是如果返回时是一个数组或者是一个vector的话,此时如果
阅读全文
摘要:题目:对于两个有序链表,将它们合并成一个有序链表。 这种题目一看就是利用归并排序的思想,实现方式有递归和非递归两种方式。 方法1(非递归): 代码如下: (1)非递归的方式时间复杂度为O(n),空间复杂度为O(1)。 (2)尤其重要的一点是,在做这道题目时,一定要搞清楚最终返回的合并后的链表是一个新
阅读全文
摘要:今天在刷《剑指offer》时,遇到了几个比较有意思的点,题目是面试题20,我写的代码如下: 这段代码,有两个点需要注意: 1.在函数isDIdit和函数isSignedDigit中,它们的形参实际上是指针的引用,即本质是个引用,不过这个引用是指针变量的引用。原书代码中采用的是二级指针,我嫌麻烦使用了
阅读全文
摘要:全排列可以用分治的思想去实现,主要操作步骤是将首个元素与剩余其他的所有元素进行交换。主要分为两种:允许生成不重复的序列和不允许生成重复的序列。 1.允许重复的序列,代码如下: 2.不允许重复的序列: 在非重复的情况下,需要判断一下:index之后的元素中是否有存在与之前a[i]重复的元素,如果有重复
阅读全文
摘要:一.题目链接:https://leetcode.com/problems/evaluate-reverse-polish-notation/ 二.题目大意: 给定后缀表达式,求出该表达式的计算结果。 三.题解: 对于这道题目,首先观察后缀表达式(逆波兰表达式)的特点,那就是运算符在操作数的后面,所以
阅读全文
摘要:关于求解斐波那契数列,这是一道比较经典的题目,本文主要是对斐波那契数列求解方法的小结。 首先,定义Fibonacci数列如下: 方法1: 利用递归求解,这是最容易写出的算法,代码如下: 该算法的时间复杂度为O(2^N)。为什么呢?因为每一次计算Fibonacci(n)时,都需要计算Fibonacci
阅读全文