21xrx.com
2025-06-19 12:33:41 Thursday
文章检索 我的文章 写文章
Java必会编程题练习
2023-06-11 01:13:35 深夜i     --     --
Java编程题 算法 数据结构

编程可以提升思维能力,而Java是一门广泛应用的编程语言。通过编写和实现Java编程题,可以更深入地理解Java语言的特性和函数库,同时提高解决问题的能力。在这里,我们将分享一些值得练习的Java编程题,包括基础问题以及一些高级算法和数据结构。

1. 基础编程题目

1.1 求两个数之和

要求:编写一个函数,输入两个整数,返回它们的和。

代码如下:

public int sum(int a, int b) {
  return a + b;
}

1.2 在数组中查找最大和最小值

要求:编写一个函数,输入一个整数数组,返回该数组的最大值和最小值。

代码如下:

public void findMinMax(int[] arr) {
  if (arr == null || arr.length == 0)
    return;
  
  int min = arr[0];
  int max = arr[0];
  for (int i = 1; i < arr.length; i++) {
    if (arr[i] > max) {
      max = arr[i];
    }
    if (arr[i] < min) {
      min = arr[i];
    }
  }
  System.out.println("最大值:" + max + ", 最小值:" + min);
}

2. 高级算法题目

2.1 合并两个有序链表

要求:编写一个函数,输入两个有序链表,返回一个新的有序链表。新链表应该是由两个输入链表的节点组成的,每个节点都应按照从小到大的顺序排序。

代码如下:

public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
  ListNode dummy = new ListNode(0);
  ListNode cur = dummy;
  while (l1 != null && l2 != null) {
    if (l1.val < l2.val)
      cur.next = l1;
      l1 = l1.next;
     else
      cur.next = l2;
      l2 = l2.next;
    
    cur = cur.next;
  }
  cur.next = (l1 != null) ? l1 : l2;
  return dummy.next;
}

2.2 查找无序数组中前K个最大的元素

要求:编写一个函数,输入一个无序的整数数组和一个整数K,返回数组中前K个最大的元素。

代码如下:

public int[] findKthLargest(int[] nums, int k) {
  PriorityQueue
  queue = new PriorityQueue<>(k);
 
  for (int num : nums) {
    if (queue.size() < k) {
      queue.offer(num);
    } else if (num > queue.peek()) {
      queue.poll();
      queue.offer(num);
    }
  }
  int[] res = new int[k];
  int i = 0;
  while (!queue.isEmpty()) {
    res[i++] = queue.poll();
  }
  return res;
}

3. 数据结构编程题目

3.1 二叉树的遍历

要求:编写一个函数,实现二叉树的前序、中序和后序遍历。

代码如下:

public void preOrder(TreeNode root) {
  if (root == null)
    return;
  
  System.out.print(root.val + " ");
  preOrder(root.left);
  preOrder(root.right);
}
public void inOrder(TreeNode root) {
  if (root == null)
    return;
  
  inOrder(root.left);
  System.out.print(root.val + " ");
  inOrder(root.right);
}
public void postOrder(TreeNode root) {
  if (root == null)
    return;
  
  postOrder(root.left);
  postOrder(root.right);
  System.out.print(root.val + " ");
}

3.2 LRU缓存

要求:编写一个LRU缓存,支持get和put操作。

代码如下:

public class LRUCache {
  private int capacity;
  private Map
  map;
 
  private Deque
  deque;
 
  public LRUCache(int capacity) {
    this.capacity = capacity;
    map = new HashMap<>();
    deque = new LinkedList<>();
  }
  public int get(int key) {
    if (map.containsKey(key)) {
      deque.remove(key);
      deque.offerFirst(key);
      return map.get(key);
    }
    return -1;
  }
  public void put(int key, int value) {
    if (map.containsKey(key)) {
      deque.remove(key);
    } else if (map.size() == capacity) {
      int last = deque.pollLast();
      map.remove(last);
    }
    map.put(key, value);
    deque.offerFirst(key);
  }
}

综上,Java编程题目有广泛的应用场景和不同的难度级别,通过练习这些问题,可以提高自己的编程水平和解决问题的能力。需要注意的是,编写代码时要保持逻辑严谨、容错性高,同时需要针对不同的问题选择合适的算法和数据结构来解决。

  
  

评论区