算法
sisuotoy
这个作者很懒,什么都没留下…
展开
-
有3n+1个数字,其中3n个中是重复的,只有1个是不重复的,怎么找出来
public class Test{ public static void main(String[] args){ int[] arr=new int[200000000]; for(int i=0;i<arr.length;i++){ arr[i]=i/2; } arr[1999999...原创 2020-04-16 16:29:24 · 1557 阅读 · 0 评论 -
有1亿个数字,其中有2个是重复的,快速找到它,时间和空间要最优
通过计数排序联想到原理:把数字值直接映射到数组下标(时间最优),这里重复的数字只有两次,为了空间最优,就用bit来表示(只有0和1),1byte=8bit,一个byte可以存储8个数字的计数。所以建立数组 byte[] bucket=new byte[(最大值-最小值)/8+1];public class Test{ public static void main(String[] ...原创 2020-04-16 11:16:35 · 7985 阅读 · 7 评论 -
一个无序,不重复数组,输出N个元素,使得N个元素的和相加为M
方法:通过穷举法列出所有组合。假如一组数据int nums[]=new int[]{1,3,5,11,18,23,35,56,100}; 数组长度为9。现在给出一个数,比如说30,我们用眼睛一看很容易找到:1,11,18这一组合;但是如果用代码来找的话,就要穷举出所有的组合,那么怎样确定有多少种组合呢?其实也很简单,对于一组数据里面的单个元素要么被选中要么不选中,这很容易把它映射成某个数的二进...原创 2020-02-26 11:11:33 · 1353 阅读 · 0 评论 -
蚂蚁借呗每月等额计算方式
在网上找蚂蚁借呗的计算方式,全是一堆计算不准确的算法,都是按整月来算的(每个月的天数还一样),但是蚂蚁借呗是按天算的,而且还是固定还款日,如我2月22日借款到3月10日还第一期,使用时间只有17天,所以每期的使用时间又不相同,但是又要求每期还款(本金+利息)尽量平均以下是我自己琢磨的方法,唯一缺点是:在有一些数字是比借呗多一个0.01的平均数(误差)或少一个0.01的平均数(误差)java ...原创 2020-02-22 22:36:46 · 4684 阅读 · 1 评论