• 兔子问题(斐波那契数列规律)
  • 台阶问题 (兔子问题变种,递归规律)
  • 素数问题(判断素数、质数方式)
  • 水仙花数问题(数字分解)
  • 查找算法(二分查找)
  • 排序算法(选择排序,冒泡排序,快速排序)

兔子问题,重点是找到规律

斐波那契数列 1、1、2、3、5、8、13、21、34、55

规律为:F(n)=F(n-1)+F(n-2)(n>2,n∈N*)

    public static void main(String[] args) {for (int i = 1; i <= 20; i++)
System.out.println("第" + i + "个月:" + function(i));
} private static int function(int x) {
if (x == 1 || x == 2)
return 1;
else
return function(x - 1) + function(x - 2);
}

台阶问题:有n步台阶,一次只能上1步或2步,共有多少种走法?

规律为:F(n)=F(n-1)+F(n-2)

    public static void main(String[] args) {
System.out.println(function(10));
} private static int function(int n) {
if (n <= 2) {
return n;
}
return function(n - 1) + function(n - 2); }

判断素数(质数),重点是记住判断方式。

判断number是否是素数有这么几种方法:
(1)用2至number-1之间的所有数去整除number,如果有一个能被整除,说明number是非素数;除非所有的数都不能被整除,才说明number是素数.
(2)用2至number/2之间的所有数去整除number,如果有一个能被整除,说明number是非素数;除非所有的数都不能被整除,才说明number是素数.
(3)用2至number的平方根之间的所有数去整除number,如果有一个能被整除,说明number是非素数;除非所有的数都不能被整除,才说明number是素数.

    public static void main(String[] args) {
for (int i = 1; i <= 200; i++) {
if (function(i)) {
System.out.println("素数:" + i);
}
}
} private static boolean function(int x) { for (int i = 2; i <= x / 2; i++) {
if (x % i == 0) {
return false;
}
}
return true;
}

水仙花数,重点是分解百位、十位、个位。

public static void main(String[] args) {
for (int i = 1; i <= 999; i++) {
if (function(i)) {
System.out.println("水仙花数:" + i);
}
}
} private static boolean function(int x) { int i = 0, j = 0, k = 0; i = x / 100; j = (x % 100) / 10; k = x % 10; if (x == i * i * i + j * j * j + k * k * k) return true; else return false;
}

查找算法(二分查找)

对于二分查找算法要求, 查找前的数据必须是已经排好序的, 然后得到数组的开始位置start和结束位置end, 取中间位置mid的数据a[mid]跟待查找数据key进行比较, 若 a[mid] > key, 则取end = mid - 1; 若 a[mid] < key, 则取start = mid + 1; 若 a[mid] = key 则直接返回当前mid为查找到的位置. 依次遍历直到找到数据或者最终没有该条数据.

    public static void main(String[] args) {

        int[] nums = new int[] { 1, 3, 5, 7, 9, 11, 13, 17 };

        System.out.println(function(nums, 5));
} private static int function(int[] nums, int key) { int start = 0;
int end = nums.length - 1;
int mid = -1;
while (start <= end) {
mid = (start + end) / 2;
if (nums[mid] == key) {
return mid;// 已经查到返回!
} else if (nums[mid] > key) {
end = mid - 1;
} else if (nums[mid] < key) {
start = mid + 1;
}
}
return -1;
}

选择排序,冒泡排序,快速排序

public static void main(String[] args) {

        int[] nums = new int[] { 6, 3, 8, 2, 9, 1 };

        bubbleSort(nums);

        System.out.println("bubbleSort:" + Arrays.toString(nums));

        //

        nums = new int[] { 6, 3, 8, 2, 9, 1 };

        QuickSort(nums, 0, nums.length - 1);

        System.out.println("QuickSort:" + Arrays.toString(nums));

        //

        nums = new int[] { 6, 3, 8, 2, 9, 1 };

        ChoiceSort(nums);

        System.out.println("ChoiceSort:" + Arrays.toString(nums));

    }

    // 冒泡排序
