算法积累
张小牙
每一个不曾起舞的日子,都是对生命的辜负!
展开
-
2.1.1 【每日一练】求二进制数中1的个数
【来源】:编程之美 P119求一个8位无符号整型变量的二进制形式中“1”的个数,要求算法尽可能效率高。一个整数的二进制形式中除了“0” 就是“1”;如何计算“1”的个数,可以联想到计算机组成原理中的除法运算的实质,除法运算实质就是右移一位二进制。先将整数写成二进制形式,然后判断最后一位是否是“1”,若是,则计数器加一,否则,继续,然后右移一位,直到判断所有的数位原创 2014-03-03 23:51:09 · 900 阅读 · 0 评论 -
【算法练习】找出数组中仅出现一次的数字
【题目】:给定一个整数数组,数组中除了一个整数仅出现一次外,其他数字都是出现两次,采用时间可空间复杂度尽量小的方法找出这个仅出现一次的整数。【来源】微软校招题 我最早知道这个题是在C语言的位操作学习过程中,这道题目是考察的对C或者C++位操作的应用--异或操作符 “^”,两个相同的整数(在计算机内表示是补码)进行异或操作,结果为0,数字0与任何整数异或操作,结果还是那个整数,利原创 2014-03-31 19:46:41 · 854 阅读 · 0 评论 -
【算法练习】
【问题描述】接着前一篇文章的问题,若一个数组中所有的整数都出现了两次,仅有两个不同的数字出现一次,找出这两个整数。【来源】微软面试题【思路】从前一篇文章中可以知道,两个相同的整数进行异或操作,结果为0,这个问题我们也是将所有的整数进行异或操作,左后的结果肯定不是0,由于其他所有的整数都出现了两次,所以进行异或操作后,其他数字都被消除(异或操作后是0),这个非零结果就是那原创 2014-04-01 23:57:09 · 656 阅读 · 0 评论 -
【算法练习】还是求二进制数中1的个数
【来源】编程之美【问题描述】前面的文章介绍了原创 2014-04-03 23:01:50 · 1362 阅读 · 0 评论 -
【算法练习】寻找水王
【来源】编程之美【】问原创 2014-04-05 00:37:59 · 1257 阅读 · 0 评论 -
ToLeft 测试与计算凸包问题
计算几何中的ToLeft测试判断点是否在三角形内求解计算几何中的凸包问题时,使用的比较简单,但是复杂度比较高的算法中有一种算法叫做极点法,基本思想是从所有的点中去除所有的不是凸包边上的点.从所有的剩余的点中,选出三个点,然后再在剩余的点集中,判断是否在三角形的内部,如果在内部,则去除这个点,说明它不是凸包的结果;否则,就暂时保留这个点,说明它可能是凸包边上的点.如下图所示:点a在三...原创 2018-07-16 15:22:17 · 2802 阅读 · 0 评论 -
分治法解决计算凸包问题
清华大学的邓俊辉老师的<计算几何>公开课中,在计算凸包问题时会遇到极点法和极边法:极点法是假设所有的点都是凸包上的点,然后根据In-triangle测试,把去除不是极点的点,时间复杂度是O(n^4);为了解决时间复杂度太高问题,引入极边法,假设所有的边都不是凸包上的边,然后判断每一条边是否只有一侧有点,那么他就是凸包上的边.这个时间复杂度是O(n^3).为了进一步降低时间复杂...原创 2018-07-17 11:30:55 · 3044 阅读 · 2 评论 -
Javis March计算凸包问题
根据邓老师的讲解,实现Javis March算法计算凸包,但是时间复杂度并没有直接降低,在最坏的情况下还是O(n^2). 实际上,该算法是在极边法上的改进,降低算法寻找边的复杂度..具体的计算过程如下描述.#include <iostream>#include <vector>using namespace std;struct point{ ...原创 2018-07-17 15:17:35 · 549 阅读 · 0 评论