![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 60
daisylove
这个作者很懒,什么都没留下…
展开
-
The Coin Change Problem
Problem StatementHow many different ways can you make change for an amount, given a list of coins? In this problem, your code will need to efficiently compute the answer.Problem Statemen原创 2014-12-02 19:00:04 · 948 阅读 · 0 评论 -
增量查找中位数
数字是不断进入数组的,在每次添加一个新的数进入数组的同时返回当前新数组的中位数。样例持续进入数组的数的列表为:[1, 2, 3, 4, 5],则返回[1, 1, 2, 2, 3]持续进入数组的数的列表为:[4, 5, 1, 3, 2, 6, 0],则返回 [4, 4, 4, 3, 3, 3, 3]持续进入数组的数的列表为:[2, 20, 100],则返回[2,原创 2015-09-08 17:03:26 · 1166 阅读 · 0 评论 -
统计数字
计算数字k在0到n中的出现的次数,k可能是0~9的一个值例如n=12,k=1,在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],我们发现1出现了5次 (1, 10, 11, 12)原创 2015-09-06 21:19:31 · 452 阅读 · 0 评论 -
Ugly number
设计一个算法,找出只含素因子3,5,7 的第 k 大的数。符合条件的数如:3,5,7,9,15......class Solution {public: /* * @param k: The number k. * @return: The kth prime number as description. */ long long k原创 2015-09-06 15:57:50 · 364 阅读 · 0 评论 -
查找主元素
给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。空间复杂度O(n)可用哈希,简单的就不给了。仅给出时间复杂度O(n),空间复杂度O(1)的算法。采用快速排序中的分割思想int parti(vector &nums, int p, int r, int tar) { int k = p; for( int原创 2015-09-06 13:10:29 · 844 阅读 · 0 评论 -
矩形与圆碰撞检测
说下算法思想。判断三种情况。1. 矩形四个顶点在圆内。2. 判断圆的内接正方形与矩形是否碰撞3. 判断圆上的水平左右、竖直上下四个点是否在矩形内。其中1比较简单,只需比较点到圆心距离与圆半径即可。3也简单,判断点是否在矩形内的思想是,若点在矩形外,则任意选定矩形四个顶点中的一个与该点连线,其他3点必在连线同侧。 2有点棘手,分别判断矩形的四个顶点是否在正方形内以及正方形原创 2015-05-01 16:59:45 · 1429 阅读 · 0 评论 -
make_heap精简实现
闲来无事,实现下make_heap函数void makeHeap(int* a,int p,int r){ a += (p-1); int n = r - p + 1; for(int i=2;i<n;i++){ int c = i; int cp = c/2; while(cp>=1 && a[cp]<a[c]){ swap(a[cp],a[c]); c =原创 2015-04-06 18:01:59 · 825 阅读 · 0 评论 -
快速排序最简实现
void quick_sort(int a[],int p,int r){ if(p>=r) return; int k = p; for(int i=p;i=a[i]) swap(a[k++],a[i]); swap(a[k],a[r]); quick_sort(a,p,k-1); quick_sort(a,k+1,r);}还有比这更简洁的快排吗?不服来辩原创 2015-03-23 13:04:22 · 424 阅读 · 0 评论 -
LRU Cache [leetcode]
Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and set.get(key) - Get the value (will always be positive) of the key if原创 2015-01-21 17:56:10 · 457 阅读 · 0 评论 -
食物链(并查集)
Language:Default食物链Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 47125 Accepted: 13707Description动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。原创 2014-12-29 14:51:25 · 583 阅读 · 0 评论 -
分数转换成小数
问题描述,输入两个整数a, b,将分数输出a/b的小数格式,如果a/b是循环小数,则将循环部分用括号括起来,例如: 1/4 = 0.25; 1/3=0.(3); 1/6=0.1(6);分析:实质上是实现高精度浮点数除法。借助哈希表来获取循环部分。public class Solution { static int b = I原创 2014-12-27 13:34:04 · 1015 阅读 · 0 评论 -
最长公共子串
最长公共子串问题与最长公共子序列不同,最长公共子串要求公共序列是连续分布在母串中,比如s1 = "abcdef" ,s2 = "acdebf", 则s1与s2的最长公共子序列长度为5,公共子序列为 "acdef",最长公共子串长度为3,公共串为 "cde"; 最长公共子序列可以用dp做,同样最长公共子串也可以用dp做。 考虑两序列 A="GCGCAATG" , B="GCCCTA原创 2014-12-11 10:07:50 · 605 阅读 · 0 评论 -
最长公共子序列
比较经典的算法问题。 不再赘述,dp[i][j] = max(dp[i-1][j-1] + (A[i]==B[j]?1:0), dp[i-1][j], dp[i][j-1]); 下面的cpp程序是返回最长的公共子序列而不是序列长度。 vector LCS(vector &A,vector &B){ int m=A.size(), n=B.size()原创 2014-12-11 10:52:32 · 502 阅读 · 0 评论 -
Schedule(优化测试)
简单地说下题目 有n个test case,我们已经知道这n个test case的运行时间T[0],T[1],..., T[n-1],以及每个test case成功pass的概率P[0], P[1], ... ,P[n-1]; 现在要求设定test case的顺序,使得按该顺序运行这些test case的期望时间最小, 输入: Line 1:原创 2014-12-08 21:35:58 · 918 阅读 · 0 评论 -
基于精英选择策略的遗传算法
应用于TSP问题,对其他NP问题可能需要改变编码策略,以下是C++实现/*由Parrot改进的遗传算法求解TSP**选择操作使用转赌轮算法*变异算子采用逆转变异算法*交叉时先使用顺序编码,单点交叉,然后解码 */#include #include #include #include #include #include#include#include #in原创 2014-12-05 22:17:49 · 13368 阅读 · 3 评论 -
分糖果(动态规划)
问题描述:假定给 n 个人分糖,n 个人所拥有糖数量的初始值为 A[0], A[1], ... A[n-1]。现在要给这 n 个人分糖,每次分糖都要遵循下述三条规则之一:(1) 除了选定的一个人外,给所有其他人 1 颗糖;(2) 除了选定的一个人外,给所有其他人 2 颗糖;(3) 除了选定的一个人外,给所有其他人 5 颗糖。问: 至少要分多少次糖才能使这 n 个人的糖果数相同原创 2014-12-04 10:09:24 · 1972 阅读 · 0 评论 -
The Longest increasing subsequence
The task is to find the length of the longest subsequence in a given array of integers such that all elements of the subsequence are sorted in ascending order. For example, the length of the LIS for原创 2014-12-02 12:40:19 · 634 阅读 · 0 评论 -
bigInt的加减乘函数
prod是采用一般的O(n^2)bigInt乘法算法, multiply用分治做了优化,时间开销介于O(n^1.5)到O(n^2)之间,具体是多少忘了string Plus(const string &num1,const string num2){ if(num1.length()<num2.length()) return Plus(num2,num1); string res(nu原创 2014-12-03 10:17:21 · 3233 阅读 · 0 评论 -
落单的数 III
给出2*n + 2个的数字,除其中两个数字之外其他每个数字均出现两次,找到这两个数字。对于2*n+1个数字用异或就行了,而在此题将所有数异或之后得到的是两个落单的数的异或结果,没办法将结果拆分成两个落单的数。但因为两个落单数不同,所以肯定存在某个位k,使得两落单数在第k位上一个为0另一个为1,怎么找到这个k? 找异或结果中1出现的位置即可。只需找到最小的这个k,然后将在k位上为0的原创 2015-09-07 17:34:40 · 1395 阅读 · 0 评论