Java面试题系列--经典算法题(持续更新)
来源:互联网 发布:英雄无敌 mac版本 编辑:程序博客网 时间:2024/06/03 14:40
1.统计字符串中,字符出现的次数
package pers.yijin.demo;import java.util.HashMap;import java.util.Map;/** * 统计字符串中,字符出现的次数 * * @author Administrator * */public class CountWords { /** * 利用map的键不能重复的特性来实现 * * @param str */ public static void count(String str) { Map<Character, Integer> map = new HashMap<Character, Integer>(); for (int i = 0; i < str.length(); i++) { char key = str.charAt(i); if (!map.containsKey(key)) { map.put(key, 1); } else { int value = map.get(key); map.put(key, value + 1); } } for (Map.Entry<Character, Integer> m : map.entrySet()) { System.out.println(m.getKey() + "的次数为:" + m.getValue()); } } public static void main(String[] args) { CountWords.count("askadklfjalkjflfaflkdnmcnvkjfklasdj"); }}
2.递归调用系列(不完整。。。)
package pers.yijin.demo;import java.math.BigInteger;/** * 递归调用 * * @author Administrator * */public class Fibonacci { /** * 斐波那契数列:求1,1,2,3,5,8,13....的第100位的值 * * @param n * @return */ public static int fibonacci(int n) { if (n <= 2) { return 1; } else { return fibonacci(n - 1) + fibonacci(n - 2); } } /** * 求N的阶乘 * * @param n * @return */ public static int factorial(int n) { if (n <= 1) { return 1; } return n * factorial(n - 1); } /** * 求最大公约数 * * @param p * @param q * @return */ public static int gcb(int p, int q) { if (q == 0) { return p; } int r = p % q; return gcb(q, r); } public static void main(String[] args) { System.out.println(BigInteger.valueOf(fibonacci(10))); System.out.println(factorial(10)); System.out.println(gcb(5, 10)); }}
3.荷兰国旗问题
package pers.yijin.demo;import java.util.Arrays;/** * 荷兰国旗问题 * 将0、1、2三个数排列,0在左边,1在中间,2在右边 * * @author Administrator * */public class FlagOfNetherland { public static void sort(int[] arr, int low, int high) { int begin = low;//开始索引 int end = high;//结尾索引 int current = low;//遍历索引 while (current <= end) { if (arr[current] < 1) { //当前值==0则与开始索引交换,遍历索引和开始索引+1,则开始索引左边的数据就固定好了(除了开始时,begin永远指向1) swap(arr, begin, current); begin++; current++; } else if (arr[current] > 1) { swap(arr, current, end); end--; } else { current++; } } } // 交换算法 private static void swap(int[] arr, int current, int next) { int temp = arr[current]; arr[current] = arr[next]; arr[next] = temp; } public static void main(String[] args) { int[] arr = { 0, 1, 2, 1, 2, 0, 2, 1, 0, 2, 0, 1, 2, 1, 2, 0, 2, 1, 0, 2, 0, 1, 2, 1, 2, 0, 2, 1, 0, 2, 0, 1, 2, 1, 2, 0, 2, 1, 0, 2, 0, 1, 2, 1, 2, 0, 2, 1, 0, 2 }; sort(arr, 0, arr.length - 1); System.out.println(Arrays.toString(arr)); }}
4.判断一个数是否为素数
package pers.yijin.demo;/** * 判断一个数是否为素数 * @author Administrator * */public class IsPrime { /** * Math.sqrt()求一个数的非负平方根 * 以平方为界 * @param num * @return */ public static boolean isPrime(int num) { // 素数最小为2 if (num < 2) { return false; } for (int i = 2; i <= Math.sqrt(num); i++) { if (num % i == 0) { return false; } } return true; } public static void main(String[] args) { for (int i = 101; i < 201; i++) { if(isPrime(i)){ System.out.println(i); } } }}
5.约瑟环问题
package pers.yijin.demo;/** * 约瑟环问题 实现30个人轮流报数,9出局,循环,剩下15个人。 * * @author Administrator * */public class JosephRing { public static void main(String[] args) { // 创建一个约瑟环 boolean[] people = new boolean[30]; for (int i = 0; i < people.length; i++) { people[i] = true; } //用于循环的人数 int personSum = people.length; //计数的个数 int countNum = 0; //索引数 int index = 0; while (personSum > 15) { //如果当前index已经出局,则让下一个出局 if(people[index]){ countNum++; //如果数到9,则9出局 if (countNum == 9) { countNum = 0; people[index] = false;//index=8时people[index]是第九个人 personSum--; } } index++; //循环结束,重新开始 if (index == people.length) { index = 0; } } for (int i = 0; i < people.length; i++) { System.out.println("第" + i + "个的状态是:" + people[i]); } }}
6.给定一串数字,把它以中文的形式输出
package pers.yijin.demo;/** * 给定一串数字,把它以中文的形式输出 * @author Administrator * */public class NumberParseString { public static void convert(int number) { //数字对应的汉字 String[] num = {"零","一","二","三","四","五","六","七","八","九"}; //单位 String[] unit = {"","十","百","千","万","十万","百万","千万","亿","十","百","千","万亿"}; //将输入数字转换为字符串 String strNum = String.valueOf(number); //判断0出现了几次 boolean zeroFlag = true; //结果 字符串 String str = ""; int length = strNum.length(); for (int i = 0; i < length; i++) { //两个字符做运算,自动转换为数字 int c = strNum.charAt(i)-'0'; if(c != 0) { str += num[c]+unit[length-i-1]; zeroFlag = true; } if(c==0 && zeroFlag && i!=length-1){ str += num[c]; zeroFlag = false; } } System.out.println(str); } public static void main(String[] args) { convert(120); }}
7.不使用parseInt把字符串转换为数字
package pers.yijin.demo;/** * 不使用parseInt把字符串转换为数字 * * @author Administrator * */public class ParseInt { /** * 利用两个char型运算自动转换为int的特性 * * @param str * @return */ public static int parseInt(String str) { int res = 0; for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if ((c >= '0') && (c <= '9')) { res = res * 10 + (c - '0'); } } return res; } public static void main(String[] args) { System.out.println(parseInt("123456789")); }}
8.数字反转
package pers.yijin.demo;/** * 数字反转 * * @author Administrator * */public class Reverse { public static int reverse(int num) { StringBuilder builder = new StringBuilder(); String str = builder.append(num).reverse().toString(); return Integer.parseInt(str); } public static void main(String[] args) { System.out.println(reverse(852147963)); }}
9.水仙花数问题
package pers.yijin.demo;/** * 求100~999之间的水仙花数 * 水仙花数:例如153是1的3次方+5的3次方+3的3次方的和。 * @author Administrator * */public class Shuixianhuashu { /** * 分解出个位,十位,和百位 * @param num * @return */ public static boolean isShuiXianHuaShu(int num) { int i = num / 100; int j = (num % 100) / 10; int k = num % 10; if (num == i * i * i + j * j * j + k * k * k) { return true; } return false; } public static void main(String[] args) { for (int i = 100; i < 1000; i++) { if(isShuiXianHuaShu(i)){ System.out.println(i); } } }}
1 0
- Java面试题系列--经典算法题(持续更新)
- java面试题持续更新
- Java面试题(持续更新)
- 【面试】经典面试题,你会做几道(持续更新)
- C/C++经典面试题(持续更新)
- U3d经典必考面试题#持续更新##欢迎讨论交流#
- 笔试题面试题(持续更新)
- iOS面试题-持续更新
- PHP面试题(持续更新)
- Android 面试题,持续更新!
- 面试题整理-持续更新
- JavaSE 面试题(持续更新)
- 最全的Java面试题,持续更新中
- java面试笔试题汇总一(持续更新中)
- JAVA WEB开发人员面试题与经验总结【持续更新】
- 黑马程序员-java就业面试题大全(持续更新)
- Java面试题总结1(持续更新)
- Java面试题总结2(持续更新)
- 指针的妙用
- JAVA中控制线程的方法
- 学习NET-SNMP之二-----------VisualStudio编译Net-SNMP
- LeetCode Algorithms 279. Perfect Squares 题解
- C++第二次实验-循环程序设计-项目9(百钱买百鸡问题)
- Java面试题系列--经典算法题(持续更新)
- 2.5MATLAB常用的运算函数
- python编程中的if __name__ == 'main': 的作用和原理
- 7. Reverse Integer
- The Linux Command Line---读书笔记
- 7 列车调度
- 给指定的用户无需密码执行 sudo 的权限
- GDKOI2016游记
- 如何解决在上层按键操作alsa code后无法调节驱动音量的原因