摘要:
一个简单的思考方式是5+6+7+8的和可以看成(5+6+7)+8,所以就可以想到动态规划的方法 设一个二维数组,i代表数列长度为(i+1),j代表数列首部数字。 比如说求和为5的连续正数数列 阅读全文
摘要:
在排序数组中查找很容易想到的就是二分查找,这样的查找效率是相当高的。 找到之后,再在这个数的周围向左或者向右进行延伸,查找有多少个相同的数字。 这次编程主要遇到的问题就是,对二分查找的要点已经忘得差不多了,所以特意写个博客记录。 这个数组中本身含有想要查找的数字很简单,设定三个值,left,midd 阅读全文
摘要:
1、效率最低的方法就是使用两层循环,循环遍历比较两个节点是否相同。O(n^2) 2、观察到自从公共子节点之后,后面的链表必定是相同的。所以就可以使用两个栈,逐个放入。弹出的时候,遇到第一个不同的节点。之前的一个节点就是所求的第一个公共子节点。O(n) 如下图所示: 3、从头到尾遍历,计算两个链表的长 阅读全文
摘要:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 这个问题有一个很巧妙的方法就是不要从左下角或者右上角开始,而是要从左上角或者右下角开始。这是因为当他从左上角或者右下角开始的话,大于 阅读全文
摘要:
没想到一个简单的归并排序,也要这么久,足足写了一个小时25分钟,才能验证通过 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。 输入: 阅读全文
摘要:
1、从1开始的数,逐个判断是不是丑数。直到第N个输出 2、该方法目前还有bug,原因不明,理论上应该能做 每个丑数其实都是由之前的丑数乘2或者乘3或者乘以5得到的 使用一个set容器避免重复,使用一个优先队列存放丑数,每次得到最小的丑数,并且把最小的丑数乘2,乘3,乘以5。这三个结果分别不在set容 阅读全文
摘要:
一个简单的动态规划问题 设一个dataArray二维数组,dataArray[x][y]表示,从x到y个数的和。 则dataArray[x][x]存的是一开始一位数组array[x]的值。 又比如dataArray[1][2] = array[1]+array[2]; 例如: 阅读全文
摘要:
好久没有写博客了,处于对于编程的热爱,我又回来了 回到这个问题,总共有两种思路 1、1)建立一个ArrayList,先存进去前k个数,接着从小到大排序 2)从这个n个数的第k+1数开始和ArrayList最后的一个数比较,如果比最后一个数小,就替换。接着排序。 3)重复上一个过程,直到所有的数遍历完 阅读全文
摘要:
#include<iostream>#include<algorithm>#include<string>#include<stdlib.h>#include<cmath>using namespace std;int main(){ string str1, str2; string shortS 阅读全文
摘要:
#include<iostream>#include<stdlib.h>#include<malloc.h>#include<algorithm> #include<ctime>#define length 10using namespace std;bool compare(int a, int 阅读全文