摘要:
题意: 给一个字符串,问:要补多少个字符才能让其出现循环?出现循环是指循环节与字符串长度不相等。比如abc要补多个变成abcabc。若已经循环,输出0。思路: 根据最小循环节的公式,当len%(len-next[len])==0时,最小循环节为len/(len-next[len]),而当len%... 阅读全文
摘要:
题意: 定义a为一个字符串,a*a表示两个字符相连,即 an+1=a*an,也就是出现循环了。给定一个字符串,若将其表示成an,问n最大为多少?思路: 如果完全不循环,顶多就是类似于abc1这样,即n=1。但是如果循环出现了,比如abab,那就可以表示成(ab)2。还有一点,就是要使得n尽量大,... 阅读全文
摘要:
题意: 给定一个n个点m条边的带权有向图,求平均权值最小的回路的平均权值?思路: 首先,图中得有环的存在才有解,其次再解决这个最小平均权值为多少。一般这种就是二分猜平均权值了,因为环在哪也难以找出来,还有可能是一条边属于多个环。对于每个猜到的平均值,如果对应环的存在,那么这个环的每条边的权减去这... 阅读全文
摘要:
题意:给定一个序列,第i个元素代表第i天这支股票的价格,问在最佳时机买入和卖出能赚多少钱?只买一次,且仅1股,假设本钱无限。思路:要找一个最低价的时候买入,在最高价的时候卖出利润会最大。但是时间是不能冲突的,比如说在明天买入,今天卖出。因此,对于今天的价格,应该要找到今天之前的该股的最低价,买入,今... 阅读全文
摘要:
题意:0代表水,1代表陆地,那么被水围起来的就是岛了,给一个01矩阵,问有多少个岛?思路:DFS还是比较短,实现了一下。如果一个点已经被遍历过了,那就将其置为0就行了,不要去搜0的。 1 class Solution { 2 public: 3 bool isok(vector >& gri... 阅读全文
摘要:
题意:给一个用序列堆成的三角形,第n层的元素个数为n,从顶往下,每个元素可以选择与自己最近的两个下层元素往下走,类似一棵二叉树,求最短路。 [2], [3,4], [6,5,7], [4,1,8,3] 注意:这里可以2->3>5>1,也可以2->4>5->1,隔层相邻就可以走。... 阅读全文
摘要:
题意:给一个单链表,将其每两个结点交换,只改尾指针,不改元素值。思路:迭代法和递归法都容易写,就写个递归的了。4ms 1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 *... 阅读全文
摘要:
题意:有一个有序序列A,其内部可能有部分被旋转了,比如A[1...n]被转成A[mid...n]+A[1...mid-1],如果被旋转,只有这种形式。问最小元素是?(假设没有重复元素)思路:如果是序没乱,直接返回A[1],如果乱了,二分查找还是可以的,O(1)可能就不行了。 二分要点:mid有可能... 阅读全文