- 博客(110)
- 收藏
- 关注
原创 你想要了解的贪心算法都在这里
贪心算法贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。基本思路1.建立数学模型来描述问题;2.把求解的问题分成若干个子问题;3.对...
2019-10-24 20:32:36 1261
原创 Http的八种请求方法
1.GETget方法请求指定的页面信息,返回实体主体。该请求是向服务器请求信息,请求参数会跟在url后面,因此,对传参长度有限制的,而且不同浏览器的上限是不同的(2k, 7~8k及其他)。由于get请求直接将参数暴露在url中,因此对于一些带有重要信息的请求可能并不完全合适。2.POSTpost请求是向指定资源提交数据进行处理请求,例如提交表单或者上传文件等。数据被包含在请求体中,POST请...
2019-08-26 21:47:27 2148
原创 如何优雅的反转单链表以及变种形式
【题目描述】反转单链表。例如链表为: 1->2->3->4反转后为: 4->3->2->1【要求】 :如果链表的长度为 N, 时间复杂度达到 O(N), 额外空间复杂度达到 O(1).【解答】方法1这道题还是挺简单的,当我们在反转一个节点的时候,把一个节点的后驱改为指向它前驱就可以了。这里需要注意的点就是,当你把当前节点的后驱指向前驱的时候,这个时...
2019-08-20 19:23:25 1192 1
原创 TCP基本通信流程
TCP 通信基本流程不管多么复杂的服务器或客户端程序,其网络通信的基本原理一定如下所述:对于服务器,其通信流程一般有如下步骤:调用 socket 函数创建 socket(侦听socket)调用 bind 函数 将 socket绑定到某个ip和端口的二元组上调用 listen 函数 开启侦听当有客户端请求连接上来后,调用 accept 函数接受连接,产生一个新的 socket(客户端...
2019-08-11 19:20:23 1658
原创 浅析动态规划-----------不看后悔系列
写在前面的话讲道理,我对dp这块的理解并不深,当初学的时候,也仅仅停留在一些名词上。比如大佬们经常说的数位dp,树形dp,区间dp,插头dp,棋盘dp,背包dp等等。。。那究竟什么是dp呢?维基百科上是这样定义的:DP就是一种方法,该方法能够将复杂的问题分解成为一系列简单的子问题。时隔一段时间了,准备好好把dp这个算法总结总结,不会的地方抓紧补上,会的地方夯实夯实,写出一些自己不一样的...
2019-08-05 23:05:33 1035
原创 Leetcode:刷完31道链表题的一点总结
前言今天终于刷完了 Leetcode 上的链表专题,虽然只有 31 道题(总共是 35 道,但有 4 道题加了锁)而已,但也陆陆续续做了两三个星期,严重跟不上原先计划啊。先写一篇博客总结一下这阵子刷链表题的收获吧,有输入也要有输出。这里就不花篇幅介绍链表的一些基本概念了,不清楚的看官就自行百度一下吧,本文主要介绍一些常见的链表题和解题思路。正文缓存不得不说使用数组 / map 来缓存链...
2019-07-24 22:57:50 1013
原创 通俗易懂的进程与线程之间的关系(有图)
写在前面的话进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。1计算机的核心是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行。2.假定工厂的电力有限,一次只能供给一个车间使用。也就是说,一个车间开工的时候,其他车间都必须停工。背后的含义就是,单个CPU一次只能运行一个任务。3.进程就好比工厂的车间,它代表CPU所能处理的...
2019-07-19 17:10:03 4965 2
原创 一行代码解决约瑟夫环问题
约瑟夫环问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。1、方法一:数组在第一次遇到这个题的时候,我是用数组做的,我猜绝大多数人也都知道怎么做。方法是这样的:用一个数组来存放 1,2,3 … n 这 n 个编号,...
2019-07-17 21:00:14 13635 6
原创 斐波那契凤尾
链接:https://www.nowcoder.com/questionTerminal/c0a4b917a15f40a49ca10532ab9019fbNowCoder号称自己已经记住了1-100000之间所有的斐波那契数。为了考验他,我们随便出一个数n,让他说出第n个斐波那契数。当然,斐波那契数会很大。因此,如果第n个斐波那契数不到6位,则说出该数;否则只说出最后6位。输入描述:输入...
2019-07-11 18:50:17 911
原创 美国节日
链接:https://www.nowcoder.com/questionTerminal/d95d98a2f96e49078cd7df84ba0c9d79和中国的节日不同,美国的节假日通常是选择某个月的第几个星期几这种形式,因此每一年的放假日期都不相同。具体规则如下:1月1日:元旦1月的第三个星期一:马丁·路德·金纪念日2月的第三个星期一:总统节5月的最后一个星期一:阵亡将士纪念日7...
2019-07-11 18:48:31 1749
原创 删除排序数组中的重复项(I和 II)
描述给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定...
2019-06-25 23:49:40 794
原创 一看就懂的贪心算法
写在前面的话今天我介绍的主题是贪心算法。这是相对比较容易的一种算法。我这里不给出定义,因为大家可以自行网络搜索。咱们直接看例子。贪心算法,如果不用手动证明一个问题的数学性质的话,其实是比较简单的。看这样一个例子:假设有一个背包,其最大容量是50KG,现在有各种不同价值的液体,比方说,有水,其价值是10 每千克,共100KG;酒精,其价值是20 每千克,共30KG;有油,价值25每千克,共30...
2019-06-22 23:28:56 1030
原创 腾讯面试题:有了二叉查找树、平衡树为啥还需要红黑树?
1、二叉查找树的缺点二叉查找树,相信大家都接触过,二叉查找树的特点就是左子树的节点值比父亲节点小,而右子树的节点值比父亲节点大,如图基于二叉查找树的这种特点,我们在查找某个节点的时候,可以采取类似于二分查找的思想,快速找到某个节点。n 个节点的二叉查找树,正常的情况下,查找的时间复杂度为 O(logn)。之所以说是正常情况下,是因为二叉查找树有可能出现一种极端的情况,例如这种情况也是满...
2019-06-19 23:46:35 1734
原创 字符串匹配BM(Boyer-Moore)算法:文本编辑器中的查找功能是如何实现的?
写在前面的的话关于字符串匹配算法有很多,之前我有写过一篇 KMP 匹配算法:https://blog.csdn.net/dreamispossible/article/details/91359237 不懂 kmp 的建议看下,写的还不错,这个算法虽然很牛逼,但在实际中用的并不是特别多。至于选择哪一种字符串匹配算法,在不同的场景有不同的选择。在我们平时文档里的字符查找里采用的就是 Bo...
2019-06-17 22:42:27 1143
原创 手套
题目描述在地下室里放着n种颜色的手套,手套分左右手,但是每种颜色的左右手手套个数不一定相同。A先生现在要出门,所以他要去地下室选手套。但是昏暗的灯光让他无法分辨手套的颜色,只能分辨出左右手。所以他会多拿一些手套,然后选出一双颜色相同的左右手手套。现在的问题是,他至少要拿多少只手套(左手加右手),才能保证一定能选出一双颜色相同的手套。给定颜色种数n(1≤n≤13),同时给定两个长度为n的数组l...
2019-06-12 23:40:42 975
原创 跳石板
题目描述小易来到了一条石板路前,每块石板上从1挨着编号为:1、2、3…这条石板路要根据特殊的规则才能前进:对于小易当前所在的编号为K的 石板,小易单次只能往前跳K的一个约数(不含1和K)步,即跳到K+X(X为K的一个非1和本身的约数)的位置。 小易当前处在编号为N的石板,他想跳到编号恰好为M的石板去,小易想知道最少需要跳跃几次可以到达。例如:N = 4,M = 24:4->6-...
2019-06-10 23:16:23 764
原创 数字和为sum的方法数
题目描述给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数。当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案。输入描述:输入为两行:第一行为两个正整数n(1 ≤ n ≤ 1000),sum(1 ≤ sum ≤ 1000)第二行为n个正整数A [i] (32位整数),以空格隔开。输出描述:输出所求的方案数#include<...
2019-06-10 23:09:31 814
原创 我所理解的KMP算法
字符串匹配算法字符串匹配是计算机的进行的非常频繁的算法。简单的说,有一个字符串 I have a dream. 。我想知道的事情是,里面是否包含另一个字符串 dream ?因为执行的非常频繁,所以算法的效率也就十分重要。而本文所说的KMP算法,无疑是速度上面的佼佼者,它可以在 O(n+m) 的时间完成匹配。KMP算法由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因...
2019-06-09 23:54:36 826
原创 阶乘相关的一些面试题
案例一 给定一个整数 N,那么 N 的阶乘 N! 末尾有多少个 0?例如: N = 10,则 N!= 3628800,那么 N! 的末尾有两个0。 有些人心想,这还不简单,直接算出 N!的值,然后用除以 10 来判断多少个 0 就可以了。 ...
2019-06-08 16:39:15 1055
原创 面试中被问到三次握手四次挥手应该怎么回答?---------不看后悔系列
写在前面的话在面试中,三次握手和四次挥手可以说是问的最频繁的一个知识点了,我相信大家也都看过很多关于三次握手与四次挥手的博客,今天的这篇博客,重点是围绕着面试,我们应该掌握哪些比较重要的点,哪些是比较被面试官给问到的,我觉得如果你能把我下面列举的一些点都记住、理解,我想就差不多了。三次握手当面试官问你为什么需要有三次握手、三次握手的作用、讲讲三次三次握手的时候,我想很多人会这样回答:首...
2019-06-08 16:05:01 33387 8
原创 找出不大于N的最大的2的幂指数
传统的做法就是让 1 不断着乘以 2,代码如下:int findN(int N){ int sum = 1; while (true) { if (sum * 2 > N) { return sum; } sum = sum * 2; } } &nbs...
2019-06-07 22:25:12 4753 2
原创 m的n次方
如果让你求解 2 的 n 次方,并且不能使用系统自带的 pow 函数,你会怎么做呢?这还不简单,连续让 n 个 m 相乘就行了,代码如下:int pow(int n){ int tmp = 1; for (int i = 1; i <= n; i++) { tmp = tmp * m; } return...
2019-06-07 22:14:03 4283
原创 腾讯面试题,如何寻找一个数组里面唯一不重复的元素?要求时间复杂度o(n)和空间复杂度o(1)
找出不重复的数题目描述: 有一组存放 ID 的数据。并且 ID 取值为 0 - (N-1) 之间,其中只有一个 ID 出现的次数为 1,其他的 ID 出现的次数都等于 2,问如何找到这个次数为 1 的 ID ? 解法一:巧用数组下标 我的第一想法便是...
2019-06-07 22:08:22 2594
原创 另类加法
题目描述请编写一个函数,将两个数字相加。不得使用+或其他算数运算符。给定两个int A和B。请返回A+B的值测试样例:1,2返回:3/* 1. 二进制位异或运算相当于对应位相加,不考虑进位 比如: 1 ^ 1 = 0 ---> 1 + 1 = 0 (当前位值为0,进一位) 1 ^ 0 = 1 ---> 1 + 0 = 1 (当前位值...
2019-05-31 23:48:34 715
原创 井字棋
题目描述对于一个给定的井字棋棋盘,请设计一个高效算法判断当前玩家是否获胜。给定一个二维数组board,代表当前棋盘,其中元素为1的代表是当前玩家的棋子,为0表示没有棋子,为-1代表是对方玩家的棋子。测试样例:[[1,0,1],[1,-1,-1],[1,-1,0]]返回:true//扩展到N阶的棋盘同样适用;class Board {public: bool chec...
2019-05-31 23:35:13 2783
原创 求最小公倍数
题目描述正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。输入描述:输入两个正整数A和B。输出描述:输出A和B的最小公倍数。#include<iostream>using namespace std;int gab(int a,int b){ int r = 0; while(r ...
2019-05-27 22:31:45 700
原创 两种排序方法
题目描述考拉有n个字符串字符串,任意两个字符串长度都是不同的。考拉最近学习到有两种字符串的排序方法:1.根据字符串的字典序排序。例如:“car” < “carriage” < “cats” < "doggies < “koala”2.根据字符串的长度排序。例如:“car” < “cats” < “koala” < “doggies” < ...
2019-05-27 22:13:12 1089
原创 合并两个排序的链表(递归&非递归)
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。(1)递归版本/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: L...
2019-05-27 00:10:19 949
原创 详解递归思想
写在前面的话可能很多人在大一的时候,就已经接触了递归了,不过,我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是,给我的感觉就是,递归太神奇了!可能也有一大部分人知道递归,也能看的懂递归,但在实际做题过程中,却不知道怎么使用,有时候还容易被递归给搞晕。最近看了很多关于递归的知识,谈谈我的一些经验,或许,能够给你带来一些帮助。为了兼顾初学者,我会从最简单的题讲起!递归的三...
2019-05-25 22:39:15 20127 12
原创 进制转换
题目描述给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数输入描述:输入为一行,M(32位整数)、N(2 ≤ N ≤ 16),以空格隔开。输出描述:为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制(比如,10用A表示,等等)#include<iostream>#include<string>...
2019-05-24 22:42:13 723
原创 计算糖果
题目描述A,B,C三个人是好朋友,每个人手里都有一些糖果,我们不知道他们每个人手上具体有多少个糖果,但是我们知道以下的信息:A - B, B - C, A + B, B + C. 这四个数值.每个字母代表每个人所拥有的糖果数.现在需要通过这四个数值计算出每个人手里有多少个糖果,即A,B,C。这里保证最多只有一组整数A,B,C满足所有题设条件。输入描述:输入为一行,一共4个整数,分别...
2019-05-24 22:29:28 846
原创 n个数里出现次数大于等于n/2的数
题目描述输入n个整数,输出出现次数大于等于数组长度一半的数。#include<iostream>using namespace std;int main(){ int n = 0; int x = 0; int count[100] = {0}; while(cin >> x) { count[x]++;...
2019-05-23 23:51:45 809
原创 字符串中找出连续最长的数字串
题目描述读入一个字符串str,输出字符串str中的连续最长的数字串#include<iostream>#include<string>using namespace std;int main(){ string str,cur,ret; cin >> str; for(int i = 0; i<= str.length(...
2019-05-23 23:43:56 1740
原创 倒置字符串(两种解法)
题目描述将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I第一种解法#include <iostream>#include <string> #include <algorithm> using namespace std;int main(){ string s; g...
2019-05-22 00:05:32 5599
原创 排序子序列
牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。牛牛有一个长度为n的整数数组A,他现在有一个任务是把数组A分为若干段排序子序列,牛牛想知道他最少可以把这个数组分为几段排序子序列.如样例所示,牛牛可以把数组A划分为[1,2,3]和[2,2,1]两个排序子序列,至少需要划分为2个排序子序列,所以输出2输入描述:输入的第一行为一个正整数n(1 ≤ n ≤ ...
2019-05-21 23:56:25 1104 1
原创 字符串转整数
题目描述将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。输入描述输入一个字符串,包括数字字母符号,可以为空输出描述如果是合法的数值表达则返回该数字,否则返回0class Solution {public: ...
2019-05-20 23:44:14 696
原创 调整数组顺序使奇数位于偶数前面(三种解法)
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。1.利用两层循环(类似于冒泡排序)class Solution {public: void reOrderArray(vector<int> &array) { ...
2019-05-20 23:39:10 1142
原创 组队竞赛:牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。
例如:一个队伍三个队员的水平值分别是3,3,3.那么队伍的水平值是3一个队伍三个队员的水平值分别是3,2,3.那么队伍的水平值是3一个队伍三个队员的水平值分别是1,5,2.那么队伍的水平值是2为了让比赛更有看点,牛牛想安排队伍使所有队伍的水平值总和最大。如样例所示:如果牛牛把6个队员划分到两个队伍如果方案为:team1:{1,2,5}, team2:{5,5,8}, 这时候水平值总...
2019-05-20 00:05:22 1796
原创 删除公共字符
题目描述输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”#include<iostream> #include<string>using namespace std;int main(){ // 注意这里不能使用cin接...
2019-05-20 00:01:03 798
原创 逆序打印单链表(四种解法)
题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。链表的结构 struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };1.利用栈的特性class...
2019-05-18 21:48:10 2854
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人