声明:图片来自于《算法》第四版。本文章需要实际的遇到各种问题,才会体会到里面的内容。希望大家静下心来,好好思考。这对思维会有很大的提示。也可以提高对算法中隐藏缺陷的发现能力有一个很好的提升。 快速排序可能是应用最广泛的排…
分类:基础算法
大数加法
现在假设有2个很大的数 int 装不下 那么如何做加法呢? 其实就直接用字符串进行加法运算 这里通过出参的方式返回计算结果 好处就是不要在bigdataAdd接口函数中申请资源 所以可以反复调用接口 实现多个大数相加 代…
C语言指针从入门到放肆
知乎Live 答疑: C语言指针从入门到放肆 www.zhihu.com 如何不用 for while goto 等循环语句,实现循环打印不低于100万个hello world. 提示:汇编\函数调用栈\指针 参考代码…
C语言简单工厂模式
实现一个简单的工厂,实现对原始报文按照指定条件处理,输出处理后的新报文. 思路:在工厂函数中传入回调函数实现. 回调函数就是一个通过函数指针调用的函数。 如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用…
无序数组的中第k小的数字
在一个无序数组中查找第k小的数字,默认第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]。…
不用加减乘除法做加法
不用加减乘除法做加法 求2个数的和,不用四则运算符号。 思路:采用二进制加法的位运算模式。 1. 不考虑进位对每一位相加,异或运算。2. 计算进位,两个数与运算,再左移1位。3. 将进位和异或的结果相加,调用自己。 参考…
求1+2+3...+n
求1+2+3…+n 求1+2+3…+n,要求不能使用乘除法、for、while、if、else、switch、case以及条件判断语句。 思路:函数栈,递归操作。递归结束条件通过2次取反操作(!!…
股票的最大利润
股票的最大利润 一只股票在某些时间节点的价格{9,11,8,5,7,12,16,14},求在哪个时间锻买入和卖出,利润最大。 思路:找出数组中最大值和最小值问题。定义函数diff(i)为第i天卖出的最大利润,那么只需要在…
圆圈中最后剩下的数字
圆圈中最后剩下的数字 0,1,2,3…n-1共n个数字排成一圈,从数字0开始依次删除第m个数字。求最后剩下的数字。 思路:常规做法是就环形链表,可以用数组表示。这里介绍一种数学方法来解这类约瑟夫环问题。 f(…
扑克牌中的顺子
扑克牌中的顺子 从扑克牌中随机选择5张牌,判断是不是一个顺子,A代表1,J代表11,Q代表12,K代表13,大小王可以看成任意数字。 思路:把大小王看成0,把5张牌看成5个数字组成的数组。1. 把数组排序。2. 统计数组…
n个骰子的点数
n个骰子的点数 把n个骰子仍在地上,所有骰子朝上一面的点数之和为s。输入骰子个数n,求所有s出现的概率。 思路:假设f(m,n)表示投第m个骰子的时候,点数之和为n出现的次数,投第m个骰子的点数之和只与投第m-1个骰子有…