From a3b00e66e3386b22aa662f5f25892a5d242442a1 Mon Sep 17 00:00:00 2001 From: fanxb Date: Thu, 27 Jan 2022 16:22:49 +0800 Subject: [PATCH] add --- 5.leetcode/src/com/fanxb/common/Q19.java | 41 +++++++++++++++++++++++ 5.leetcode/src/com/fanxb/common/Q347.java | 32 ++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 5.leetcode/src/com/fanxb/common/Q19.java create mode 100644 5.leetcode/src/com/fanxb/common/Q347.java diff --git a/5.leetcode/src/com/fanxb/common/Q19.java b/5.leetcode/src/com/fanxb/common/Q19.java new file mode 100644 index 0000000..6404fc7 --- /dev/null +++ b/5.leetcode/src/com/fanxb/common/Q19.java @@ -0,0 +1,41 @@ +package com.fanxb.common; + +public class Q19 { + public static class ListNode { + int val; + ListNode next; + + ListNode() { + } + + ListNode(int val) { + this.val = val; + } + + ListNode(int val, ListNode next) { + this.val = val; + this.next = next; + } + } + + public ListNode removeNthFromEnd(ListNode head, int n) { + ListNode p = head, q = head; + //先将p,q的距离差拉到n,这样当q在结尾时,刚好p在倒数第n+1个位置上,删除下一个位置即可 + while ((n--) > 0) { + q = q.next; + } + //考虑特殊情况,当n等于链表长度时,需要删除第一个元素 + if (q == null) { + return p.next; + } + //让q走到结尾 + while (q.next != null) { + q = q.next; + p = p.next; + } + //删除p的下一个节点 + p.next = p.next.next; + return head; + + } +} diff --git a/5.leetcode/src/com/fanxb/common/Q347.java b/5.leetcode/src/com/fanxb/common/Q347.java new file mode 100644 index 0000000..de596e1 --- /dev/null +++ b/5.leetcode/src/com/fanxb/common/Q347.java @@ -0,0 +1,32 @@ +package com.fanxb.common; + +import java.util.*; + +public class Q347 { + public int[] topKFrequent(int[] nums, int k) { + Map countMap = new HashMap<>(); + for (int num : nums) { + int count = countMap.getOrDefault(num, 0) + 1; + countMap.put(num, count); + } + PriorityQueue res = new PriorityQueue<>(Comparator.comparingInt(countMap::get)); + for (int num : countMap.keySet()) { + if (res.size() < k) { + res.add(num); + } else if (countMap.get(res.peek()) < countMap.get(num)) { + res.poll(); + res.add(num); + } + } + int[] realRes = new int[k]; + for (int i = 0; i < k; i++) { + realRes[i] = res.poll(); + } + return realRes; + } + + public static void main(String[] args) { + System.out.println(Arrays.toString(new Q347().topKFrequent(new int[]{1}, 1))); + } + +}