用Java实现一些简单算法

1、for循环,外循环控制的是行数,内循环控制的是每一行的个数。

*****

*****

*****

*****

for (int x = 0; x < 4; x++){// 外循环控制的是行数

for (int y = 0; y < 5; y++){// 内循环控制的是每一行的个数

System.out.print("*");

}

System.out.println();

}

2、


*

**

***

****

*****

for (int x = 1; x <= 5; x++) {

for (int y = 1; y <= x; y++) {

System.out.print("*");

}

System.out.println();

}


3、



54321

5432

543

54

5

for (int x = 1; x <= 5; x++) {

for (int y = 5; y >= x; y--) {

System.out.print(y);

}

System.out.println();

}



4、


1

22

333

4444

55555


for (int x = 1; x <= 5; x++) {

for (int y = 1; y <= x; y++) {

System.out.print(x);

}

System.out.println();

}

5、

* * * * *

* * * *

* * *

* *

*

for (int x = 1; x <= 5; x++) {//分成左右两边,左边是空格,右边是*加空格

for (int y = 1; y < x; y++) {

System.out.print(" ");

}

for (int z = x; z <= 5; z++) {

System.out.print("* ");

}

System.out.println();

}

   6、  倒三角

for (int x = 1; x <= 5; x++) {//分成左右两边,左边是空格,右边是*加空格

for (int y = 1; y < x; y++) {

System.out.print(" ");

}

for (int z = x; z <= 5; z++) {

System.out.print("* ");

}

System.out.println();

}

7、正三角


for (int x = 1; x <= 5; x++) {

for (int y = x; y < 5; y++) {

System.out.print(" ");

}

for (int z = 1; z <= x; z++) {

System.out.print("* ");

}

System.out.println();

}

8、九九乘法表

for (int x = 1; x <= 9; x++) {

for (int y = 1; y <= x; y++) {

System.out.print(y + "*" + x + "=" + y * x + "\t");

}

System.out.println();

}


整型数组

遍历数组的功能

public static void printArray(int[] arr) {

System.out.print("[");

for (int x = 0; x < arr.length; x++) {

if (x != arr.length - 1) {

System.out.print(arr[x] + ",");

} else {

System.out.println(arr[x] + "]");

         }

   }

}


获取最大值

public static int getMax(int[] arr) {

int maxElement = arr[0];

for (int x = 0; x < arr.length; x++) {

if (arr[x] > maxElement) {

maxElement = arr[x];

        }

   }

return maxElement;

}

获取最大值2

public static int getMax_2(int[] arr) {

int maxIndex = 0;

for (int x = 0; x < arr.length; x++) {

if (arr[x] > arr[maxIndex]) {

maxIndex = x;

     }

  }

return arr[maxIndex];

}

置换

private static void swap(int[] arr, int a, int b) {

int temp = arr[a];

arr[a] = arr[b];

arr[b] = temp;

}

反转

public static void reverseArray(int[] arr) {

for (int start = 0, end = arr.length - 1; start < end; start++, end--) {

swap(arr, start, end);

    }

}

冒泡排序

基本思路:相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处。依次类推

public static void bubbleSort(int[] arr) {

for (int x = 0; x < arr.length - 1; x++) {

for (int y = 0; y < arr.length - 1 - x; y++) {

if (arr[y] > arr[y + 1]) {

swap(arr, y, y + 1);

           }

   }

 }

]

选择排序2,记录索引

public static void selectSort_2(int[] arr) {

for (int x = 0; x < arr.length - 1; x++) {

int num = arr[x];

int index = x;

for (int y = x + 1; y < arr.length; y++) {

if (num > arr[y]) {

num = arr[y];

index = y;

}

}

if (index != x) {

swap(arr, x, index);

}

}

}


二分查找(折半查找),数组必须有序

public static int halfSearch(int[] arr, int key) {

int max = arr.length - 1;

int min = 0;

int mid = (max + min) / 2;

while (arr[mid] != key) {

if (key > arr[mid]) {

min = mid + 1;

} else if (key < arr[mid]) {

max = mid - 1;

}

if (max < min) {

return -1;

}

mid = (max + min) / 2;

}

return mid;

}

二分查找2,数组必须有序

public static int halfSearch_2(int[] arr, int key) {

int max, min, mid;

min = 0;

max = arr.length - 1;

while (min <= max) {

mid = (min + max) >> 1;

if (key > arr[mid]) {

min = mid + 1;

} else if (key < arr[mid]) {

max = mid - 1;

} else {

return mid;

}

}

return -min - 1;

}

