算法
文章平均质量分 56
烟雨流年
这个作者很懒,什么都没留下…
展开
-
python 编写简单网页服务器
IDE:Pycharmsever.py#!/bin/python#-*- coding: UTF-8 -*-#文件名:server.py#create by wzh 2017/10/26import socket #导入socket模块import refrom multiprocessing import Process #导入进程模块#设置静态文件根目录HTML原创 2017-11-19 20:21:31 · 18053 阅读 · 3 评论 -
下一个较大元素
题目描述现在我们有一个int数组,请你找出数组中每个元素的下一个比它大的元素。给定一个int数组A及数组的大小n,请返回一个int数组,代表每个元素比他大的下一个元素,若不存在则为-1。保证数组中元素均为正整数。测试样例:[11,13,10,5,12,21,3],7返回:[13,21,12,12,21,-1,-1]class NextElement {原创 2016-07-20 17:20:34 · 761 阅读 · 0 评论 -
2的个数
题目描述请编写一个方法,输出0到n(包括n)中数字2出现了几次。给定一个正整数n,请返回0到n的数字中2出现了几次。测试样例:10返回:1class Count2 {public: int countNumberOf2s(int n) { // write code here int div=1;原创 2016-07-20 15:55:36 · 416 阅读 · 0 评论 -
另类加法
题目描述请编写一个函数,将两个数字相加。不得使用+或其他算数运算符。给定两个int A和B。请返回A+B的值测试样例:1,2返回:3class UnusualAdd {public: int addAB(int A, int B) { // write code here int a=A^B;原创 2016-07-20 15:17:25 · 378 阅读 · 0 评论 -
树转链表
题目描述有一个类似结点的数据结构TreeNode,包含了val属性和指向其它结点的指针。其可以用来表示二叉查找树(其中left指针表示左儿子,right指针表示右儿子)。请编写一个方法,将二叉查找树转换为一个链表,其中二叉查找树的数据结构用TreeNode实现,链表的数据结构用ListNode实现。给定二叉查找树的根结点指针root,请返回转换成的链表的头指针。/*s原创 2016-07-20 15:05:43 · 212 阅读 · 0 评论 -
整数对查找
题目描述请设计一个高效算法,找出数组中两数之和为指定值的所有整数对。给定一个int数组A和数组大小n以及需查找的和sum,请返回和为sum的整数对的个数。保证数组大小小于等于3000。测试样例:[1,2,3,4,5],5,6返回:2class FindPair {public: int countPairs(vector A, int n, i原创 2016-07-20 13:16:50 · 833 阅读 · 0 评论 -
硬币表示
有数量不限的硬币,币值为25分、10分、5分和1分,请编写代码计算n分有几种表示法。给定一个int n,请返回n分有几种表示法。保证n小于等于100000,为了防止溢出,请将答案Mod 1000000007。测试样例:6返回:2暴力方法:void helper(int n,int res,int& count,int a[]){ if(n==3)原创 2016-07-09 14:28:52 · 982 阅读 · 0 评论 -
数字发音
题目描述有一个非负整数,请编写一个算法,打印该整数的英文描述。给定一个int x,请返回一个string,为该整数的英文描述。测试样例:1234返回:"One Thousand,Two Hundred Thirty Four"class ToString{public: string toString(int x) { //原创 2016-07-19 21:09:21 · 594 阅读 · 0 评论 -
最小调整有序
题目描述有一个整数数组,请编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的。注意:n-m应该越小越好,也就是说,找出符合条件的最短序列。给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的起点和终点。(原序列位置从0开始标号,若原序列有序,返回[0,0])。保证A中元素均为正整数。测试样例:[1,4,6,5,9,10],6原创 2016-07-19 19:20:48 · 907 阅读 · 0 评论 -
无判断max
请编写一个方法,找出两个数字中最大的那个。条件是不得使用if-else等比较和判断运算符。给定两个int a和b,请返回较大的一个数。若两数相同则返回任意一个。测试样例:1,2返回:2public int getMax(int a ,int b){ b = a-b;//此时b>>31为1则b小于0即a>31为0 则a>b a- = b&(b>>3原创 2016-07-19 11:26:55 · 396 阅读 · 0 评论 -
单词最近距离
有一篇文章内含多个单词,现给定两个单词,请设计一个高效算法,找出文中这两个单词的最短距离(即最少相隔的单词数,也就是两个单词在文章中位置的差的绝对值)。给定一个string数组article,代表所给文章,同时给定文章的单词数n和待查找的两个单词x和y。请返回两个单词的最短距离。保证两个单词均在文中出现且不相同,同时保证文章单词数小于等于1000。1.class Dista原创 2016-07-20 19:17:13 · 668 阅读 · 0 评论 -
最长合成字符串
题目描述有一组单词,请编写一个程序,在数组中找出由数组中字符串组成的最长的串A,即A是由其它单词组成的(可重复)最长的单词。给定一个string数组str,同时给定数组的大小n。请返回最长单词的长度,保证题意所述的最长单词存在。测试样例:["a","b","c","ab","bc","abc"],6返回:3bool compare(string str1原创 2016-07-20 20:12:34 · 583 阅读 · 0 评论 -
实时中位数
题目描述现有一些随机生成的数字要将其依次传入,请设计一个高效算法,对于每次传入一个数字后,算出当前所有传入数字的中位数。(若传入了偶数个数字则令中位数为第n/2小的数字,n为已传入数字个数)。给定一个int数组A,为传入的数字序列,同时给定序列大小n,请返回一个int数组,代表每次传入后的中位数。保证n小于等于1000。测试样例:[1,2,3,4,5,6],6返原创 2016-07-20 20:29:27 · 952 阅读 · 0 评论 -
canny算子分析(matlab)
Canny边缘检测算子是edge函数中的一种边缘检测算法,其具体调用格式有以下三种:(1)edge(I,’canny’,Thresh,sigma);I:为输入图像;’edge’:指明所用的边缘检测算子为’canny’算子;Thresh:是一个有两个或一个元素或为空的矩阵,当含有两个元素时它们分别指出canny算子中的阈值上界和阈值下界(它们均大于0小于1);当只有一个数值的时候该值原创 2017-03-22 19:46:00 · 10918 阅读 · 0 评论 -
[编程题] 合唱团
有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗? 输入描述:每个输入包含 1 个测试用例。每个测试数据的第一行包含一个整数 n (1 i(-50 输出描述:输出一行表示最大的乘积。#include#includeu原创 2016-08-23 21:47:26 · 803 阅读 · 0 评论 -
图的最短路径算法(四)--Bellman-Ford(解决负权边)单源点最短路径
//含有负权边的单源点最短路径//动态规划思想:两点之间的最短路径最多经过n-1边即可到达//那么依次更新经过1条边,2条边,...,n-1条边的最短路径#includeint main(){ int dis[10],bak[10],i,k,n,m,u[10],v[10],w[10],check,flag; int inf=99999999; //读入n和m,n原创 2016-08-29 22:06:15 · 787 阅读 · 0 评论 -
图的最短路径(三)-单源点最短路径(Dijkstra算法)
给定初始节点,求解从该初始节点出发到达其他节点的最短路径#include//利用邻接表法求解单源点最短路径#includeusing namespace std;int n,m,i;//u,v和w的数组大小要根据实际情况来设置,要比边数m大1int u[100],v[100],w[100];//first和next的数组大小要根据实际情况来设置,firs数组大小要比顶点数n的最大原创 2016-08-29 22:00:22 · 1532 阅读 · 0 评论 -
图的最短路径(一)-两节点间最短路径
深度优先遍历+剪枝 #includeint min=9999999,book[101],n,e[101][101]; //这里用9999999代表正无穷//cur是当前所在城市的编号,dis为当前已经走过路程void dfs(int cur,int dis){ int j; //如果当前走过的路程已经大于之前所找到的最短路,则没有必要再往下尝试了,立即原创 2016-08-29 21:50:30 · 5394 阅读 · 0 评论 -
图的最短路径算法(二)-任意节点最短路径
多个节点之间的最短路径#include//依次判断节点i,j之间只允许经过节点1,2,3...n所获得的最短路径//类似于动态规划的思想int main(){ int e[10][10],k,i,j,n,m,t1,t2,t3; int inf=99999999; //将该值作为正无穷 //读入n和m,n表示顶点个数,m表示边的条数 scanf("%d原创 2016-08-29 21:54:56 · 5614 阅读 · 0 评论 -
最大和子矩阵
题目描述有一个正整数和负整数组成的NxN矩阵,请编写代码找出元素总和最大的子矩阵。请尝试使用一个高效算法。给定一个int矩阵mat和矩阵的阶数n,请返回元素总和最大的子矩阵的元素之和。保证元素绝对值小于等于100000,且矩阵阶数小于等于200。测试样例:[[1,2,-3],[3,4,-5],[-5,-6,-7]],3返回:10class SubMatr原创 2016-07-21 13:30:38 · 478 阅读 · 0 评论 -
[编程题]最大子方阵
有一个方阵,其中每个单元(像素)非黑即白(非0即1),请设计一个高效算法,找到四条边颜色相同的最大子方阵。给定一个01方阵mat,同时给定方阵的边长n,请返回最大子方阵的边长。保证方阵边长小于等于100。测试样例:[[1,1,1],[1,0,1],[1,1,1]],3返回:3class SubMatrix {public: int maxSubMatrix原创 2016-07-21 11:02:33 · 1552 阅读 · 0 评论 -
字符串变换
题目描述现有一个字典,同时给定字典中的两个字符串s和t,给定一个变换,每次可以改变字符串中的任意一个字符,请设计一个算法,计算由s变换到t所需的最少步数,同时需要满足在变换过程中的每个串都是字典中的串。给定一个string数组dic,同时给定数组大小n,串s和串t,请返回由s到t变换所需的最少步数。若无法变换到t则返回-1。保证字符串长度均小于等于10,且字典中字符串数量小于等原创 2016-07-20 21:13:55 · 1980 阅读 · 0 评论 -
Trie树[前缀树,字典树]
Implement a trie with insert, search, and startsWith methods.Note:You may assume that all inputs are consist of lowercase letters a-z.Subscribe to see which companies asked this questi原创 2016-07-28 20:51:21 · 251 阅读 · 0 评论 -
数组中的逆序对
题目描述有一组数,对于其中任意两个数组,若前面一个大于后面一个数字,则这两个数字组成一个逆序对。请设计一个高效的算法,计算给定数组中的逆序对个数。给定一个int数组A和它的大小n,请返回A中的逆序对个数。保证n小于等于5000。测试样例:[1,2,3,4,5,6,7,0],8返回:7//也可以利用上一个题目中求秩的方法,原来求的小于的个数现在可以求大于的原创 2016-07-18 21:12:48 · 465 阅读 · 0 评论 -
Bitwise AND of Numbers Range
Given a range [m, n] where 0 For example, given the range [5, 7], you should return 4.给定两个数m和n,返回m和n之间所有的数字相与后的结果1.从m到n顺序相与class Solution {public: int rangeBitwiseAnd(int m, int原创 2016-07-26 17:32:33 · 249 阅读 · 0 评论 -
双栈排序
请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中。给定一个int[] numbers(C++中为vector<int>),其中第一个元素为栈顶,请返回排序后的栈。请注意这是一个栈,意味着排序过程中你只能访问到第一个元素。测试样例:[1,2,3,4,5]返回:[5,4,3,2,1]原创 2016-07-04 20:47:35 · 226 阅读 · 0 评论 -
字符串子串翻转
假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串。请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次检查子串的函数。给定两个字符串s1,s2,请返回bool值代表s2是否由s1旋转而成。字符串中字符为英文字母和空格,区分大小写,字符串长度小于等于1000。测试样例:"Hello world","world原创 2016-07-04 19:18:19 · 535 阅读 · 0 评论 -
约瑟夫问题II
题目描述约瑟夫问题是一个著名的趣题。这里我们稍稍修改一下规则。有n个人站成一列。并从头到尾给他们编号,第一个人编号为1。然后从头开始报数,第一轮依次报1,2,1,2...然后报到2的人出局。接着第二轮再从上一轮最后一个报数的人开始依次报1,2,3,1,2,3...报到2,3的人出局。以此类推直到剩下以后一个人。现在需要求的即是这个人的编号。给定一个int n,代表游戏的人数。请原创 2016-07-14 21:37:35 · 1123 阅读 · 0 评论 -
数组中第k大的数
#include#include#include#includeusing namespace std;#define NUMBER 10//求一个数组中的第k大数字int findKth(int* num,int start,int ended,int k){ if(start==ended&&k==1) return num[start]; i原创 2016-07-14 20:59:23 · 450 阅读 · 0 评论 -
去除字符串中重复的字符
#include#include#include#includevoid fun(char* str) //将字符串中连续的字符串变成一个{ assert(str!=NULL); int len=strlen(str); int tail=1; int i,j; for( i=1;i<len;i++) { for(j=原创 2016-07-14 19:30:33 · 1454 阅读 · 0 评论 -
去除字符串中的首尾空格并将连续的空格变为一个
#include#include#include#includevoid fun(char* str) //删除str中头尾空格和中间连续的空格{ assert(str!=NULL); int i=0,j=0; while(str[j]==' ') j++; int len=strlen(str)-1; while(str[l原创 2016-07-14 16:23:18 · 1370 阅读 · 0 评论 -
约瑟夫问题I
题目描述约瑟夫问题是一个非常著名的趣题,即由n个人坐成一圈,按顺时针由1开始给他们编号。然后由第一个人开始报数,数到m的人出局。现在需要求的是最后一个出局的人的编号。给定两个int n和m,代表游戏的人数。请返回最后一个出局的人的编号。保证n和m小于等于1000。测试样例:5 3返回:41.用链表class Joseph{public: int原创 2016-07-13 15:09:42 · 278 阅读 · 0 评论 -
Single Number II
Given an array of integers, every element appears three times except for one. Find that single one.class Solution{public: int singleNumber(vector& nums) { //对每一位模拟3进制加法 //one:累加到当前位置是否出现1个原创 2016-07-12 21:36:26 · 245 阅读 · 0 评论 -
二叉树平衡检查
题目描述实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。给定指向树根结点的指针TreeNode* root,请返回一个bool,代表这棵树是否平衡。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *rig原创 2016-07-05 10:56:41 · 389 阅读 · 0 评论 -
输出单层结点
对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。(根节点深度为1)/*struct TreeNode { int val; st原创 2016-07-05 19:23:43 · 235 阅读 · 0 评论 -
检查是否为BST
题目描述请实现一个函数,检查一棵二叉树是否为二叉查找树。给定树的根结点指针TreeNode* root,请返回一个bool,代表该树是否为二叉查找树。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int原创 2016-07-05 19:44:59 · 644 阅读 · 0 评论 -
维护x的秩
现在我们要读入一串数,同时要求在读入每个数的时候算出它的秩,即在当前数组中小于等于它的数的个数(不包括它自身),请设计一个高效的数据结构和算法来实现这个功能。给定一个int数组A,同时给定它的大小n,请返回一个int数组,元素为每次加入的数的秩。保证数组大小小于等于5000。测试样例:[1,2,3,4,5,6,7],7返回:[0,1,2,3,4,5,6]//也可以将每次原创 2016-07-18 20:29:47 · 463 阅读 · 0 评论 -
滑动窗口最大值
// MaxInSlidingWindow.cpp : 定义控制台应用程序的入口点。////滑动窗口的最大值//对于输入数组{2,3,4,2,6,2,5,1}及滑动窗口大小为3时//它们的最大值分别为{4,4,6,6,6,5,}//数组长度为n,滑动窗口大小为k时//暴力解法:O(nk)//利用队列记录当前在滑动窗口内可能成为最大值的元素的位置//用向量记录当前滑动窗口内的最大原创 2016-06-21 20:44:42 · 663 阅读 · 0 评论 -
位向量表示法
#includeusing namespace std;#define BITWORD 32#define SHIFT 5#define MASK 0x1F //(mod32)#define N 1000int a[1+N/BITWORD]; //申请一个内容纳N位的位串void set(int i) //将第i位设置为1{ a[i>>SHIFT]|原创 2016-07-28 11:32:29 · 1030 阅读 · 0 评论 -
Course Schedule[拓扑排序]
There are a total of n courses you have to take, labeled from 0 to n - 1.Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as原创 2016-07-27 20:58:12 · 239 阅读 · 0 评论