1.環形鏈表java
給定一個鏈表,判斷鏈表中是否有環。spa
爲了表示給定鏈表中的環,咱們使用整數 pos
來表示鏈表尾鏈接到鏈表中的位置(索引從 0 開始)。 若是 pos
是 -1
,則在該鏈表中沒有環。設計
示例 1: 輸入:head = [3,2,0,-4], pos = 1 輸出:true 解釋:鏈表中有一個環,其尾部鏈接到第二個節點。
示例 2: 輸入:head = [1,2], pos = 0 輸出:true 解釋:鏈表中有一個環,其尾部鏈接到第一個節點。
示例 3: 輸入:head = [1], pos = -1 輸出:false 解釋:鏈表中沒有環。
使用快慢指針,若指針相遇則判斷有環指針
javacode
/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public boolean hasCycle(ListNode head) { if(head==null||head.next==null) return false; ListNode fast = head.next,slow = head; while(fast!=slow){ if(fast==null||fast.next==null) return false; fast = fast.next.next; slow = slow.next; } return true; } }
2.最小棧blog
設計一個支持 push,pop,top 操做,並能在常數時間內檢索到最小元素的棧。索引
push(x) -- 將元素 x 推入棧中。
pop() -- 刪除棧頂的元素。
top() -- 獲取棧頂元素。
getMin() -- 檢索棧中的最小元素。get
每次入棧2個元素,一個是入棧的元素自己,一個是當前棧元素的最小值it
javaio
class MinStack { private int min = Integer.MAX_VALUE; private Stack<Integer> stack; public MinStack() { stack = new Stack<>(); } public void push(int x) { if(min>=x){ stack.push(min); min = x; } stack.push(x); } public void pop() { if(stack.pop()==min){ min = stack.pop(); } } public int top() { return stack.peek(); } public int getMin() { return min; } }