【leetcode】141.(Easy)Linked List Cycle
解題思路:
維護一個map,如果當前節點的下一個節點是已經存在的節點(map中的節點)則連結串列有迴圈提交程式碼:
class Solution {
public boolean hasCycle(ListNode head) {
if(head==null||head.next==null) return false;
Map<ListNode,Boolean> map=new HashMap<>();
ListNode p=head;
while(p!= null) {
if(map.containsKey(p)) return true;
map.put(p, true);
p=p.next;
}
return false;
}
}
執行結果:
相關推薦
【leetcode】141.(Easy)Linked List Cycle
解題思路: 維護一個map,如果當前節點的下一個節點是已經存在的節點(map中的節點)則連結串列有迴圈 提交程式碼: class Solution { public boolean hasCycle(ListNode head) { if(head==n
【LeetCode】#141環形連結串列(Linked List Cycle)
【LeetCode】#141環形連結串列(Linked List Cycle) 題目描述 給定一個連結串列,判斷連結串列中是否有環。 為了表示給定連結串列中的環,我們使用整數 pos 來表示連結串列尾連線到連結串列中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該連結串列
【leetcode】69. (Easy)Sqrt(x)
解題思路: 二分法,同時使用double來記錄數字 此外後面討論區有個答案還挺好的,使用mid>x/mid?來進行判斷,避免了數字型別轉換。 提交程式碼: class Solution { public int mySqrt(int x) { if(x=
【leetcode】67.(Easy)Add Binary
提交程式碼: class Solution { public String addBinary(String a, String b) { int numA,numB,carry=0; int p1=a.length()-1,p2=b.length()-1;
【leetcode】66. (Easy)Plus One
提交程式碼: class Solution { public int[] plusOne(int[] digits) { int i,num; List<Integer> tmp=new ArrayList<Integer>();
【leetcode】58. (Easy)Length of Last Word
提交程式碼: class Solution { public int lengthOfLastWord(String s) { int len=0,p=s.length()-1; while(p>=0&&s.charAt(p)
【leetcode】88.(Easy)Merge Sorted Array
解題思路: 指標從後向前走,時間複雜度為O(m+n) 提交程式碼: class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int p1=m-1,p2=n-
【leetcode】35. (Easy)Search Insert Postion(JAVA)
題目連結 解題思路: 還是折半查詢,設定三個指標分別指向陣列兩邊和中間,如果中間的值是要找的值直接返回位置座標; 如果左指標和右指標重合,說明沒有找到這個數,可以分為3個情況: 目標大於最大數時,此時指標right在陣列最右位置,返回right的下一個位置;
【leetcode】101.(Easy)Symmetric Tree
解題思路: morris遍歷+雙指標 以先序遍歷的方式遍歷根節點的左子樹,以“右子樹根節點左子樹”的方式遍歷右子樹 時間複雜度:O(n) 空間複雜度:O(1) 提交程式碼: class Solution{ public List<String> wordBreak(
【leetcode】100.(Easy)Same Tree
解題思路: 遞迴 提交程式碼: class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { if(p==null&&q!=null) return false;
【leetcode】104.(Easy)Maximum Depth of Binary Tree
解題思路: bfs或dfs 提交程式碼:bfs class Solution { public int maxDepth(TreeNode root) { if(root==null) return 0; int
【leetcode】122.(Easy)Best Time to Buy and Sell Stock II
解題思路: 迭代更新 時間複雜度:O(n) 提交程式碼:滑動視窗 class Solution { public int maxProfit(int[] prices) { if(prices.length==0) return 0;
【leetcode】121.(Easy)Best Time to Buy and Sell Stock
解題思路: 方法一:滑動視窗 時間複雜度:O(n) 方法二:迭代更新 每當有更低價時更新買價, 每當有更高價時更新賣價, 期間更新每一次的買價和賣價的差價 另一方面,為了避免用“今天的低價”購買“昨天的高價”,在有更低價時同時更新買價和賣價(繼而當
【leetcode】119.(Easy)Pascal's Triangle II
解題思路: 維護一個一維list表 時間複雜度:O(n1) n1是到當前排為止所有元素的個數 空間複雜度:O(n2) n2是層數 提交程式碼: class Solution { public List<Integer> getRow(int rowIndex)
【leetcode】118.(Easy)Pascal's Triangle
解題思路: 遞迴 時間複雜度:O(n) n是最終所有元素的個數和 提交程式碼: class Solution { public List<List<Integer>> generate(int numRows) { List<L
【Leetcode】86.(Medium)Partition List
解題思路: 這道題我將list轉化為了ArrayList來做 基本思路是先將連結串列轉化為ArrayList,然後找到第一個大於等於x的數字,並記下位置flag。然後從後向前,如果是小於x的數就插入到flag的位置。比較耗時的地方是每次將數字插入到flag的位置時,ArrayList會將所有
【leetcode】92.(Medium)Reverse Linked List II
解題思路: 這道題的意思是,有一串連結串列,將第m位到第n位翻轉過來,比如對於連結串列1-2-3-4-5,翻轉第2到第4位後就是1-4-3-2-5 題目要求只遍歷一遍連結串列 我的想法是將翻轉的部分用棧存起來,然後重新新建結點 general的做法是直接修改原連結串列的結點指向關係,比如
【leetcode】50.(Medium )Pow(x,n)
題目連結 解題思路: 這道題的意思就是求x的n次方。 如果xx求下去,求n-1次,這樣是超時的。 我的思路是,首先求xx,然後n就可以減少2,然後求(xx)(x*x),這樣n就可以減少4… 就是n不是-1、-1、-1…這樣減下去,而是-2、-4、-8…這樣減下去 迭代cnt次後,
【leetcode】48.(Medium)Rotate Image
題目連結 解題思路: 首先如果二維陣列是11或者22,直接蠻力計算; 如果是22以上,可以一圈一圈(rotate circle)地計算反轉90度之後的結果。 比如,對於下面55的陣列: 首先設定一個數組tmp將框1中的數字儲存起來, 然後計算翻轉後框1(top layer)中的
【leetcode】47.(Medium)PermutationsII
題目連結 解題思路: 參考 首先進行排序; 如果陣列中沒有重複的數字,就按照permutations的方法來做就可以了; 如果陣列中有2個重複的數字,比如[1,1,3],首先將陣列分為[1]和[1,3], 對[1,3]進行全排列有[1,3]和[3,1],在所有子全排列中