摘要:依次類推選擇排序基本思路把第一個(gè)元素依次和后面的所有元素進(jìn)行比較。方法一定義計(jì)數(shù)器定義變量記錄出現(xiàn)的位置方法二兩個(gè)字符串中最大相同的子串。在一個(gè)字符串中,統(tǒng)計(jì)出現(xiàn)的整數(shù)的個(gè)數(shù),連續(xù)的數(shù)字為一個(gè)整數(shù)不考慮負(fù)數(shù),字符串中不包含空格。
for循環(huán),外循環(huán)控制的是行數(shù),內(nèi)循環(huán)控制的是每一行的個(gè)數(shù)。
***** ***** ***** ***** for (int x = 0; x < 4; x++){// 外循環(huán)控制的是行數(shù) for (int y = 0; y < 5; y++){// 內(nèi)循環(huán)控制的是每一行的個(gè)數(shù) System.out.print("*"); } System.out.println(); }
--------------------------------------------------
***** **** *** ** * for (int x = 1; x <= 5; x++) { for (int y = x; y <= 5; y++) { System.out.print("*"); } System.out.println(); }
--------------------------------------------------
* ** *** **** ***** for (int x = 1; x <= 5; x++) { for (int y = 1; y <= x; y++) { System.out.print("*"); } System.out.println(); }
--------------------------------------------------
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(); }
--------------------------------------------------
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(); }
--------------------------------------------------
* * * * * * * * * * * * * * * 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(); }
--------------------------------------------------
?
* * * * * * * * * * * * * * * 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(); }
--------------------------------------------------
九九乘法表
for (int x = 1; x <= 9; x++) { for (int y = 1; y <= x; y++) { System.out.print(y + "*" + x + "=" + y * x + " "); } System.out.println(); }整型數(shù)組
遍歷數(shù)組的功能
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; }
--------------------------------------------------
反轉(zhuǎn)
public static void reverseArray(int[] arr) { for (int start = 0, end = arr.length - 1; start < end; start++, end--) { swap(arr, start, end); } }
--------------------------------------------------
冒泡排序
基本思路:相鄰元素兩兩比較,大的往后放,第一次完畢,最大值出現(xiàn)在了最大索引處。依次類推
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); } } } }
--------------------------------------------------
選擇排序
基本思路:?把第一個(gè)元素依次和后面的所有元素進(jìn)行比較。?第一次結(jié)束后,就會(huì)有最小值出現(xiàn)在最面。依次類推
public static void selectSort(int[] arr) { for (int x = 0; x < arr.length - 1; x++) { for (int y = x + 1; y < arr.length; y++) { if (arr[x] > arr[y]) { swap(arr, x, y); } } } }
--------------------------------------------------
選擇排序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); } } }
--------------------------------------------------
二分查找(折半查找),數(shù)組必須有序
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,數(shù)組必須有序
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; }字符串
字符串?dāng)?shù)組置換
private static void swap(String[] arr, int a, int b) { String temp = arr[a]; arr[a] = arr[b]; arr[b] = temp; }
給定一個(gè)字符串?dāng)?shù)組。按照字典順序進(jìn)行從小到大的排序。
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); } } } }
--------------------------------------------------
一個(gè)子串在整串中出現(xiàn)的次數(shù)。
//"nbaernbatynbauinbaopnba" “nba" /* 思路: * 1,要找的子串是否存在,如果存在獲取其出現(xiàn)的位置。這個(gè)可以使用indexOf完成。 * 2,如果找到了,那么就記錄出現(xiàn)的位置并在剩余的字符串中繼續(xù)查找該子串, * 而剩余字符串的起始位是出現(xiàn)位置+子串的長(zhǎng)度. * 3,以此類推,通過循環(huán)完成查找,如果找不到就是-1,并對(duì)每次找到用計(jì)數(shù)器記錄。 */ //方法一 public static int getKeyStringCount(String str, String key) { // 定義計(jì)數(shù)器 int count = 0; // 定義變量記錄key出現(xiàn)的位置 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; }
--------------------------------------------------
兩個(gè)字符串中最大相同的子串。
/* "qwerabcdtyuiop" "xcabcdvbn" * 思路: 1,既然取得是最大子串,先看短的那個(gè)字符串是否在長(zhǎng)的那個(gè)字符串中。 如果存在,短的那個(gè)字符串就是最大子串。 * 2,如果不是呢,那么就將短的那個(gè)子串進(jìn)行長(zhǎng)度遞減的方式去子串,去長(zhǎng)串中判斷是否存在。 如果存在就已找到,就不用在找了。 */ 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; }
--------------------------------------------------
在一個(gè)字符串中,統(tǒng)計(jì)出現(xiàn)的整數(shù)的個(gè)數(shù),連續(xù)的數(shù)字為一個(gè)整數(shù)(不考慮負(fù)數(shù)),字符串中不包含空格。
/** * a10b20c30de40fg * 思路:首先要遍歷所有的字符,判斷每個(gè)字符是不是數(shù)字,是數(shù)字的話就把它放在一個(gè)StringBuilder對(duì)象 * 里面并標(biāo)記,下面一個(gè)字符要是數(shù)字就加在后面,不是數(shù)字的話,就把當(dāng)前的StringBuilder里面的數(shù)字 * 塞到list里面,最后判斷l(xiāng)ist長(zhǎng)度即可 */ 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()); } }
如果要是換個(gè)問法也是一樣的,統(tǒng)計(jì)一個(gè)字符串中出現(xiàn)整數(shù)的和,只需要在下面加入一個(gè)遍歷list,把所有的數(shù)字加一起就好了。
if (list.size() > 0) { int sum = 0; for (int i = 0; i < list.size(); i++) { sum = sum + list.get(i); } System.out.println(sum); }
持續(xù)更新……
微信公眾號(hào):志哥 (ID: zhige-me)
期待與你相遇,一同成長(zhǎng)前行!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/65191.html
摘要:排序算法和集合工具類排序算法和集合工具類。面試官總是問排序算法也不是在難為你,而是在考察你的編程功底。你首先要理解多線程不僅僅是和那么簡(jiǎn)單,整個(gè)并發(fā)包下面的工具都是在為多線程服務(wù)。 去年的這個(gè)時(shí)候樓主通過兩個(gè)月的復(fù)習(xí)拿到了阿里巴巴的 offer,有一些運(yùn)氣,也有一些心得,借著跳槽季來臨特此分享出來。簡(jiǎn)單梳理一下我的復(fù)習(xí)思路,同時(shí)也希望和大家一起交流討論,一起學(xué)習(xí),如果不對(duì)之處歡迎指正一...
摘要:選擇排序算法實(shí)現(xiàn)實(shí)現(xiàn)選擇排序,記錄最小元素的索引,最后才交換位置說明交換兩個(gè)數(shù)組中的元素,在中有更簡(jiǎn)單的寫法,這是的語(yǔ)法糖,其它語(yǔ)言中是沒有的。和語(yǔ)言中比較器的實(shí)現(xiàn)前面我們說到了,我們?yōu)榱送怀雠判蛩惴ǖ乃枷耄瑢⑺械睦觾H限在數(shù)組排序中。 showImg(https://segmentfault.com/img/remote/1460000017909538?w=1949&h=1080...
摘要:在古典加密算法當(dāng)中,加密算法和密鑰都是不能公開的,一旦泄露就有被破解的風(fēng)險(xiǎn),我們可以用詞頻推算等方法獲知明文。年美國(guó)公司研制的算法是人類歷史上第一個(gè)公開加密算法但不公開密鑰的加密方法,后來成為美國(guó)軍方和政府機(jī)構(gòu)的標(biāo)準(zhǔn)加密算法。 還記得上初二的那年夏天,班里來了一個(gè)新同學(xué),他就住在我家對(duì)面的樓里,于是我們一起上學(xué)放學(xué),很快便成了最要好的朋友。我們決定發(fā)明一套神秘的溝通方式,任何人看到都不...
摘要:在古典加密算法當(dāng)中,加密算法和密鑰都是不能公開的,一旦泄露就有被破解的風(fēng)險(xiǎn),我們可以用詞頻推算等方法獲知明文。年美國(guó)公司研制的算法是人類歷史上第一個(gè)公開加密算法但不公開密鑰的加密方法,后來成為美國(guó)軍方和政府機(jī)構(gòu)的標(biāo)準(zhǔn)加密算法。 還記得上初二的那年夏天,班里來了一個(gè)新同學(xué),他就住在我家對(duì)面的樓里,于是我們一起上學(xué)放學(xué),很快便成了最要好的朋友。我們決定發(fā)明一套神秘的溝通方式,任何人看到都不...
閱讀 2133·2023-04-25 14:56
閱讀 2467·2021-11-16 11:44
閱讀 2701·2021-09-22 15:00
閱讀 1907·2019-08-29 16:55
閱讀 2185·2019-08-29 14:04
閱讀 2312·2019-08-29 11:23
閱讀 3685·2019-08-26 10:46
閱讀 1913·2019-08-22 18:43