question



输入一个正整数数组,将他们连接起来排成一个数,输出能排出的所有数字中最小的一个
对于两个字符串重新定义其大小规则,比如:给定两个字符串s1,s2,如果s1+s2》s2+s1 那么s1>s2,反之s2>s1
按照这个思路,给出算法如下:
public int finMinCom(int []a)
 {
  int result;
  List<String>strs=new ArrayList<String>();
  for(int i:a)
  {
   strs.add(String.valueOf(i));
  }
  Collections.sort(strs,new Comparator<String>()
  {

   @Override
   public int compare(String o1, String o2)//o1比o2小则返回-1,排序就是增序排序。
   {
    // TODO Auto-generated method stub
    String s1=o1+o2;
    String s2=o2+o1;
    
    return s1.compareTo(s2);// s1比s2大,则返回+1,
   }
  });
  
  StringBuilder sb=new StringBuilder();
  for(String str:strs)
  {
   sb.append(str);
  }
  result=Integer.parseInt(sb.toString());
  return result;
 }
 

既然虚拟机采用了分代收集的思想来管理内存,那么内存回收时就必须能识别哪些对象应放在新生代,哪些对象应放在老年代中。为了做到这点,虚拟机给每个对象定义了一个对象年龄(Age)计数器。如果对象在Eden出生并经过第一次Minor GC后仍然存活,并且能被Survivor容纳的话,将被移动到Survivor空间中,并且对象年龄设为1。对象在Survivor区中每“熬过”一次Minor GC,年龄就增加1岁,当它的年龄增加到一定程度(默认为15岁),就将会被晋升到老年代中。对象晋升老年代的年龄阈值,可以通过参数-XX:MaxTenuringThreshold设置。

 
 循环队列:front对头,rear队尾,对头加1,出去。队尾加一进来。
 
 
 欧拉函数
 
 switch是什么  没有break;都会执行下面的,包括defalte
=============================
      Integer c1=new Integer("2016");
   int c2=2016;
   boolean result=(c1==c2?true:false);
   System.out.println(result);true
=============================
   int i=1;
   int result=((i=1)?20:100);
   System.out.println(result);  编译过不了。因为(i=1)是int型,不能转bool。
  
=============================

Prototype模式是利用现有的对象进行克隆。
Factory Method模式是重新创建一个对象。
=============================

采用Hash+小顶堆
Hash就是为了统计每个数出现的次数,然后发生冲突的地方用个链表把它链接起来,在每个节点中存储一个含有data和count成员的结构体,data记录相应的数字,而count记录对应的数字出现的次数,这一步的时间复杂度是o(n).(注意这里虽然数字很多,但是因为会存在大量的重复数据,不用担心最后的空间会有10亿)
然后创建一个大小为100的小顶堆,然后将Hash表中前面100个非空的成员放入小顶堆中,然后将hash表中的其他数据和堆顶出现的次数比较,如果比堆顶出现的次数少,则丢弃当前数,如果大于堆顶元素的出现次数,则替换堆顶,然后进行堆调整,这一步时间复杂度是o(nlog100).

总的时间复杂度是o(n)+o(nlog100)

=============================

补码往右移的时候>>符号位是什么就补什么。>>>与>>唯一的不同是它无论原来的最左边是什么数,统统都用0填充。

=============================
nlogn 比如说堆排序,那么第一个n是n个数,第二个n是你的堆的大小。
=============================
double-->float 要强制转换。高到低。如果是低到高没有问题。的
=============================

int [ n/32 ]  |=  1<< (n%8)  这个是什么意思,把某一位设为1.  比如byte里面。 10转化成里面,对应里面索引为1的第2位。注意第二位是从右往左开始的。最右边是第0位。

最右边第一位其实是第0位。

=============================

bitset其实是【0,1,2,3,4,5,6,7,8,9】这十位里面最左边表示0-9,比如把5放进去。那么就是第五位为1.  是从第0位开始算的。不可以说第五位为5.统计计数。不可能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值