![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法思考
chenpidaxia
目前只是一个学生
展开
-
数组中出现次数超过一半的数字
找出一个数组中出现次数超过一半的数字 春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。 给定一个红包的金额数组gifts及它的大小n,请返回所求红包的金额。若没有金额超过总数的一半,返回0。这个题目实质上是求一个数组中出现次数超过一般的数字的数量,原创 2017-03-28 22:11:56 · 470 阅读 · 0 评论 -
用队列实现栈
以前接触过用两个栈实现一个队列,现在又来一个逆问题,用队列实现栈,那么是不是需要使用两个栈,才能实现一个队列呢? 答案不是的,队列有两个口,一进一出。 那么思路就很简单了,用循环队列的思想,就可以通过一个队列实现一个队列。 比如初始入队 1, 在入2 2,1 我们循环一次把1取出来,在重新插入变成 1,2 这是队列内的元素出队排列就符合栈的排列了,如果在插一个呢 3,1,2 循原创 2017-06-09 21:33:03 · 399 阅读 · 0 评论 -
hiho任务分配
一道区间的题目,画个图就可以知道,最少的机器数目=被最多运行区间覆盖的数目。只要维护一个记录当前最大区间覆盖数目就要,重合边界点要注意,起点要在终点的前面。#include<iostream>#include<vector>#include<algorithm>using namespace std;//记录点,true为一个区间的起点,false为一个区间的终点struct point{原创 2017-06-21 14:06:59 · 247 阅读 · 0 评论 -
深度优先搜索应用:走迷宫
走迷宫问题是深度优先搜索的一个典型应用,通常迷宫的形状如下 0为可走的道路,1为墙壁。通常情况下一些变种的模型,会加入一些特殊项,有别的意思,比如数字5代表钥匙,当然复杂模型先不讨论,从最简单的开始。深度优先搜索的思想其实就是枚举式的递归,不断的对当前状态下进行对下一状态转移的进行枚举,直到找到解。在迷宫问题中,任意一个可以走的点都有4种转移状态(往上,往下,往左,往右),当然不是每一种状原创 2017-05-07 20:13:12 · 4721 阅读 · 4 评论 -
找二进制0 和1
int n=0;cin>>n;if(n==0) return 1;if(n<0) n=-n;int count=0;while(n){ if((n&0x01) == 0) { count++; } n=n>>1;} cout<<count<<endl;return 0;原创 2017-05-04 21:03:11 · 1525 阅读 · 0 评论 -
回文串判断
回文串就是通常我们说的,从头读到尾和从尾读到头都一样的字符串。 比如下面两个例子。 hellolleh 是回文串 helloworld 不是回文串。判断是不是回文串的思路很简单,双指针,从两边往中间靠逐个对比。 下面是代码,考虑了奇数长度回文串和偶数长度回文串的特点,循环结束条件为i<=j,很好理解,奇数长度回文串最终的比较是最中间的同一个字符,相当于字符自身的比较。如果是回文串的话,跳原创 2017-05-04 19:59:55 · 1945 阅读 · 0 评论 -
有序二维数组的查找
class Solution { public: bool Find(int target, vector原创 2017-05-04 19:49:30 · 346 阅读 · 0 评论 -
链表操作:反转链表
反转链表是一个挺有趣的问题。我们可以化为两个链表的衔接和断开问题。为了形象说明假设有两条链表L1和L2(转换过程中只有一条),以蓝色的节点为L1的节点,红色的节点为L2的节点。其中L2为L1的反转链表。 要从L1转换到转换到L2。可以看出从L1开始截取当前一个节点作为L2的头,被截取节点的下一节点为,L1的新头,然后把L1的心头指向L2的头,不断重复直到转换完毕,说的比较抽象下面...原创 2017-04-13 20:20:35 · 409 阅读 · 0 评论 -
算法思想:关于找数组中第K大的数的思考
对于数组这东西,编程编的久了。绝对不陌生,但是数组可以衍生出很多有意思的问题。比如找出一个整形数组中第K大的数;找出一个整形数组中第K大的数,输出它的位置等等。 找第K个大的数不难,只要是接触过快速排序的人。都知道可以用快排的一次划分步骤作为筛选条件。 可以很快的写出partition的方法,快排还在草稿中,以后讨论int my_partition(int*& r,int begin,int e原创 2017-03-26 22:15:09 · 443 阅读 · 0 评论 -
一串首尾相连的珠子(m个),有N种颜色(N《=10),设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短。并分析时间复杂度与空间复杂度。
这个题目网上已经很多大佬写过了。因为这个题目本身很有意思,所以打算写下自己的一些见解。内容如文章标题: 一串首尾相连的珠子(m个),有N种颜色(N《=10),设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短。并分析时间复杂度与空间复杂度。这里我打算用牛客的简化题目来进行讲解:题目描述有一条彩色宝石项链,是由很多种不同的宝石组成的,包括红宝石,蓝宝石,钻石,翡翠,珍珠等。有一天国王把原创 2017-08-28 11:04:45 · 2704 阅读 · 0 评论