
算法思考
文章平均质量分 59
Everlasting2016
我流我的汗水,华丽如天花乱坠
展开
-
不同进制间的相互转换的理解
不同进制间的相互转换一般有两种方法,第一种是直接先确定最高位,然后逐步确定低位的数字;第二种便是先确定最低位然后在然后逐步确定到最高位下面便是对这两种方法的具体解析本文以二进制和十进制的相互转换来说明具体道理1、基础的铺垫(1)同一个数字,放在不同的数位上,代表不同大小的数。例如:十进制中,百位上的1表示100,十位上的1表示10.。(2)十进制之中,每个数都可以被拆开:23=原创 2016-05-02 20:20:07 · 1946 阅读 · 0 评论 -
分糖果问题1
一、题目:一群人做游戏,现在请你根据游戏得分来发糖果,要求如下:1.每个孩子不管得分多少,起码分到一个糖果。2.任意两个相邻的孩子之间,得分较多的孩子必须拿多一些的糖果二、大体思路:用到了上坡下坡的思想,并且坡顶的值为坡度较高的值三。具体实现1、方法一:·时间复杂度为O(N),空间复杂度为O(N)基本思路:第一步从左往右扫描建立从左往右的上坡,第二部从右往左扫描原创 2016-05-04 14:42:10 · 1925 阅读 · 0 评论 -
二分查找
一、查找key元素所在的下标//1、查找key所在位置的下标int BinarySearch(int arr[], int len,int key)//[left,right]{ if (arr == NULL || len <= 0) return -1; int left = 0; int right = len - 1; while (left <= right) {原创 2016-06-01 14:03:11 · 349 阅读 · 0 评论 -
位运算求相反数
一、解法n的相反数等于(~n+1)二、适用范围· 对于取相反数之后不会产生溢出的情况都适用三、具体解释1、对于正数对于正数的相反相反数来说,原码就是除符号位变为1,其他不变,计算机中 对于一个数字来说存储的都是其补码,负数的补码为符号位不变其他位按位取反,然后将得到的结果+1而~n+1的过程第一步就是将符号为变为1,变为其相反数原码的情况,然后剩下的过程就是相反数求补码原创 2016-06-10 08:52:29 · 5461 阅读 · 2 评论 -
归并排序非递归写法
void _Merge(int arr[], int* tmp, int begin1, int end1, int begin2, int end2){ int index = begin1; while (begin1 <= end1&&begin2 <= end2) { tmp[index++] = arr[begin1]<arr[begin2] ? arr[begin1++]原创 2016-08-11 14:36:23 · 866 阅读 · 0 评论 -
二叉树的下一个结点
题目描述:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路:结合图,我们可发现分成两大类:1、有右子树的,那么下个结点就是右子树最左边的点;(eg:D,B,E,A,C,G) 2、没有右子树的,也可以分成两类,a)是父节点左孩子(eg:N,I,L) ,那么父节点就是下一个节点 ; b)是原创 2016-08-15 09:10:38 · 489 阅读 · 0 评论