摘要: 假设把某股票的价格按时间顺序·存储在数组里,请问买卖股票一次可能获得的最大利润是多少 方法:遍历到某个时间点i时候,寻找i前面的最小值,他们的差就是利润;遍历一遍i即可得出; int MAXDiff(int[] number){ if(number==null&&number.length<2) r 阅读全文
posted @ 2020-03-29 17:05 浪波激泥 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 在0-n-1这n个数中,每次从这个圈中删除第m个数字; 经典解法:链表;将模拟出环形链表结构后进行后进行相关的删除工作;直到只剩一个;也就是常规暴力解法; 创新解法:数学推导; n>1时 f(n.m)=[f(n-1),m+m ] %n n=1时候 f(n.m)==0; int f1(int n,in 阅读全文
posted @ 2020-03-29 17:04 浪波激泥 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 从从牌中随便抽取5张牌,判断是不是连续的,大小王可以看成任意牌 方法:把大小王用0表示;先排序;判断大小王的个数;判断出了大小王,其他数之间的间隔,间隔1为有序,间隔0则有重复,直接返回false;最后比较大小王的个数与距离 阅读全文
posted @ 2020-03-29 17:02 浪波激泥 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 把n个骰子扔在地上,求出现和为s的概率 可得n<=s<=6n 方法:定义6n-n+1长度的数组,然后对所有可能出现的组合进行计算,把结果进行计数存进数组;递归 方法二:动态规划,大问题小化:考虑使用两个数组存储点子的总数之和出现的次数,每增一个骰子,是前几个数组值的和,因为6个面,所以前n的前6的和 阅读全文
posted @ 2020-03-29 17:01 浪波激泥 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 题目一:队列的最大值:给定一个数组和滑动窗口大小,请查找出所有滑动窗口的最大值 方法:设置两端开口队列存储窗口最大值的下标;每个队头是这个窗口当前最大值; 窗口滑动时;新元素进队,把队里比它小的就删掉 名称 deque 是“double ended queue(双端队列)”的缩写 ArrayList 阅读全文
posted @ 2020-03-29 17:00 浪波激泥 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 题目一:翻转单词顺序 方法一:首先总体全部翻转,接着再把各个单词再翻转 i am a surper man. .nam reprus ma i man. surper am i static char [] reverse(char[]a,int be,int end) { while(be<end 阅读全文
posted @ 2020-03-29 16:59 浪波激泥 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 题目一:和为s的数字,在一个递增数组中寻找两个数字的和等于s 方法:双指针法,一个在头一个在尾;如果两个指针指向的和小于,那么be++;大于end--; 题目二:打印所有和为s的连续正数序列 方法:双指针法,有点像贪婪算法,一个在1一个在2;如果两个指针内所有数的和小于s,那么end++;大于be+ 阅读全文
posted @ 2020-03-29 16:56 浪波激泥 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 题目一:数组中只出现一次的两个数字 :除了两个数字只出现过一次,其他都出现两次;要求时间复杂度n 空间复杂度1 方法:由于其他出现两次,所以异或的结果是两个只出现过一次数字的异或结果,结果肯定不为0;那么结果用二进制表示中的第一个‘1’的位置,对数组进行分类,该位置为1的和0的,分为两个数组,此时 阅读全文
posted @ 2020-03-29 16:55 浪波激泥 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 从根节点到叶子点的最长路径上的结点数为深度 方法:根据树的特性,比较左右子树,选那个长的加1;大问题小化递归计算 int TreeDepth(BinaryTreeNode pNode){ //边界,叶子的下一个返回0 if(pNode==null ) return 0; int L= TreeDep 阅读全文
posted @ 2020-03-29 16:53 浪波激泥 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 方法:搜索二叉树的特点就是左树小于节点,节点小于右树,所以采用中序遍历法就可以得到排序序列 BinaryTreeNode KthNode(BinaryTreeNode pNode ,int k){ if( pNode ==null||k==0) return null; return KthNode 阅读全文
posted @ 2020-03-29 16:51 浪波激泥 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 题目一:数字在排序数组中出现的次数 方法一:使用二分查找找到这个数字,然后在左右展开统计 方法二:分别用二分查找寻找第一个k和最后一个K,再相减 static int findk(int a[],int k) { if(a==null||a.length<1) return 0; int be=0; 阅读全文
posted @ 2020-03-29 16:50 浪波激泥 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 方法一:暴力,遍历A链表每一个节点的过程中,对B链表进行检查 O(AB) 方法二:因为题目中链表是单向的,所以在第一个重合点后,其他都相等,就是Y型的。所以他们尾节点是相同的,因此就重后面开始,符合“先进后出的特点”,我们可以定义两个栈,然后链表进栈,在进行出栈比较; 方法三:先获取两个链表的长度, 阅读全文
posted @ 2020-03-29 16:47 浪波激泥 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 在数组中如果前面的数字大于后面的,那么就是逆序对 方法一:使用插入排序,即可统计交换次数就是逆序对的值 方法二:归并排序,需要牺牲空间使得时间复杂度提高一点 public static int InversePairs(int[] data) { if(data == null || data.le 阅读全文
posted @ 2020-03-29 16:46 浪波激泥 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 方法:定义256大小的数组,因为字符char是一个8位的数组,有256种可能;遍历一遍,统计每个字符出现的个数;再遍历一遍,查看在辅助数组中的出现次数,第一个为一就输出; 阅读全文
posted @ 2020-03-29 16:45 浪波激泥 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 只包含因子2,3,5,的数称为丑数;求小到大的顺序的第1500个丑数,1是第一个丑数 方法一:不牺牲空间进行,遍历增加 bool isUgly(int number){ while(number%2==0) number/=2; while(number%3==0) number/=3; while 阅读全文
posted @ 2020-03-29 16:44 浪波激泥 阅读(243) 评论(0) 推荐(0) 编辑
摘要: int Max_Str(String s){ char [] str=s.toCharArray(); int curlength=0;//子串长度 int maxlength=0; int []B=new int[26]; for(int i=0;i<26;i++) B[i]=-1; for(in 阅读全文
posted @ 2020-03-29 16:42 浪波激泥 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 在m*n的棋盘中,每一格放一个礼物,只能向左或下走,求右下角礼物的最大值; 方法一:创建辅助数组,数组中的每一个值表示上面还有左边结果的最大值 int Max_vaule(int array[][]) { if(array==null||array.length<0) return 0; int m 阅读全文
posted @ 2020-03-29 16:41 浪波激泥 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 0变a ,1变b,25变z 。即一个字符串可以变成多种形式,请计算一共有多少种 方法一:递归分解 int TranFrom1(int n) { if(n<0) return 0; if(n/10==0) return 1; int k=0; k+=TranFrom1(n/10); if(n%100< 阅读全文
posted @ 2020-03-29 16:40 浪波激泥 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 把数组里的所有的数字拼接排成一个最小的数 全排列 阅读全文
posted @ 2020-03-29 16:38 浪波激泥 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 数字以“01234567891011121314151617181920……”的格式格式序列化到一个字符序列中,求任意第n位的对应数字 方法一:遍历到n 方法二:寻找数的规律 1-9 1*9个 10-99 2*9*10个 100-999 3*100*9 …… int findnumed(int n) 阅读全文
posted @ 2020-03-29 16:36 浪波激泥 阅读(269) 评论(0) 推荐(0) 编辑