21xrx.com
2024-12-23 03:49:29 Monday
登录
文章检索 我的文章 写文章
Java面试编程题: 从简单到复杂的练习题例子
2023-06-11 01:55:34 深夜i     --     --
Java

面试编程题, 逻辑

在Java面试中,编程题是必不可少的一部分。做好编程题不仅可以检验你的编程能力,还可以考验你的逻辑思考能力。因此,在准备Java面试时,练习编程题是很必要的。本文将从简单到复杂,给出三个不同难度级别的Java编程题练习例子。

1. 简单难度: 找出一个整数数组中的最大数和最小数

这个题目是一个最基础的编程题,要求找出一个整数数组中的最大数和最小数。我们可以用一个循环遍历整个数组,使用if语句比较大小,得出最大数和最小数。代码如下:


public static void findMaxAndMin(int[] nums) {

  int max = nums[0];

  int min = nums[0];

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

    if (nums[i] > max) {

      max = nums[i];

    }

    if (nums[i] < min) {

      min = nums[i];

    }

  }

  System.out.println("最大数为: " + max);

  System.out.println("最小数为: " + min);

}

2. 中等难度: 矩阵旋转

这是一道比较典型的数组操作题目,题目要求将一个n*n的矩阵顺时针旋转90度。我们可以定义四个变量l、r、t、b,分别表示矩阵的左、右、上、下边界。然后依次旋转每一圈的数,完成整个旋转操作。具体实现代码如下:


public static void rotateMatrix(int[][] matrix) {

  int n = matrix.length;

  for (int i = 0; i < n / 2; i++) {

    int l = i, r = n - 1 - i, t = i, b = n - 1 - i;

    for (int j = 0; j < r - l; j++) {

      int tmp = matrix[t][l + j];

      matrix[t][l + j] = matrix[b - j][l];

      matrix[b - j][l] = matrix[b][r - j];

      matrix[b][r - j] = matrix[t + j][r];

      matrix[t + j][r] = tmp;

    }

  }

}

3. 高级难度: 实现双向链表

这个题目是面向对象设计和数据结构的一个比较高级的练习题。题目要求我们实现一个双向链表,并完成增删改查等操作。我们首先需要定义一个Node类表示节点,该类包含一个data字段表示存储的数据,以及pre、next两个字段分别表示该节点的前驱和后继。然后我们实现一个LinkedList类,该类含有head、tail两个字段分别表示链表的头和尾节点,同时,我们还需要实现一些方法,如add、remove、get、set等。具体代码实现如下:


public class Node {

  int data;

  Node pre;

  Node next;

  public Node(int data)

    this.data = data;

  

}

public class LinkedList {

  Node head;

  Node tail;

  int size;

  public void add(int data) {

    Node newNode = new Node(data);

    if (head == null)

      head = tail = newNode;

     else

      tail.next = newNode;

      newNode.pre = tail;

      tail = newNode;

    

    size++;

  }

  public void remove(int index) {

    if (index < 0 || index >= size) {

      throw new ArrayIndexOutOfBoundsException();

    }

    Node nodeToRemove = getNode(index);

    if (nodeToRemove == head)

      head = head.next;

      head.pre = null;

     else if (nodeToRemove == tail)

      tail = tail.pre;

      tail.next = null;

     else

      nodeToRemove.pre.next = nodeToRemove.next;

      nodeToRemove.next.pre = nodeToRemove.pre;

    

    size--;

  }

  public int get(int index) {

    if (index < 0 || index >= size) {

      throw new ArrayIndexOutOfBoundsException();

    }

    return getNode(index).data;

  }

  public void set(int index, int data) {

    if (index < 0 || index >= size) {

      throw new ArrayIndexOutOfBoundsException();

    }

    Node nodeToSet = getNode(index);

    nodeToSet.data = data;

  }

  private Node getNode(int index) {

    Node current = head;

    for (int i = 0; i < index; i++)

      current = current.next;

    

    return current;

  }

}

综上所述,面试编程题在Java面试中是非常重要的,而且从简单到复杂地练习编程题有助于我们更好的理解Java的逻辑。希望大家可以通过这篇文章加强自己的编程实战能力。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复