NC_95_MAX_SEQUENCE_SUBARR NC_96_LINKLIST_PAROLINE NC_97_TOPK_Strings

package org.example.interview.practice;

import java.util.HashSet;
import java.util.Set;

/**
 * @author xianzhe.ma
 * @date 2021/7/24
 */

public class NC_95_MAX_SEQUENCE_SUBARR {

    public int MLS (int[] arr) {
        // write code here
        //先把数组放到集合set中
        Set<Integer> set = new HashSet<>();
        for (int num : arr)
            set.add(num);
        int longest = 0;//记录最长的有序序列
        for (int num : arr) {
            //这里要找有序序列最小的元素(不一定是最长
            //有序序列的)。如果还有更小的,说明当前元素
            //不是最小的,直接跳过
            if (set.contains(num - 1))
                continue;
            //说明当前元素num是当前序列中最小的元素(这里
            //的当前序列不一定是最长的有序序列)
            int currentNum = num;
            //统计当前序列的长度
            int count = 1;
            while (set.contains(currentNum + 1)) {
                currentNum++;
                count++;
            }
            //保存最长的值
            longest = Math.max(longest, count);
        }
        return longest;
    }
}
package org.example.interview.practice;

import java.util.ArrayDeque;
import java.util.Deque;

/**
 * @author xianzhe.ma
 * @date 2021/7/23
 */

public class NC_96_LINKLIST_PAROLINE {

    public boolean isPail (ListNode head) {
        // write code here

        Deque<ListNode> stack = new ArrayDeque<>() ;
        ListNode newHead = head;
        while (newHead != null) {
            stack.push(newHead);
            newHead = newHead.next;
        }
        while (head != null) {
            ListNode node = stack.pop();
            if (node.val != head.val) {
                return false;
            }
            head = head.next;
        }
        return true;
    }

    public static class ListNode {
        int val;
        ListNode next = null;

        public ListNode(int val) {
            this.val = val;
        }
    }


}
package org.example.interview.practice;

import java.util.*;

/**
 * @author xianzhe.ma
 * @date 2021/7/22
 */

public class NC_97_TOPK_Strings {

    public static String[][] topKstrings (String[] strings, int k) {
        // write code here
        Map<String, Integer> map = new HashMap<>();
        for (String str: strings) {
            if (!map.containsKey(str)) {
                map.put(str, 1);
            } else {
                map.put(str, map.get(str) + 1);
            }

        }

        PriorityQueue<Node> queue = new PriorityQueue( new Comparator<Node>() {
            public int compare(Node o1, Node o2) {
                return o1.compareTo(o2);
            }
        });

        Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
        for (Map.Entry<String, Integer> entry : entrySet) {
            String str = entry.getKey();
            Integer count = entry.getValue();
            Node node = new Node(str, count);
            queue.add(node);
        }
        String[][] result = new String[k][2];
        for (int i=0;i<k;i++) {
            Node node = queue.poll();
            String str = node.str;
            String count = node.count.toString();
            String[] arr = new String[2];
            arr[0] = str;
            arr[1] = count;
            result[i] = arr;
        }
        return result;

    }

    public static void main (String[] args) {
        String[] input = {"1","1","2","3"};
        Integer k = 2;
        topKstrings(input, 2);
    }
    private static class Node implements Comparable<Node>{
        public String str;
        public Integer count;

        public Node (String str, Integer count) {
            this.str = str;
            this.count = count;
        }


        @Override
        public int compareTo(Node o) {
            if (this.count > o.count) {
                return -1;
            } else if (this.count < o.count) {
                return 1;
            }
            return this.str.compareTo(o.str);
        }
    }
}

 

posted on 2022-02-11 10:23  MaXianZhe  阅读(29)  评论(0编辑  收藏  举报

导航