摘要: //*------------------------------------- 解释下: 例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5, 那么最大的子数组为3, 10, -4, 7, 2, 因此输出为该子数组的和18。 所有的东西都在以下俩行, 即: b : 0 1 -1 3 13 9 16 18 13 sum: 0 1 1 3 13 13 16 18 18 其实算法很简单,当前面的几个数,加起来后,bsum,则更新sum=b; 若b max) { max = sum; System.out.print... 阅读全文
posted @ 2014-03-28 21:53 狂奔蚂蚁 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 思想比较简单:1、选定一个元素,作为出现次数超过一半的元素a,计次数i为12、依次与后续元素比较,若存在相等元素则i+1,反之i-13、若i==0,令当前元素为a,重复步骤1private static int halfNumber(int[] array) { if (array == null || array.length == 0) { return 0; } int element = 0, times = 0; for (int i = 0; i < array.length; i++) { if (times == 0) { times++; elem... 阅读全文
posted @ 2014-03-28 19:48 狂奔蚂蚁 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 约瑟夫环运作如下:1、一群人围在一起坐成环状(如:N)2、从某个编号开始报数(如:K)3、数到某个数(如:M)的时候,此人出列,下一个人重新报数4、一直循环,直到所有人出列,约瑟夫环结束关于约瑟夫环问题的变形:N个数字(0,1...N)形成一个圈,从0开始一次删除圆圈中的第M个数字,求最后剩下的数字思想:无论是用链表实现还是用数组实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较烦,而且时间复杂度高达O(nm),当n,m非常大(例如上百万,上千万)的时候,几乎是没有办法在短时间内出结果的。我们注意到原问题仅仅是要求出最后的胜利者的序号,而不是要读者模拟整个过程。因此如果要追求效率,就要 阅读全文
posted @ 2014-03-28 19:44 狂奔蚂蚁 阅读(417) 评论(0) 推荐(0) 编辑