public static void bubbleSort(int[] a) {
int len = a.length;
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - 1 - i; j++) {
if (a[j] > a[j + 1]) {
swap(a, j + 1, j);
}
}
} } // 快速排序
public static void QuickSort(int a[], int low, int hight) {
int i, j, index;
if (low > hight) {
return;
}
i = low;
j = hight;
index = a[i]; // 用子表的第一个记录做基准
while (i < j) { // 从表的两端交替向中间扫描
while (i < j && a[j] >= index)
j--;
if (i < j)
a[i++] = a[j];// 用比基准小的记录替换低位记录
while (i < j && a[i] < index)
i++;
if (i < j) // 用比基准大的记录替换高位记录
a[j--] = a[i];
}
a[i] = index;// 将基准数值替换回 a[i]
QuickSort(a, low, i - 1); // 对低子表进行递归排序
QuickSort(a, i + 1, hight); // 对高子表进行递归排序 } // 选择排序
public static void ChoiceSort(int[] a) {
for (int i = 0; i < a.length; i++) {
int min = i; for (int j = i + 1; j < a.length; j++) {
if (a[min] > a[j]) {
min = j;
}
}
if (i != min) {
int tmp = a[min];
a[min] = a[i];
a[i] = tmp;
}
}
} // 交换元素
private static void swap(int[] a, int i, int j) {
int tmp;
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}

Java常见算法整理的更多相关文章

  1. Java常见Exception整理

    前言: 技术开发入坑近1年,摸打滚爬,各种升级打怪.因目前从事Java相关,故整理了一下并把常见的异常(Exception)贴出来,一来为了后续提醒自己,二来供即将入坑的朋友打一下预防针!A级(代码逻 ...

  2. 8种Java排序算法整理

    package org.hbz.test; import java.util.ArrayList; import java.util.Arrays; import java.util.List; im ...

  3. Java常见运算符整理

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/44724267 本文主要介绍Java中常见的运算符,重点介绍 ...

  4. JAVA常见算法题(三十一)---冒泡排序

    package com.jege.spring.boot.hello.world; /** * java算法之冒泡排序<br> * 将数组按照从大到小的顺序排列<br> * * ...

  5. JAVA常见算法题(二十八)

    package com.forezp.util; import java.util.Arrays; /** * 两个int数组,都是从小到大的的排列,请合并为一个新的数组,也是从小到到大的排列, * ...

  6. java常见数据结构整理

    java中容器类数据结构主要在java.util包中. java.util包中三个重要的接口及特点:List(列表).Set(保证集合中元素唯一).Map(维护多个key-value键值对,保证key ...

  7. Java 常见BUG 整理

    1.BigDecimal初始化double 2.Integer   java对于-128到127之间的数,会进行缓存,这个范围的Integer对象是同一个! == 是ok,但是超出这个范围就不可以用 ...

  8. JAVA常见算法题(三十)

    package com.forezp.util; import java.io.BufferedReader; import java.io.FileReader; import java.io.In ...

  9. JAVA常见算法题(二十九)

    package com.forezp.util; import java.util.Scanner; /** * 判断输入的5个字符串的最大长度,并输出 * * * @author Administr ...

随机推荐

  1. 导入 theano 失败。“cannot import name gof”

    按照网上教程安装好了 theano 之后,import theano 出现错误."cannot import name gof".网上找了很多教程,都不可行.最后找到如下教程.亲测 ...

  2. Java设计模式之模板方法设计模式(银行计息案例)

    不知道为什么,这几天对Java中的设计模式非常感兴趣,恰巧呢这几天公司的开发任务还不算太多,趁着有时间昨天又把模板方法模式深入学习了一下,做了一个客户在不同银行计息的小案例,感触颇深,今天给各位分享一 ...

  3. oracle-plsql序列问题

    场景:用来汇总工作中数据库的异常问题! 1 问题 序列在会话中未定义 解决: 创建Sequence后直接查询它的当前值(CURRVAL)会出错,要先调用Sequence对象.NEXTVAL,才能查询当 ...

  4. 【TRICK】解决锚点定位向下浮动Xpx问题

    1. 问题描述 页面滚动后,菜单栏会固定在页头,当锚点定位时,菜单会遮盖部分定位后的内容,所以需要在锚点定位后自动向下漂移Xpx. 2. 解决办法 a. 利用空div 占位,如下: <a hre ...

  5. 来一手 AOP 注解方式进行日志记录

    系统日志对于定位/排查问题的重要性不言而喻,相信许多开发和运维都深有体会. 通过日志追踪代码运行状况,模拟系统执行情况,并迅速定位代码/部署环境问题. 系统日志同样也是数据统计/建模的重要依据,通过分 ...

  6. 简单聊聊不可或缺的Nginx反向代理服务器--实现负载均衡【上篇】

    今天又是新的一周,我养足了精神去对待新一周的工作,但是今天到公司发现还是有一点空闲时间的,所以就想与之前接触过的Nginx再交往得更深一点儿. 什么是Nginx: Nginx是一款高性能的http服务 ...

  7. [Tyvj 1952] Easy

    P1952 Easy 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:(我们来简化一下 ...

  8. python机器学习实战(三)

    python机器学习实战(三) 版权声明:本文为博主原创文章,转载请指明转载地址 www.cnblogs.com/fydeblog/p/7277205.html  前言 这篇notebook是关于机器 ...

  9. This Adroid SDK r…

    有时候开启eclipse时会出现如下提示框: This Adroid SDK requires Android Developer

  10. 我的Chrome

    插件: CaretTab - New Tab Clock and Date 完全就是为了好看