做者: 負雪明燭
id: fuxuemingzhugit
把本身刷過的全部題目作一個整理,而且用簡潔的語言歸納了一下思路,彙總成了一個表格。算法
題目的排列順序是按照先Easy再Medium再Hard排列的,暫時尚未把題目所有整理完成。後序我會把刷過的全部的題目都整理到這個文檔裏。api
題目 | 難度 | 解法 | |
---|---|---|---|
566. Reshape the Matrix | Easy | 變長數組,求餘法,維護行列計算在新的數組中的位置 | |
567. Increasing Order Search Tree | Easy | 直接中序遍歷的結果放到鏈表結尾 | |
568. Jewels and Stones | Easy | 字典統計次數 | |
569. Unique Email Addresses | Easy | 字符串+set統計個數 | |
570. To Lower Case | Easy | ASIIC碼操做ord,chr | |
571. Unique Morse Code Words | Easy | 字典映射 + set統計個數 | |
572. Sort Array By Parity | Easy | 自定義sorted函數的cmp爲數字mod 2 | |
573. Hamming Distance | Easy | 先異或 再數1的個數 | |
574. Robot Return to Origin | Easy | Counter統計,判斷是否相等 | |
575. Flipping an Image | Easy | 直接計算新的數組的每一個位置的值便可 | |
576. Merge Two Binary Trees | Easy | 樹的遞歸操做 | |
577. Implement strStr() | Easy | 字符串遍歷+切片是否相等的判斷 | |
578. Find and Replace Pattern | Easy | 直接使用字典作映射 | |
579. Binary Tree Pruning | Medium | 二叉樹的後序遍歷 | |
580. Array Partition I | Easy | 排序+求和 | |
581. Self Dividing Numbers | Easy | 直接遍歷區間的每一個數字進行判斷 | |
582. Peak Index in a Mountain Array | Easy | 二分查找的變種,使用Mid位置和左右位置比較 | |
583. Sort Array By Parity II | Easy | 分別求出奇偶數組而後拼接 | |
584. Projection Area of 3D Shapes | Easy | 分別計算三視圖的面積便可 | |
585. Smallest Range I | Easy | 直接數學計算 | |
586. Transpose Matrix | Easy | 先構建數組再遍歷實現翻轉 | |
587. N-ary Tree Preorder Traversal | Easy | 多叉樹的先序遍歷,能夠用遞歸和迭代 | |
588. N-ary Tree Postorder Traversal | Easy | 多叉樹的後序遍歷 | |
589. Intersection of Two Arrays II | Easy | 先排序而後用兩個指針移動找出數組交集 | |
590. Middle of the Linked List | Easy | 快慢指針同時向鏈表後面移動 | |
591. Search in a Binary Search Tree | Easy | BST中節點的查找,遞歸 | |
592. Number of Recent Calls | Easy | 找出知足必定條件的區間長度,可使用二分或者隊列 | |
593. Maximum Depth of N-ary Tree | Easy | 求樹的高度,可使用BFS和DFS | |
594. Reverse Words in a String III | Easy | 字符串的單詞分別翻轉再拼接到一塊兒就行了 | |
595. Number of Lines To Write String | Easy | 使用字典保存每一個字符的長度,而後統計每行的長度是否超過100就行了 | |
596. Reverse String | Easy | 字符串翻轉,[::-1 | |
597. Subdomain Visit Count | Easy | 字典保存每一個子域名出現的次數便可 | |
598. Number Complement | Easy | 求數字的補數,方法是異或上與其二進制數字的長度相等的全1二進制數 | |
599. Shortest Distance to a Character | Easy | 過兩遍數組,分別找出距離左邊和右邊的這個字符的最短距離 | |
600. Keyboard Row | Easy | 使用字典保存每行元素,而後看每一個單詞是否是隻由一行元素組成 | |
601. Groups of Special-Equivalent Strings | Easy | 把奇偶位置都取出來,從新拼接成字符串做爲指紋,看總的有多少種指紋 | |
602. Leaf-Similar Trees | Easy | 先序、中序、後序都能獲得葉子序列 | |
603. Uncommon Words from Two Sentences | Easy | 使用字典統計每一個單詞出現的次數,而後看字典keys()的交集,而後在字典中看是否是隻出現了一次 | |
604. Toeplitz Matrix | Easy | 判斷每一個斜線是否相等,方法是判斷每一個元素是否和其左上角元素相等 | |
605. Island Perimeter | Easy | 求小島的周長。使用全部陸地個數×4-相交部分×2. | |
606. Baseball Game | Easy | 用一個棧進行模擬 | |
607. Binary Gap | Easy | 二進制表示中1的最大間距,保留上一個1的位置便可 | |
608. Maximum Depth of Binary Tree | Easy | 二叉樹的高度,能夠用DFS和BFS | |
609. Single Number | Easy | 全部的數字出現了兩次,其中一個只出現了一次。找出這個數字的方法可使用字典統計或者異或運算 | |
610. Next Greater Element I | Easy | 找出某個數字右邊比他大的數字,直接遍歷查找就行了 | |
611. Average of Levels in Binary Tree | Easy | 求每層的二叉樹的均值,可使用BFS和DFS | |
612. Binary Number with Alternating Bits | Easy | 判斷數字的二進制表示是否是01交錯的。直接遍歷判斷,或者位運算。 | |
613. Prime Number of Set Bits in Binary Representation | Easy | 判斷二進制數字的1的個數是否是質數 | |
614. Reverse Only Letters | Easy | 只翻轉字母其他字符不動,可使用棧、雙指針 | |
615. Nim Game | Easy | 判斷輸入數字是否是4的倍數便可 | |
616. Goat Latin | Easy | 字符串處理,簡單 | |
617. Surface Area of 3D Shapes | Easy | 統計立方體個數,減去相交面積 | |
618. Letter Case Permutation | Easy | 經典回溯法,把字符的大小寫分別拼接到字符串尾部 | |
619. Add Digits | Easy | 兩重循環,一直對每位數字求和直到剩餘個位數 | |
620. Move Zeroes | Easy | 使用一個指針指向第一個爲0的位置,而後遍歷不是0的位置進行交換 | |
621. Shortest Completing Word | Easy | 找出符合某個模式的字符串,直接處理就行了 | |
622. Employee Importance | Easy | dfs | |
623. Find the Difference | Easy | 找多出來的字符,可使用字典,也可使用異或 | |
624. Detect Capital | Easy | 統計大寫字符的個數,判斷是否是在首位 | |
625. Find All Numbers Disappeared in an Array | Easy | 用set去重,找出沒有出現的數字便可 | |
626. Count Binary Substrings | Easy | 先找出連續的0,1個數,而後進行交錯求最小值,在求和 | |
627. 4Sum II | Easy | 4sum,先肯定兩個數字,而後看剩餘兩個數字的和是否出現過 | |
628. Rotated Digits | Easy | 字典保存翻轉後的數字,判斷是否相等便可。 | |
629. Two Sum IV - Input is a BST | Easy | BFS或者DFS,在遍歷的過程當中進行破案噸 | |
630. Sum of Two Integers | Easy | 位運算 | |
631. Intersection of Two Arrays | Easy | 用兩個set求交集,而後轉成List便可 | |
632. Construct String from Binary Tree | Easy | 先序遍歷,能夠省略右子樹,因此須要作一個節點是否存在的判斷 | |
633. Reverse Linked List | Easy | 翻轉單鏈表,可使用遞歸和迭代 | |
634. Majority Element | Easy | Moore投票法,或者字典統計次數 | |
635. Excel Sheet Column Number | Easy | 26進制,沒有難度 | |
636. Roman to Integer | Easy | 使用字典保存映射,遍歷求值就行了。 | |
637. Reorder Log Files | Easy | 分割排序,再拼接 | |
638. Best Time to Buy and Sell Stock | Easy | 一次遍歷,若是後一天比前一天大就買了賣 | |
639. Valid Anagram | Easy | 判斷字符串是不是同構的,直接統計詞頻或者排序 | |
640. Lemonade Change | Easy | 貪心算法,找零錢先找大的面額,若是不夠再用小的面額 | |
641. Contains Duplicate | Easy | 判斷數組是否有重複,能夠統計詞頻,判斷set長度是否相等,排序等方法 | |
642. Construct Quad Tree | Easy | 創建四叉樹,使用遞歸,判斷4個葉子所有是0或者1 | |
643. Design HashMap | Easy | 設計一個字典,直接開個很大的數組便可,內存放得下 | |
644. Convert BST to Greater Tree | Easy | 把每一個節點變成比它大的節點的值的和,採用逆中序遍歷。 | |
645. Same Tree | Easy | 判斷兩棵數是否相等,直接遞歸 | |
646. Minimum Absolute Difference in BST | Easy | 中序遍歷,保存前一個節點,當前節點的值減去前一個節點的值 | |
647. Minimum Distance Between BST Nodes | Easy | 和上題徹底同樣 | |
648. Ransom Note | Easy | 使用字典統計每一個字符出現的次數,前者小於後者便可 | |
649. Rotate String | Easy | 字符串切片 | |
650. 1-bit and 2-bit Characters | Easy | 單次遍歷,判斷前面知足的條件下,最後一位是0便可。 | |
651. Minimum Moves to Equal Array Elements | Easy | 把n-1個數字加1,相等於把最大值-1.求和-n*最小值 | |
652. Flood Fill | Easy | 對相同顏色進行染色,可使用DFS和BFS. | |
653. Sum of Left Leaves | Easy | 求全部左葉子的和,要判斷是否是在左邊,判斷是否是葉子,而後加到結果中 | |
654. Number of Boomerangs | Easy | 統計迴旋鏢的個數,不能暴力解決,須要使用排列組合公式n*(n-1) | |
655. Range Addition II | Easy | 求隊列的最小值便可 | |
656. Construct the Rectangle | Easy | 從算術平方根開始找約數便可 | |
657. Two Sum II - Input array is sorted | Easy | 先後指針同時向中間走,找到target以後中止 | |
658. First Unique Character in a String | Easy | 首先作個字符出現次數的統計,而後再次遍歷,找出只出現了一次的第一個字符。 | |
659. Degree of an Array | Easy | 求最大的出現次數的全部數字,其最左右出現的位置差的最小值 | |
660. Assign Cookies | Easy | 貪心算法,儘量給小孩知足其慾望的餅乾 | |
661. Convert Sorted Array to Binary Search Tree | Easy | 構建BST,使用中間數進行分割,用遞歸 | |
662. Relative Ranks | Easy | 相對排名,可使用堆或者排序或者argsort | |
663. Image Smoother | Easy | 直接暴力求平均便可 | |
664. Longest Palindrome | Easy | 統計出現次數的奇偶就能夠 | |
665. Minimum Index Sum of Two Lists | Easy | 保存出現的索引和與元素的對應,使用堆保存最小的就行 | |
666. Missing Number | Easy | 理論和-當前和 | |
667. Binary Tree Tilt | Easy | 後序遍歷函數返回的是左右子樹的差,在裏面用變量求和 | |
668. Positions of Large Groups | Easy | 找到長度大於3的連續字符,須要判斷結束!! | |
669. Intersection of Two Arrays II | Easy | 能夠排序,也可使用字典統計次數 | |
670. Diameter of Binary Tree | Easy | 遞歸求樹的深度,同時求左右兩個深度的和的最大值 | |
671. Student Attendance Record I | Easy | 統計A的個數,而且判斷連續L的個數 | |
672. Best Time to Buy and Sell Stock | Easy | 保存當前的最小值以及最大收益便可 | |
673. Maximum Product of Three Numbers | Easy | 找出三個數最大的乘積 | |
674. Binary Watch | Easy | 使用combinations函數 | |
675. Min Cost Climbing Stairs | Easy | 動態規劃 | |
676. Long Pressed Name | Easy | 使用雙指針,統計連續字符出現的次數 | |
677. Reverse String II | Easy | Python的切片翻轉 | |
678. Design HashSet | Easy | 直接開數組就行 | |
679. Binary Tree Level Order Traversal II | Easy | DFS和BFS均可以 | |
680. Base 7 | Easy | 轉成7進制 | |
681. Distinct Subsequences | Easy | 動規,判斷當前字符是否相等 | |
682. Merge Two Sorted Lists | Easy | 可使用遞歸或者迭代 | |
683. Poor Pigs | Easy | 相似撥號鍵盤,多維空間求解 | |
684. Binary Tree Paths | Easy | 打印二叉樹的路徑,使用遞歸和迭代 | |
685. Backspace String Compare | Easy | 字符串能夠退格,使用棧輕鬆解決 | |
686. Happy Number | Easy | 遞歸和迭代兩種作法 | |
687. Longest Continuous Increasing Subsequence | Easy | 簡單的動態規劃 | |
688. Find Smallest Letter Greater Than Target | Easy | 線性掃描或者二分 | |
689. Pascal’s Triangle | Easy | 提早構造出來,而後處理每行便可 | |
690. Second Minimum Node In a Binary Tree | Easy | 遞歸的時候找第二小值 | |
691. Longest Word in Dictionary | Easy | 先排序,再找前綴是否存在。 | |
692. Remove Element | Easy | 使用雙指針或者標記指針使得前面都是知足要求的,後面都不知足 | |
693. Climbing Stairs | Easy | 動態規劃 | |
694. Add Strings | Easy | 直接模擬大整數加法,須要注意進位問題 | |
695. Lowest Common Ancestor of a Binary Search Tree | Easy | BST找公共祖先,使用遞歸很簡單 | |
696. Longest Harmonious Subsequence | Easy | 統計相鄰的數字是否都存在便可 | |
697. Symmetric Tree | Easy | 可使用BFS和DFS兩種方法 | |
698. Maximum Subarray | Easy | 動態規劃找子數組最大和 | |
699. Most Common Word | Easy | 正則+統計 | |
700. Power of Two | Easy | 判斷二進制是否是隻有1個1便可 | |
701. Convert a Number to Hexadecimal | Easy | 轉成16進制,難點在於負數的處理:加上1<<32 | |
702. Remove Duplicates from Sorted List | Easy | 遞歸和循環 | |
703. Power of Three | Easy | 循環和迭代 | |
704. Number of 1 Bits | Easy | 使用位移統計二進制個數 | |
705. Path Sum III | Easy | 找路徑的個數,使用DFS*2或者BFS+DFS | |
706. Binary Search | Easy | 二分的模板 | |
707. Pascal’s Triangle II | Easy | 原地翻轉能夠用倒序遍歷 | |
708. Implement Queue using Stacks | Easy | 兩個棧實現一個隊列 | |
709. Subtree of Another Tree | Easy | DFS*2或DFS+BSF | |
710. House Robber | Easy | 簡單dp,當前房間偷和不偷兩種狀態 | |
711. Kth Largest Element in a Stream | Easy | 使用小根堆維護k個值,則第一個元素就是第k大元素 | |
712. Reverse Vowels of a String | Easy | 使用棧進行翻轉,或者使用雙指針 | |
713. Plus One | Easy | 使用carry表示進位 | |
714. Ugly Number | Easy | 除去2,3,5因子便可 | |
715. Search Insert Position | Easy | 二分查找 | |
716. Set Mismatch | Easy | 使用統計次數或者直接求和計算 | |
717. Largest Number At Least Twice of Others | Easy | 找出最大值,而後彈掉,再找次大值便可。 | |
718. Power of Four | Easy | 遞歸和迭代 | |
719. Find Pivot Index | Easy | 先求和,在遍歷求前半部分的和,找出左邊等於右邊 | |
720. Palindrome Number | Easy | 能夠先翻轉成整數,而後判斷和原來的是否相等 | |
721. License Key Formatting | Easy | 計算第一個分割的長度,後面都是等長的了 | |
722. Two Sum | Easy | 保存已經出現過的數字的索引,當下次遍歷的時候遇到了知足要求的結果,那麼既是中止 | |
723. Repeated Substring Pattern | Easy | 判斷每一個子串重複屢次能不能組成原來的串便可 | |
724. Maximize Distance to Closest Person | Easy | 從前向後以及從後向前遍歷兩次,取最近距離 | |
725. Count and Say | Easy | 統計字符連續出現的次數,並說出來,須要注意最後的一個字符也要添加上去 | |
726. Remove Duplicates from Sorted Array II | Easy | 快指針移動判斷和慢指針是否相等,若是不等就換到前面來 | |
727. Maximum Average Subarray I | Easy | 必定注意是長度爲k的滑動窗口,注意下標 | |
728. Find Mode in Binary Search Tree | Easy | 若是使用附加空間,可使用字典保存次數;不然須要遍歷兩次,判斷出現次數。 | |
729. Guess Number Higher or Lower | Easy | 使用二分查找 | |
730. Network Delay Time | Easy | dijkstra算法 | |
731. Quad Tree Intersection | Easy | 遞歸構造 | |
732. Factorial Trailing Zeroes | Easy | 數有多少個5就好了 | |
733. Arranging Coins | Easy | 二分查找知足條件的層數便可 | |
734. Implement Stack using Queues | Easy | 使用一個隊列就能實現棧,每次Push的時候,把隊列裏的全部元素彈出再放進來就行了。 | |
735. Add Binary | Easy | 使用進位進行模擬 | |
736. Number of Segments in a String | Easy | string.split()默認就是按照多個空格分割 | |
737. Path Sum | Easy | 遞歸和迭代都能知足 | |
738. Isomorphic Strings | Easy | 分別看s到t的映射和t到s的映射是否是一一映射的 | |
739. String Compression | Easy | 使用Pos變量維護應該放到哪一個位置,而後一次遍歷統計次數就行了 | |
740. Range Sum Query - Immutable | Easy | 保存每一個位置的累積和 | |
741. Find All Anagrams in a String | Easy | 滑動窗口,保存等長的子字符串中包含的字符數是否和另一個相等 | |
742. Valid Parentheses | Easy | 使用棧判斷括號是否合法 | |
743. Magic Squares In Grid | Easy | 暴力判斷每一個9*9的格子是否是知足題意的河圖 | |
744. Linked List Cycle | Easy | 走兩步走一步,看是否重合 | |
745. Remove Linked List Elements | Easy | 遞歸解法很差想,可是代碼很簡單 | |
746. Palindrome Linked List | Easy | 利用一個數組保存全部的數字,而後判斷數組是否是迴文的。 | |
747. Minimum Depth of Binary Tree | Easy | DFS/BFS,其實DFS更難 | |
748. Word Pattern | Easy | 一一映射 | |
749. Min Stack | Easy | 使用輔助棧保存最小值 | |
750. Contains Duplicate II | Easy | 使用字典保存出現的位置,當新的元素到來的時候,更新字典 | |
751. Valid Mountain Array | Easy | 兩個while就能夠了 | |
752. Merge Sorted Array | Easy | 從後向前進行遍歷,每次找到大的日後移動 | |
753. X of a Kind in a Deck of Cards | Easy | 須要進行一個遍歷,找到是否存在這個分組大小 | |
754. Valid Palindrome II | Easy | 須要用到雙指針,先找到第一個不相等的位置,而後去除左邊或者右邊,判斷是不是迴文 | |
755. Longest Univalue Path | Easy | 定義的DFS是對過root的單臂進行循環,可是更新的結果是雙臂,有點意思 | |
756. Longest Common Prefix | Easy | 遍歷最短的子串的每一位,看全部字符串在這一位上是否是相等的 | |
757. Repeated String Match | Easy | 重複NB/NA + 3次,看b是否是在a裏 | |
122.Best Time to Buy and Sell Stock II | Easy | 只要天天的比前面一天高,那麼就買上而且賣掉便可 | |
758. Implement strStr() | Easy | 循環加切片 | |
759. Heaters | Easy | 找出最臨近的距離 | |
760. Reach a Number | Easy | 數學題,很是不喜歡 | |
761. Nth Digit | Easy | 數學計算第多少位 | |
762. Sqrt(x) | Easy | 二分查找或者牛頓法 | |
763. Shortest Unsorted Continuous Subarray | Easy | 先排序,而後比較不等的位置 | |
764. Reverse Bits | Easy | 翻轉二進制再轉成整數 | |
765. Valid Palindrome | Easy | 過濾掉不是字母的字符,而後判斷是否是迴文便可 | |
766. Walking Robot Simulation | Easy | 模擬整個過程便可 | |
767. K-diff Pairs in an Array | Easy | 找絕對值出現等於k的次數,須要對k進行判斷 | |
768. Excel Sheet Column Title | Easy | 須要對26取餘,而且作個判斷,由於0\26對26取餘的結果是同樣的 | |
769. Rotate Array | Easy | 可使用額外數組,也可以使用遞歸原地翻轉 | |
770. Non-decreasing Array | Easy | 找到變小的位置,而後和再前面的數字進行判斷,看是應該修改當前的仍是前面的 | |
771. Design Linked List | Easy | 本身實現鏈表,挺複雜的。可使用list進行模擬,方便不少。 | |
772. Range Sum of BST | Medium | 須要根據根節點的值進行判斷,郵編和左邊需不須要繼續尋找 | |
773. Max Increase to Keep City Skyline | Medium | 分別找出行和咧的最大值,把每一個位置增加到行列最大值的最小值 | |
774. Encode and Decode TinyURL | Medium | 使用字典完成映射 | |
775. Maximum Binary Tree | Medium | 找到最大值,而後數組切片 | |
776. Insert into a Binary Search Tree | Medium | 遞歸解法,直接對當前節點進行操做! | |
777. Find and Replace Pattern | Medium | 判斷是否是一一映射 | |
778. Minimum Add to Make Parentheses Valid | Medium | 使用一個棧 | |
779. All Paths From Source to Target | Medium | 回溯法找路徑 | |
780. Score After Flipping Matrix | Medium | 把行進行翻轉,按列統計1的個數便可 | |
781. All Possible Full Binary Trees | Medium | 使用兩種循環遍歷可能構成的左子樹和右子樹,每次構建新的root | |
782. Partition Labels | Medium | 使用字典保存每一個字符最後出現的位置,若是一個區間內字符的最後位置的都在一塊兒,那麼就添加到結果裏 | |
783. Battleships in a Board | Medium | 直接數有多少小島就行,判斷小島可使用它的最左上角元素便可 | |
784. Complex Number Multiplication | Medium | 複數運算,重點是分割字符串 | |
785. Counting Bits | Medium | i的二進制1個數等於i/2的二進制個數+i%2 | |
786. Spiral Matrix III | Medium | 保留循環更新步數,很噁心 | |
787. Custom Sort String | Medium | 統計次數,拼接成字符串 | |
788. Find All Duplicates in an Array | Medium | 原地變成負數,若是已是負數,那麼說明出現了兩次。 | |
789. Design Twitter | Medium | 使用優先級隊列彈出最新的內容 | |
790. Keys and Rooms | Medium | 可使用DFS和BFS解決 | |
791. Queue Reconstruction by Height | Medium | 先插入長得高的他們不會影響別人,而後在對應位置插入次高的 | |
792. Find Bottom Left Tree Value | Medium | 層次遍歷,找出最後一層的第一個節點便可 | |
793. Daily Temperatures | Medium | 使用一個棧,保存每一個元素,若是後面的元素比較大,那麼就已知出棧操做 | |
794. Validate Stack Sequences | Medium | 使用棧進行模擬,不管如何都把當前的元素彈出,而後和彈出的元素進行比較,相等的話一直彈出 | |
795. Find Largest Value in Each Tree Row | Medium | 遍歷每一層,找出最大值便可。 | |
796. Single Element in a Sorted Array | Medium | 可使用很風騷的二分查找k, | |
797. Construct Binary Tree from Preorder and Postorder Traversal | Medium | 找到後序的倒數第二個元素就是右子樹的根節點 | |
798. Single Number III | Medium | 使用異或或者字典解決 | |
799. Optimal Division | Medium | 這個題很是tricky,沒意思 | |
800. Palindromic Substrings | Medium | 判斷迴文,須要判斷去掉兩頭字符以後是否仍然是迴文,動態規劃 | |
801. Max Area of Island | Medium | 找到島的數量,這個題可使用BFS或者DFS的方法 | |
802. Score of Parentheses | Medium | 可使用棧和遞歸,這個題很巧妙,是個不錯的題目 | |
803. Complete Binary Tree Inserter | Medium | 使用數組保存每一個節點的指針,由於是徹底二叉樹,因此節點位置除以2就獲得了它的父親節點 | |
804. Sort Characters By Frequency | Medium | 根據出現次數排序,而後構建新的字符串便可 | |
805. Escape The Ghosts | Medium | 找出是否存在更小的曼哈頓距離 | |
806. Binary Tree Inorder Traversal | Medium | 中序遍歷自己很簡單,可是這個遞歸的寫法很差想 | |
807. Smallest Subtree with all the Deepest Nodes | Medium | 定義遞歸函數:返回<最大深度,最大深度對應的節點> | |
808. Most Frequent Subtree Sum | Medium | 遍歷求和,字典統計出現次數最多的全部元素 | |
809. Beautiful Arrangement | Medium | 經典回溯法,要背會 | |
810. Product of Array Except Self | Medium | 使用兩次遍歷,分別從左邊和右邊向中間靠攏 | |
811. Minimum ASCII Delete Sum for Two Strings | Medium | 和LCS很接近的DP題目 | |
812. Linked List Components | Medium | 判斷當前節點在set中,可是下一個節點不在便可 | |
813. Top K Frequent Elements | Medium | 使用字典統計次數,使用優先級隊列實現排序 | |
814. Minimum Moves to Equal Array Elements II | Medium | 找出中位數,而後求全部數字到中位數的距離和 | |
815. Permutations | Medium | 經典回溯法 | |
816. Teemo Attacking | Medium | 計算每次中毒的開始和結束時間 | |
817. Generate Parentheses | Medium | 經典回溯法 | |
818. Minesweeper | Medium | 掃雷遊戲,使用DFS | |
819. Beautiful Arrangement II | Medium | 每次把後面最大數字放到前面來就能增長一種新的差值 | |
820. Map Sum Pairs | Medium | 前綴樹的題目,能夠背一背 | |
821. Friend Circles | Medium | 並查集的題目 | |
822. Array Nesting | Medium | 一直遍歷就行了,使用一個visited數組,但不是回溯。 | |
823. Most Stones Removed with Same Row or Column | Medium | 須要使用並查集,很是考驗抽象能力 | |
824. Mirror Reflection | Medium | 鏡像反射,須要找規律,分偶數和奇數進行討論 | |
825. Implement Magic Dictionary | Medium | 找到存不存在漢明間距是1 | |
826. Rabbits in Forest | Medium | 對兔子出現次數進行統計,而後求一個公式。 | |
827. Max Chunks To Make Sorted | Medium | 從左到右遍歷一次,時刻保持當前的最大值,若是當前最大值等於索引,那麼chunck+1. | |
828. Print Binary Tree | Medium | 先把二叉樹構造出來,而後使用相似二分查找左右分治的方法。 | |
829. Implement Trie (Prefix Tree) | Medium | 構造字典樹,是個好題,須要背會 | |
830. Replace Words | Medium | 使用字典樹或者拉鍊法求解 | |
831. Maximum XOR of Two Numbers in an Array | Medium | 暴力求解會超時,須要使用異或的性質從最高位開始遍歷。或者使用字典樹。 | |
832. Combination Sum | Medium | 回溯法,遍歷開始的地方不變,要跟蹤target | |
833. Combination Sum II | Medium | 經典的回溯法,這個題須要背會 | |
834. Combination Sum III | Medium | 也是經典回溯法,須要注意的是不重複,因此遞歸開始的地方要+1 | |
835. Combination Sum IV | Medium | 這個題須要使用動態規劃求次數了,並不用回溯法。相似於爬樓梯 | |
836. Subsets | Medium | 使用回溯法進行搜索,須要注意的是要跟蹤如今的位置,不能向回走 | |
837. Count Numbers with Unique Digits | Medium | 這個題是找規律+動態規劃,要計算1位數字、2位數字…n位數字每位數字都不重複的狀況有多少個 | |
838. Combinations | Medium | 這個組合問題須要跟蹤如今的位置防止向後走,還要跟蹤在剩餘的數字裏面取多少個 | |
839. Gray Code | Medium | 格雷碼是把比本身小一位的格雷碼正向一遍,而後以1開頭+小一位的格雷碼反向一遍,是個遞歸過程 | |
840. Subsets II | Medium | 這個求子集的時候要屏蔽相同的起始元素,在for循環裏進行判斷 | |
841. Letter Combinations of a Phone Number | Medium | 這個是個排列問題,先把當前位置的全部字符一次排好,而後再排列後面的字符串 | |
842. Palindrome Partitioning | Medium | 一樣的回溯法,若是定義新函數沒有太多難度,若是使用題目給定的函數進行遞歸須要額外判斷終止條件 | |
843. Permutations II | Medium | 若是當前數字和前面的數字相等,而且前面的數字沒有訪問過,那麼就不能搜索 | |
844. Restore IP Addresses | Medium | 回溯法,須要考慮ip的各類過濾條件,好比255和0開頭的數字不合法 | |
845. Split Array into Fibonacci Sequence | Medium | 回溯,須要注意不能超過int,和addative numbers很像 | |
846. Permutation Sequence | Medium | 須要找規律,每一位等於剩餘數字/剩餘位數的全排列 | |
847. Word Search | Medium | 也是經典回溯法,須要保存是否已經訪問過了某個位置,整體代碼很常見 | |
848. Add and Search Word - Data structure design | Medium | Trie加上遞歸,自己不難,注意遍歷全部子節點而後遞歸的操做 | |
849. N-Queens II | Medium | 回溯法去解決。使用一維的數組保存每行放在第多少列,進行有效棋盤判斷的時候,須要判斷同列或者斜率絕對值1 | |
850. Shopping Offers | Medium | 使用回溯法進行求解,套餐和單獨點都進行嘗試,這個題常常考! | |
851. Binary Tree Preorder Traversal | Medium | 這個先序遍歷迭代解法使用的是棧,有點違反直覺,建議仔細思考思考 | |
852. Asteroid Collision | Medium | 棧裏保留着向右移動的小行星,若是當前的行星是向左的,向棧裏面判斷自身是否銷燬 | |
853. Next Greater Element II | Medium | 單調遞減棧,這個題難點在於循環數組,容易分析出把數組過兩遍便可,須要求餘 | |
854. Image Overlap | Medium | 正方形重合,使用字典保存兩兩之間向量的差,求最大的移動向量出現的次數 | |
855. Minimum Path Sum | Medium | 最小路徑和,簡單的動態規劃,注意初始狀態 | |
856. Unique Paths | Medium | 簡單的動態規劃,給周圍包上一圈全0的數字,方便狀態轉移 | |
857. Unique Paths II | Medium | 也是動態規劃,和上面的區別在於有障礙物,直接設置障礙物處的狀態是0 | |
858. Rotate Image | Medium | 先上下翻轉,再沿着主對角線翻轉便可完成旋轉操做 | |
859. Target Sum | Medium | 使用動態規劃,dp[i][j]表示到第i個位置位置構成和爲j的組合有多少種 | |
860. Unique Binary Search Trees | Medium | 記憶化遞歸,動態規劃,卡特蘭數等等,方法不少 | |
861. Decode String | Medium | 字符串解碼,須要用到棧保存已經有的字符串和當前的數字,很經典的題目 | |
862. Group Anagrams | Medium | 對字符串進行排序,排序以後相等的字符串說明包含的字符相等 | |
863. Task Scheduler | Medium | 任務調度題目,很容易推出公式,可是切記整個時間最少知足任務個數 | |
864. Best Time to Buy and Sell Stock with Cooldown | Medium | 經典動態規劃的題目,這個題須要定義兩個數組:今天有股票的狀況下的收益和今天沒有股票狀況下的收益,而後狀態轉移就簡單了 | |
865. Best Time to Buy and Sell Stock with Transaction Fee | Medium | 動態規劃,作法和上面很是相似,每次計算收益的時候須要減去手續費 | |
866. Flatten Binary Tree to Linked List | Medium | 若是用遞歸的話必定明白遞歸函數是把一個二叉樹弄平造成鏈表,而後找到鏈表尾部,把鏈表拼接 | |
867. Longest Increasing Subsequence | Medium | LIS問題,是dp最經典的題目之一,須要從每一個位置向前遍歷以更新dp | |
868. Search a 2D Matrix II | Medium | 從矩陣的左下或者右上開始遍歷,很簡單 | |
869. Search a 2D Matrix | Medium | 在二維數組中進行搜索,可使用矩陣左下和右上角的查詢方法,也能夠直接遍歷每個位置。 | |
870. Perfect Squares | Medium | 動態規劃,一個數字能由多少個整數平方和構成等於知足更小數字+平方數 的狀態+1。 |
|
871. Partition Equal Subset Sum | Medium | 把數字的累計和當作狀態,當前的狀態等於前面的數字累積和-當前數值的狀態。 | |
872. Contiguous Array | Medium | 求累積和,而後判斷在這個位置前面,這個累計和是否是出現過 | |
873. Merge Intervals | Medium | 使用start和end兩個變量表示區間,當區間再也不重疊的時候把上面區間放入結果中,重置start和end | |
874. Course Schedule | Medium | 拓撲排序,每次彈出入度爲0的節點,並把以他爲入度的全部節點的入度-1 | |
875. Construct Binary Tree from Preorder and Inorder Traversal | Medium | 前序遍歷的首節點就是根節點,在中序中的位置座標是左子樹,右邊是右子樹 | |
876. Lowest Common Ancestor of a Binary Tree | Medium | 這個遞歸調用須要注意若是查找到任何一個節點都算是找到了最低公共祖先 | |
877. Word Break | Medium | 動態規劃,每一個位置的狀態由前面的某個狀態+一個條件獲得,搜索是兩重循環 | |
878. Minimum Size Subarray Sum | Medium | 蟲取法,找到最小長度的知足區間 | |
879. Sort List | Medium | 對於list的merge sort。 | |
880. Find First and Last Position of Element in Sorted Array | Medium | 本身實現lower_bound和upper_bound函數,使用二分 | |
881. Search in Rotated Sorted Array | Medium | 對二分的進一步理解:判斷下一步查找的範圍到底在mid左邊仍是右邊 | |
882. Maximal Square | Medium | 這個題使用dp,某位置的最大正方形邊長等於左邊、上邊、左上邊三個位置最小的邊長+1 | |
883. Jump Game | Medium | 貪心算法,保存每一步都選擇跳的最遠的地方,若是這個位置不能到達直接返回false. | |
884. Find the Duplicate Number | Medium | 尋找重複的數字,至關於鏈表中的環,也可使用二分查找 | |
885. Linked List Cycle II | Medium | 找出鏈表環的入口,可使用雙指針,也可使用set保存已經遍歷過的路徑 | |
886. Add Two Numbers | Medium | 兩個鏈表的加法,只要有一個鏈表不空或者進位存在就添加新的節點 | |
887. Next Permutation | Medium | 找到後面的第一個不降序數字,與第一個比它大的位置進行交換,而後把後面部分翻轉便可 | |
888. Word Search | Medium | 標準的回溯法,須要向周圍進行搜索,同時保存已經遍歷了的位置再也不訪問 | |
889. Coin Change | Medium | 動態規劃,定義dp數組是可以成的amount的最少硬幣數,遍歷硬幣更新每一個amount | |
890. Maximum Product Subarray | Medium | 求連續數組最大積,須要保存每一個位置的最大、最小積,每一個位置都去維護這兩個變量 | |
891. Longest Palindromic Substring | Medium | 字符串的簡單動態規劃,也能夠直接暴力求解 | |
892. Validate Binary Search Tree | Medium | 遞歸函數中維護每一個節點的取值上下限便可。或者有序的中序遍歷是個BST | |
893. Longest Substring Without Repeating Characters | Medium | 蟲取法+set找到每一個不含重複元素的子串,保存最長子串 | |
894. Implement Rand10() Using Rand7() | Medium | 須要先構造出rand40,而後mod10便可獲得rand10. | |
895. Integer Break | Medium | 任意>=2的整數均可以拆解成2x+3y,當y儘量大的時候target = 2x+3y的結果最大 | |
896. Redundant Connection | Medium | 並查集的題目,這種題目是個模板,應該背會DSU的代碼 | |
897. Integer to Roman | Medium | 整數變成羅馬數字,把整數進行拆解便可,在拆解的過程當中拼接每一個數字對應的字符 | |
898. Kth Smallest Element in a BST | Medium | 遞歸解法須要使用全局變量保存已經遍歷了多少個了,到達k個時直接中止並返回便可。 | |
899. Bulb Switcher II | Medium | 智力題,被踩了不少次,沒仔細作 | |
900. Reordered Power of 2 | Medium | 思路要靈活一點,直接統計數字出現的次數是否相等便可,沒必要真的從新排序 | |
901. Shuffle an Array | Medium | Fisher–Yates 洗牌算法:依次遍歷列表中的每一位,並將這一位與其後面的隨機一位交換順序。 | |
902. Add Two Numbers II | Medium | 使用額外空間保存兩個列表的值元素,而後再模擬加法 | |
903. Minimum Area Rectangle | Medium | 對角線肯定長方形,判斷另一條對角線上的兩個點是否是存在便可 | |
904. Different Ways to Add Parentheses | Medium | 這是個遞歸求解的題目,若是遇到一個運算符就把左右兩部分分別求出值,而後再作操做。左右部分分別求值求至關於給左右部分分別加上了括號 | |
905. Design Circular Deque | Medium | 設計deque,最簡單的方法是使用雙向鏈表 | |
906. Random Pick Index | Medium | 使用蓄水池抽樣,每一個數字被選擇的機率是1/cnt,遍歷結束便可 | |
907. Linked List Random Node | Medium | 和上題一致,蓄水池抽樣 | |
908. RLE Iterator | Medium | 一個循環,判斷當前位置和剩下的數字n之間的關係,看是否向後走便可 | |
909. Total Hamming Distance | Medium | 統計int的32位中有多少個數字該位是一、多少個數字該位是0,結果是二者相乘 | |
910. Split Linked List in Parts | Medium | 求出每一段的長度,而後定一個函數切鏈表便可 | |
911. Hand of Straights | Medium | 使用map保存每一個數字的次數,而後向後遍歷W-1個數字,判斷是否都存在便可 | |
912. Copy List with Random Pointer | Medium | 遍歷兩遍,第一遍構造的節點放到字典裏,第二遍遍歷再鏈接起來 | |
399. Evaluate Division | Medium | 帶權有向圖的搜索問題 | |
636. Exclusive Time of Functions | Medium | 計算機函數的調度問題,使用棧解決 | |
646. Maximum Length of Pair Chain | Medium | 這個就是最多能看多少個電視節目的問題,使用的是貪心法,策略是優先選擇結束時間早的項目 | |
328. Odd Even Linked List | Medium | 先分別構建偶數位置的鏈表和奇數位置的鏈表,把對應位置的結果放到對應位置以後,再拼接便可 | |
638. Shopping Offers | Medium | DFS進行搜索,嘗試每種套餐方案 | |
318. Maximum Product of Word Lengths | Medium | 直接O(N^2)遍歷便可 | |
173. Binary Search Tree Iterator | Medium | 把每一個節點的左孩子放到棧中,遍歷棧中節點的時候須要把其右孩子的全部左孩子放到棧中 | |
337. House Robber III | Medium | 遞歸查找每一個節點可不能夠用的狀況下,最優結果是多少。可不能夠用是由父親節點用沒用過決定的,因此遞歸函數有個變量保存父親節點的狀態。 | |
343. Integer Break | Medium | 須要證實把一個數字拆成儘量多的3和儘量少的4的和的時候,總乘積最大 | |
875. Koko Eating Bananas | Medium | 這個是一個變相的二分查找,須要根據當前的值判斷查找後的移動 | |
901. Online Stock Span | Medium | 須要使用一個單調遞減棧保存每一個數字的前面出現了多少小於等於該數字的數,後來的數字須要吞掉棧中比本身小的數字 |