字符串

字符串数组置换

private static void swap(String[] arr, int a, int b) {

String temp = arr[a];

arr[a] = arr[b];

arr[b] = temp;

}

给定一个字符串数组。按照字典顺序进行从小到大的排序。

public static void sortString(String[] arr) {

for (int i = 0; i < arr.length - 1; i++) {

for (int j = i + 1; j < arr.length; j++) {

if (arr[i].compareTo(arr[j]) > 0) {

swap(arr, i, j);

}

}

}

}

一个子串在整串中出现的次数。

//"nbaernbatynbauinbaopnba"    “nba"

/* 思路:

* 1,要找的子串是否存在,如果存在获取其出现的位置。这个可以使用indexOf完成。

* 2,如果找到了,那么就记录出现的位置并在剩余的字符串中继续查找该子串,

* 而剩余字符串的起始位是出现位置+子串的长度.

* 3,以此类推,通过循环完成查找,如果找不到就是-1,并对每次找到用计数器记录。

*/

//方法一

public static int getKeyStringCount(String str, String key) {

// 定义计数器

int count = 0;

// 定义变量记录key出现的位置

int index = 0;

while ((index = str.indexOf(key)) != -1) {

str = str.substring(index + key.length());

count++;

}

return count;

}

//方法二

public static int getKeyStringCount_2(String str, String key) {

int count = 0;

int index = 0;

while ((index = str.indexOf(key, index)) != -1) {

index = index + key.length();

count++;

}

return count;

}

两个字符串中最大相同的子串。

/* "qwerabcdtyuiop" "xcabcdvbn"

* 思路: 1,既然取得是最大子串,先看短的那个字符串是否在长的那个字符串中。 如果存在,短的那个字符串就是最大子串。

* 2,如果不是呢,那么就将短的那个子串进行长度递减的方式去子串,去长串中判断是否存在。 如果存在就已找到,就不用在找了。

*/

public static String getMaxSubstring(String s1, String s2) {

String max = null, min = null;

max = (s1.length() > s2.length()) ? s1 : s2;

min = max.equals(s1) ? s2 : s1;

System.out.println("max=" + max);

System.out.println("min=" + min);

for (int i = 0; i < min.length(); i++) {

for (int a = 0, b = min.length() - i; b != min.length() + 1; a++, b++) {

String sub = min.substring(a, b);

// System.out.println(sub);

if (max.contains(sub))

return sub;

}

}

return null;

}

在一个字符串中,统计出现的整数的个数,连续的数字为一个整数(不考虑负数),字符串中不包含空格。

/*** a10b20c30de40fg* 思路:首先要遍历所有的字符,判断每个字符是不是数字,是数字的话就把它放在一个StringBuilder对象* 里面并标记,下面一个字符要是数字就加在后面,不是数字的话,就把当前的StringBuilder里面的数字* 塞到list里面,最后判断list长度即可

*/public static void main(String[] args) {  

Scanner scanner = new Scanner(System.in);  

String s = scanner.next(); 

  scanner.close();     

  if (s != null && s.length() != 0) {     

  Listlist = new ArrayList();

StringBuilder sb = new StringBuilder();

boolean isChar = false;

for (int i = 0; i < s.length(); i++) {

char c = s.charAt(i);

if (c >= '0' && c <= '9') {

sb.append(s.charAt(i));

if (i == s.length() - 1) {

list.add(Integer.parseInt(sb.toString()));

sb.setLength(0);

}

isChar = false;

} else {

if (sb.length() > 0 && isChar == false) {

list.add(Integer.parseInt(sb.toString()));

sb.setLength(0);

}

isChar = true;

}

}

System.out.println(list.size());

}

}

如果要是换个问法也是一样的,统计一个字符串中出现整数的和,只需要在下面加入一个遍历list,把所有的数字加一起就好了。

if (list.size() > 0) {

int sum = 0;

for (int i = 0; i < list.size(); i++) {

sum = sum + list.get(i);

}

System.out.println(sum);

}

  持续更新中。。。。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,712评论 0 33
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,833评论 0 2
  • 回溯算法 回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并...
    fredal阅读 13,579评论 0 89
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    叶总韩阅读 5,116评论 0 41
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,493评论 18 399