21xrx.com
2024-12-22 19:39:14 Sunday
登录
文章检索 我的文章 写文章
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编程题目有广泛的应用场景和不同的难度级别,通过练习这些问题,可以提高自己的编程水平和解决问题的能力。需要注意的是,编写代码时要保持逻辑严谨、容错性高,同时需要针对不同的问题选择合适的算法和数据结构来解决。

  
  

评论区

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