環形連結串列_相交連結串列_多數元素(java語言)

蜀道,難發表於2023-04-15

環形連結串列

力扣141題

問題:

image-20230415094450256

image-20230412110532236

image-20230412110543854

思路:建立hashset,把連結串列的每個節點放到集合中,在放入的過程中檢查這個節點是否已經存在,存在則證明存在環。

程式碼實現:

public class Solution {
    public boolean hasCycle(ListNode head) {
        Set<ListNode> set = new HashSet<>();
        while (head != null){
            if (set.contains(head))
                return true;
            set.add(head);
            head = head.next;
        }
        return false;
    }
}

相交連結串列

力扣160題

問題:

image-20230412111252665

image-20230412111307718

思路:先把其中一個連結串列的結點都放到一個hashset中,然後檢索hashset,看是否包含這個節點,如果包含,則證明這個節點就是開始相交的節點,輸出答案。

程式碼實現:

public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        Set<ListNode> set = new HashSet<>();
        ListNode temp = headA;//頭指標不方便移動,賦值給temp
        while (temp != null){
            set.add(temp);
            temp = temp.next;
        }
        temp = headB;
        while (temp != null){
            if (set.contains(temp))//如果保護這個節點,則直接返回這個節點。
                return temp;
            temp = temp.next;
        }
        return null;
    }
}

多數元素

力扣169題

問題:

image-20230415093459065

思路:陣列中元素出現的次數很容易讓人想到hashmap,所以把陣列中每個出現的數字以及它們出現的次數放入到hashmap,然後遍歷hashmap,判斷哪個數字出現的次數大於nums.length / 2,是的話就把這個數字輸出。

程式碼實現:

class Solution {
    public int majorityElement(int[] nums) {
        Map<Integer, Integer> map = new HashMap<>();
        //把陣列中的每個數字和對應出現的次數存放到map中
        for(Integer i : nums){
            Integer count = map.get(i);
            count = count == null ? 1 : ++count;
            map.put(i,count);
        }
        //把陣列中
        for(Integer i : map.keySet()){
            Integer count = map.get(i);
            if (count > nums.length / 2)
                return i;
        }
        return 0;
    }
}

相關文章