java 算法中常见的问题总结1(代码实现,不包含逻辑)

java实现小数精确两位,然后四舍五入方法:

详情参考  http://www.cnblogs.com/nayitian/p/3214178.html

例:

  BigDecimal bg = new BigDecimal(d).setScale(2, RoundingMode.UP);

  return bg.doubleValue();

return (int)(money+0.5);

另一种四舍五入的方法:Math.round()

例:

int a =3.1315929035585537;

a=(double)Math.round(a*100)/100;

 

 

 

 

 

康托展开  主要用于求当前排列在所有排列中排第几(一般从零开始),也可用于搜索标记状态

详情参考    http://blog.csdn.net/zhongkeli/article/details/6966805

 

 

 

java中进制的转换

参考地址:   http://blog.csdn.net/swandragon/article/details/4926457

API上面的 Integer类中的方法

 

java中删除数组中的某个元素

参考地址:http://www.cnblogs.com/hanfeihanfei/p/6146077.html

import java.util.Arrays;

import java.util.Scanner;

public class ArraysDelete { public static void main(String[] args) { 

//删除数组中的某一个元素的方法:

//把最后一个元素替代指定的元素,然后数组缩容 

Scanner sc =new Scanner(System.in); 

int[] arr = new int[]{1,2,4,5,9,8,0};

System.out.println(Arrays.toString(arr));

System.out.println("请输入要删除第几个元素:");

int n = sc.nextInt(); sc.close();

//把最后一个元素替代指定的元素 

arr[n-1] = arr[arr.length-1];

//数组缩容 

arr = Arrays.copyOf(arr, arr.length-1);

System.out.println(Arrays.toString(arr)); 

} }

运行结果:

[1, 2, 4, 5, 9, 8, 0]

请输入要删除第几个元素: 

[1, 2, 0, 5, 9, 8]

 

日期的计算:

 1.java中的Calendar类的用法

例:计算当前时间是星期几

import java.util.Calendar;

import java.util.Scanner;

public class Main {

  public static void main(String[] args) {

    Calendar c =Calendar.getInstance();

    Scanner sc = new Scanner(System.in);

    c.set(sc.nextInt(),sc.nextInt()-1, sc.nextInt());

    System.out.println(c.get(Calendar.DAY_OF_WEEK)-1);

    }

}

 使用calendar的时候,需注意,外国的第一天是周日,周二是第二天

外国的月份是从0开始的,如:一月需要设置月份为0

2.时间戳转换

/** 
* 日期格式时间戳 转换成字符串
* @param date 时间戳
* @param format 如:yyyy-MM-dd HH:mm:ss 
* @return 
*/

public static String timeStamp2Date(String seconds,String format) {
if(seconds == null || seconds.isEmpty() || seconds.equals("null")){
return "";
}
if(format == null || format.isEmpty()){
format = "yyyy-MM-dd HH:mm:ss";
}
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(new Date(Long.valueOf(seconds+"000")));
}


/**
* 日期格式字符串转换成时间戳
* @param date 字符串日期
* @param format 如:yyyy-MM-dd HH:mm:ss
* @return
*/
public static String date2TimeStamp(String date_str,String format){
try {
SimpleDateFormat sdf = new SimpleDateFormat(format);
return String.valueOf(sdf.parse(date_str).getTime()/1000);
} catch (Exception e) {
e.printStackTrace();
}
return "";
}

 

请参考  java 使用simpleDateFormat格式化日期 时间

 
 
java进制转换:
由十进制转化为其他进制:

 十进制转成二进制 
  Integer.toBinaryString(int i) 

  十进制转成八进制 
  Integer.toOctalString(int i) 

  十进制转成十六进制: 
  Integer.toHexString(int i)

由其他进制转换为二进制:

  二进制转十进制 
  Integer.valueOf("1010",2).toString()

  八进制转成十进制 
  Integer.valueOf("125",8).toString() 

  十六进制转成十进制 
  Integer.valueOf("ABCDEF",16).toString() 

参考地址:http://www.cnblogs.com/icerainsoft/archive/2012/08/06/2624790.html


java回文快速办法:借助reverse()方法

parseLong(m, n):将n进制数m转化为十进制

 

long a = Long.parseLong(m, n);

long b = Long.parseLong(new StringBuilder(m).reverse().toString(), n);

 if (a == b)

System.out.println("回文");

else

System.out.println("不是回文");

 

 

 在判端两个字符串是否一样的时候,尽量使用equals方法判断,不要单单使用 == 这样有时候会出现问题
 
 
 
binarySearch :参考 http://blog.csdn.net/a1b2c3d4123456/article/details/51097161

此法为二分搜索法,故查询前需要用sort()方法将数组排序,如果数组没有排序,则结果是不确定的,另外

如果数组中含有多个指定值的元素,则无法保证找到的是哪一个。

⑴.binarySearch(object[ ], object key);

如果key在数组中,则返回搜索值的索引;否则返回-1或者”-“(插入点)。插入点是索引键将要插入数组的那一点,即第一个大于该键的元素索引。

 
 
 
卢卡斯定理
lucas(数论定理):
C(n,m)%p=C(n/p,m/p)*C(n%p,m%p)%p    (p为质数)
 
 
 
 
 
 
posted @ 2017-03-22 16:45  lin_zone  阅读(622)  评论(0编辑  收藏