广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >java笔试手写算法面试题大全含答案
  • 273
分享到

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

java面试题java 2017-08-02 07:08:58 273人浏览 才女
摘要

1.统计一篇英文文章单词个数。public class WordCounting { public static void main(String[] args) { try(FileReader fr = new

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

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》中给出的代码,向两位老师致敬。下面的代码也是如此。

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 <= Math.sqrt(n); i++) {
            if(n % i == 0) {
                return false;
            }
        }
        return true;
    }
    public static boolean isPalindromic(int n) {
        int temp = n;
        int sum = 0;
        while(temp > 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 < s.length(); i++)
    {
        int ascii = Character.codePointAt(s, i);
        if(ascii >= 0 && ascii <=255)
            length++;
        else
            length += 2;
    }
    return length;
}

--结束END--

本文标题: java笔试手写算法面试题大全含答案

本文链接: https://www.lsjlt.com/news/3713.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java笔试手写算法面试题大全含答案
    1.统计一篇英文文章单词个数。public class WordCounting { public static void main(String[] args) { try(FileReader fr = new ...
    99+
    2017-08-02
    java面试题 java
  • java智慧流面试笔试题大全含答案
    1 下列关于栈的描述错误的是(B)A. 栈是先进后出的线性表 (推荐学习:java程序员面试题)B. 栈只能顺序存储C. 栈具有记忆功能D.对栈的插入和删除操作中,不需要改变栈底指针2 对于长度为 n 的线性表,在最坏的情况下...
    99+
    2020-01-27
    java面试题 java
  • java经典笔试题大全(50道含答案)
    java经典笔试题大全(50道含答案) 整理了一套常用的Java笔试题,选择题50道,简答题5道,试试你能做对多少题吧,含答案。 选择题(共50题,每题1.5分,共75分。多选题选不全或选错都不得分。) 以下属于面向对象的特征的是...
    99+
    2023-08-17
    java jvm 开发语言
  • java多线程面试题选择题大全含答案
    1.下面程序的运行结果()(选择一项)public static void main(String[] args) { Thread t=new Thread(){ public void run(){ ...
    99+
    2015-06-10
    java面试题 java
  • java笔试题大全带答案(经典11题)
    1.不通过构造函数也能创建对象吗()A. 是 (推荐学习:java面试题大汇总)B. 否分析:答案:AJava创建对象的几种方式(重要):(1) 用new语句创建对象,这是最常见的创建对象的方法。(2) ...
    99+
    2021-08-21
    java面试题 java
  • Java高级面试问题大全及答案大全
    随着互联网行业的飞速发展,Java程序员的需求也在不断攀升。 为了帮助大家更好地准备面试,本文将详细介绍一些Java高级面试题及答案。 希望对大家在面试过程中有所帮助。 面试资源下载地址:https://pan.quark.cn/s/c80...
    99+
    2023-08-21
    java 面试 jvm
  • Java后端真实面试题大全(有详细答案)--高频/真题
    原文网址:Java后端真实面试题大全(有详细答案)--高频/真题_IT利刃出鞘的博客-CSDN博客 简介 说明 本文分享Java后端面试题,这套题真实、高频、全面、有详细答案、保你稳过面试,让你成为offer收割机。 本套题是我原创,历时两...
    99+
    2023-09-01
    java 后端 真实 面试题
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作