100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > java笔试手写算法面试题大全含答案

java笔试手写算法面试题大全含答案

时间:2020-08-10 18:11:28

相关推荐

java笔试手写算法面试题大全含答案

Java|Java面试题

java

Java-Java面试题

vix源码,vscode如何回退代码版本,ubuntu启动较慢,tomcat发布文件包,雪球 爬虫 python,php 引用上级,东莞站外seo优化排名,移动社区网站源码,带播放列表的视频网站模板lzw

1.统计一篇英文文章单词个数。

pigcms加盟 源码,vscode仿真与调试分开,ubuntu 无法试用,tomcat+host攻击,exe程序爬虫,php获得js的值,郑州seo推广有用吗,新闻网站的设计与实现源码,siteserver cms 模板修改lzw

public class WordCounting { public static void main(String[] args) { try(FileReader fr = new FileReader("a.txt")) { int counter = 0; boolean state = false; int currentChar; while((currentChar= fr.read()) != -1) {if(currentChar== || currentChar == \ || currentChar == \ || currentChar == \ ) { state = false;}else if(!state) { state = true; counter++;} } System.out.println(counter); } catch(Exception e) { e.printStackTrace(); } }}

补充:这个程序可能有很多种写法,这里选择的是Dennis M. Ritchie和Brian W. Kernighan老师在他们不朽的著作《The C Programming Language》中给出的代码,向两位老师致敬。下面的代码也是如此。

体育5 源码,ubuntu阻止远程连接,爬虫下载bilibil视频,php中声明数组的两种方式,温州平阳SEOlzw

2.输入年月日,计算该日期是这一年的第几天。

public class DayCounting { public static void main(String[] args) { int[][] data = {{31,28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},{31,29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} }; Scanner sc = new Scanner(System.in); System.out.print("请输入年月日(1980 11 28): "); int year = sc.nextInt(); int month = sc.nextInt(); int date = sc.nextInt(); int[] daysOfMonth = data[(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)?1 : 0]; int sum = 0; for(int i = 0; i < month -1; i++) { sum += daysOfMonth[i]; } sum += date; System.out.println(sum); sc.close(); }}

3.回文素数:所谓回文数就是顺着读和倒着读一样的数(例如:11,121,1991…),回文素数就是既是回文数又是素数(只能被1和自身整除的数)的数。编程找出11~9999之间的回文素数。

public class PalindromicPrimeNumber { public static void main(String[] args) { for(int i = 11; i <= 9999; i++) { if(isPrime(i) && isPalindromic(i)) {System.out.println(i); } } } public static boolean isPrime(int n) { for(int i = 2; i 0) { sum= sum * 10 + temp % 10; temp/= 10; } return sum == n; }}

4.全排列:给出五个数字12345的所有排列。

public class FullPermutation { public static void perm(int[] list) { perm(list,0); } private static void perm(int[] list, int k) { if (k == list.length) { for (int i = 0; i < list.length; i++) {System.out.print(list[i]); } System.out.println(); }else{ for (int i = k; i < list.length; i++) {swap(list, k, i);perm(list, k + 1);swap(list, k, i); } } } private static void swap(int[] list, int pos1, int pos2) { int temp = list[pos1]; list[pos1] = list[pos2]; list[pos2] = temp; } public static void main(String[] args) { int[] x = {1, 2, 3, 4, 5}; perm(x); }}

5.对于一个有N个整数元素的一维数组,找出它的子数组(数组中下标连续的元素组成的数组)之和的最大值。

下面给出几个例子(最大子数组用粗体表示):

数组:{ 1, -2, 3,5, -3, 2 },结果是:8

2) 数组:{ 0, -2, 3, 5, -1, 2 },结果是:9

3) 数组:{ -9, -2,-3, -5, -3 },结果是:-2

可以使用动态规划的思想求解:

