摘要: 今天才发现C++11原来支持原子操作,还支持thread类创建线程,真的是越来越6了。之前做项目的时候创建线程都是用POSIX标准的pthread_create函数,然后线程同步一般用的都是pthread_mutex。今天又get了一个新技能,可以用thread类来创建线程,用atomic_flag 阅读全文
posted @ 2018-03-17 16:20 jeysin 阅读(346) 评论(0) 推荐(0) 编辑
摘要: 链接:https://www.nowcoder.com/questionTerminal/621e433919214a9ba46087dd50f09879来源:牛客网度度熊最近对全排列特别感兴趣,对于1到n的一个排列,度度熊发现可以在中间根据大小关系插入合适的大于和小于符号(即 '>' 和 '<' 阅读全文
posted @ 2018-03-14 18:18 jeysin 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 度度熊有一个N个数的数组,他想将数组从小到大 排好序,但是萌萌的度度熊只会下面这个操作:任取数组中的一个数然后将它放置在数组的最后一个位置。问最少操作多少次可以使得数组从小到大有序? 思路: 首先,对于一个长度为size的数组而言,最多调整size-1下即可有序,即每次把倒数第二小的数依次放到后面, 阅读全文
posted @ 2018-03-12 12:02 jeysin 阅读(430) 评论(0) 推荐(0) 编辑
摘要: 最长公共子序列、最长公共子串、最小编辑距离是三种常见的字符串比较算法,考虑到其中的动态规划思想、状态转移方程比较类似,实现的方法也是如出一辙,这里将其状态转移方程和相应的实现代码做一个总结。 1、最长公共子序列(longest common sequence) 状态转移方程: 实现代码: 当然了,如 阅读全文
posted @ 2018-03-11 16:38 jeysin 阅读(829) 评论(0) 推荐(0) 编辑
摘要: 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?输出需要删除的字符个数。 如: 阅读全文
posted @ 2018-03-11 15:44 jeysin 阅读(263) 评论(0) 推荐(0) 编辑
摘要: KMP算法主要是用来解决在一个字符串中是否包含另一个字符串的问题,即在字符串str1中是否包含有str2,如果包含,返回str2在str1中的起始位置,如果不包含,返回-1。KMP算法主要通过一个next数组实现匹配加速,next数组记录下str2中对应每一个字符相应的最长前缀和最长后缀相匹配的长度 阅读全文
posted @ 2018-02-28 09:29 jeysin 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 快速排序的递归实现在数据量非常大的时候往往因为递归的层数过多而导致栈溢出,可以考虑模拟递归栈的调用,用一个堆空间中的辅助栈保存每次计算的中间参数,将快排改为非递归版本,实现如下: 阅读全文
posted @ 2018-02-27 16:57 jeysin 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 1、前序遍历非递归实现 2、中序遍历非递归实现 3、后序遍历非递归实现 阅读全文
posted @ 2018-02-06 14:07 jeysin 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 计算数字k在0到n中的出现的次数,k可能是0~9的一个值 计算数字k在0到n中的出现的次数,k可能是0~9的一个值 计算数字k在0到n中的出现的次数,k可能是0~9的一个值 例如n=12,k=1,在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],我们发现1出现 阅读全文
posted @ 2018-02-05 23:00 jeysin 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 设计一个算法,计算出n阶乘中尾部零的个数 设计一个算法,计算出n阶乘中尾部零的个数 设计一个算法,计算出n阶乘中尾部零的个数 样例 11! = 39916800,因此应该返回 2 11! = 39916800,因此应该返回 2 11! = 39916800,因此应该返回 2 挑战 O(logN)的时 阅读全文
posted @ 2018-02-04 23:29 jeysin 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 思路:基于按层遍历,增加一个flag标记,如果是偶数层就置逆以后再输出 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二 阅读全文
posted @ 2018-02-04 11:24 jeysin 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 思路:分多种情况讨论 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针 阅读全文
posted @ 2018-02-04 11:03 jeysin 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 题目描述 给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。 思路:中序遍历 给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三 阅读全文
posted @ 2018-02-03 23:07 jeysin 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 题目描述 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任 阅读全文
posted @ 2018-02-03 22:41 jeysin 阅读(98) 评论(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 @ 2018-02-02 13:37 jeysin 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行 思路:维护两个指针:last和nlast,其中,last始终指向当前打印行的最后一个节点,nlast始终指向队列中最后一个节点 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行 思路:维护两个指针:last和nl 阅读全文
posted @ 2018-02-02 12:45 jeysin 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。 输出描述: 如果当前字符流没有存在出现一次的字符,返回#字符思路:一个数组记 阅读全文
posted @ 2018-02-02 12:33 jeysin 阅读(104) 评论(0) 推荐(0) 编辑
摘要: 题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法 思路:不能使用除法,则根据A由上至下、由下至上连乘 给定一个数组A[0,1,...,n- 阅读全文
posted @ 2018-02-02 12:14 jeysin 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 思路:通过交换使所有数 阅读全文
posted @ 2018-02-02 10:18 jeysin 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 题目描述 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0 输入描述: 输入一个字符串,包括数字字母符号,可以为空 输出描述: 如果是合法的数值表达则返回该数字,否则返回0思路:多考虑特殊情况 将一个字符串转换成一个整数,要求不能使用字符 阅读全文
posted @ 2018-02-02 09:54 jeysin 阅读(136) 评论(0) 推荐(0) 编辑