public class MaxSum { private static int max(int x, int y) { return x > y? x: y; } public static int maxSum(int[] array) { int n = array.length; int[] start = new int[n]; int[] all = new int[n]; all[n - 1] = start[n - 1] = array[n - 1]; for(int i = n - 2; i >= 0;i--) { start[i] = max(array[i], array[i] + start[i + 1]); all[i] = max(start[i], all[i + 1]); } return all[0]; } public static void main(String[] args) { int[] x1 = { 1, -2, 3, 5,-3, 2 }; int[] x2 = { 0, -2, 3, 5,-1, 2 }; int[] x3 = { -9, -2, -3,-5, -3 }; System.out.println(maxSum(x1)); // 8 System.out.println(maxSum(x2)); // 9 System.out.println(maxSum(x3)); //-2 }}

6.用递归实现字符串倒转

public class StringReverse { public static String reverse(String originStr) { if(originStr == null || originStr.length()== 1) { return originStr; } return reverse(originStr.substring(1))+ originStr.charAt(0); } public static void main(String[] args) { System.out.println(reverse("hello")); }}

7.输入一个正整数,将其分解为素数的乘积。

public class DecomposeInteger { private static List list = new ArrayList(); public static void main(String[] args) { System.out.print("请输入一个数: "); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); decomposeNumber(n); System.out.print(n + " = "); for(int i = 0; i < list.size() - 1; i++) { System.out.print(list.get(i) + " * "); } System.out.println(list.get(list.size() - 1)); } public static void decomposeNumber(int n) { if(isPrime(n)) { list.add(n); list.add(1); } else { doIt(n, (int)Math.sqrt(n)); } } public static void doIt(int n, int div) { if(isPrime(div) && n % div == 0) { list.add(div); decomposeNumber(n / div); } else { doIt(n, div - 1); } } public static boolean isPrime(int n) { for(int i = 2; i <= Math.sqrt(n);i++) { if(n % i == 0) {return false; } } return true; }}

8、一个有n级的台阶,一次可以走1级、2级或3级,问走完n级台阶有多少种走法。

public class GoSteps { public static int countWays(int n) { if(n < 0) { return 0; } else if(n == 0) { return 1; } else { return countWays(n - 1) + countWays(n - 2) + countWays(n -3); } } public static void main(String[] args) { System.out.println(countWays(5)); // 13 }}

9.写一个算法判断一个英文单词的所有字母是否全都不同(不区分大小写)

public class AllNotTheSame { public static boolean judge(String str) { String temp = str.toLowerCase(); int[] letterCounter = new int[26]; for(int i = 0; i 1) {return false; } } return true; } public static void main(String[] args) { System.out.println(judge("hello")); System.out.print(judge("smile")); }}

10.有一个已经排好序的整数数组,其中存在重复元素,请将重复元素删除掉,例如,A= [1, 1, 2, 2, 3],处理之后的数组应当为A= [1, 2, 3]。

public class RemoveDuplication { public static int[] removeDuplicates(int a[]) { if(a.length <= 1) { return a; } int index = 0; for(int i = 1; i < a.length; i++) { if(a[index] != a[i]) {a[++index] = a[i]; } } int[] b = new int[index + 1]; System.arraycopy(a, 0, b, 0, b.length); return b; } public static void main(String[] args) { int[] a = {1, 1, 2, 2, 3}; a = removeDuplicates(a); System.out.println(Arrays.toString(a)); }}

11.给一个数组,其中有一个重复元素占半数以上,找出这个元素。

public class FindMost { public static T find(T[] x){ T temp = null; for(int i = 0, nTimes = 0; i< x.length;i++) { if(nTimes == 0) {temp= x[i];nTimes= 1; } else {if(x[i].equals(temp)) { nTimes++;}else { nTimes--;} } } return temp; } public static void main(String[] args) { String[]strs = {"hello","kiss","hello","hello","maybe"}; System.out.println(find(strs)); }}

12.编写一个方法求一个字符串的字节长度?

public int getWordCount(String s){ int length = 0; for(int i = 0; i= 0 && ascii <=255) length++; else length += 2; } return length;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。