大白的故事 大白的故事
首页
  • 学习笔记

    • LeetCode题解导航
  • 学习笔记

    • TypeScript笔记
页面
技术
  • 友情链接
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
dbdgs

大白的故事

终身学习者
首页
  • 学习笔记

    • LeetCode题解导航
  • 学习笔记

    • TypeScript笔记
页面
技术
  • 友情链接
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • leetcode

    • LeetCode题解
    • leetcode1 两数之和[简单难度]
      • leetcode2 Add Two Numbers
      • leetcode3 Longest Substring Without Repeating Characters
      • leetcode4 寻找两个正序数组的中位数[困难难度]
      • leetcode5 Longest Palindromic Substring
      • leetcode6 ZigZag Conversion
      • leetcode7 Reverse Integer
      • leetcode8 String to Integer (atoi)
      • leetcode9 Palindrome Number
      • leetcode10 Regular Expression Matching
      • leetcode11-盛最多水的容器[中等难度]
      • leetcode12 Integer to Roman
      • leetcode13 Roman to Integer
      • leetcode14 Longest Common Prefix
      • leetcode15 3Sum
      • leetcode16 3Sum Closest
      • leetcode17 Letter Combinations of a Phone Number
      • leetcode18 4Sum
      • leetcode19 Remove Nth Node From End of List
      • leetcode20 Valid Parentheses
      • leetcode21 Merge Two Sorted Lists
      • leetcode22 Generate Parentheses
      • leetcode23 Merge k Sorted Lists
      • leetcode24 Swap Nodes in Pairs
      • leetcode25 Reverse Nodes in k-Group
      • leetcode26 Remove Duplicates from Sorted Array
      • leetcode27 Remove Element
      • leetcode28 Implement strStr()
      • leetcode29 Divide Two Integers
      • leetcode30 Substring with Concatenation of All Words
      • leetcode31 Next Permutation
      • leetcode32 Longest Valid Parentheses
      • leetcode33 Search in Rotated Sorted Array
      • leetcode34 Find First and Last Position of Element in Sorted Array
      • leetcode35 Search Insert Position
      • leetcode36 有效的数独[中等难度]
      • leetcode37 Sudoku Solver
      • leetcode38 外观数列(报数)【中等难度】
      • leetcode39 Combination Sum
      • leetcode40 Combination Sum II
      • leetcode41 First Missing Positive-zh
      • leetcode42 Trapping Rain Water-zh
      • leetcode43 Multiply Strings-zh
      • leetcode44 Wildcard Matching-zh
      • leetcode45 Jump Game II-zh
      • leetcode46 Permutations-zh
      • leetcode47 Permutations II-zh
      • leetcode48 Rotate Image-zh
      • leetcode49 Group Anagrams-zh
      • leetcode50 Pow(x, n)-zh
      • leetcode51 N-Queens-zh
      • leetcode52 N-Queens II-zh
      • leetcode53 Maximum Subarray-zh
      • leetcode54 Spiral Matrix-zh
      • leetcode55 Jump Game-zh
      • leetcode56 Merge Intervals-zh
      • leetcode57 Insert Interval-zh
      • leetcode58 Length of Last Word-zh
      • leetcode59 Spiral Matrix II-zh
      • leetcode60 Permutation Sequence-zh
      • leetcode61 Rotate List-zh
      • leetcode62 Unique Paths-zh
      • leetcode63 Unique Paths II-zh
      • leetcode64 Minimum Path Sum-zh
      • leetcode65 Valid Number-zh
      • leetcode66 Plus One-zh
      • leetcode67 Add Binary-zh
      • leetcode68 Text Justification-zh
      • leetcode69 Sqrt(x)-zh
      • leetcode70 Climbing Stairs-zh
      • leetcode71 Simplify Path-zh
      • leetcode72 Edit Distance-zh
      • leetcode73 Set Matrix Zeroes-zh
      • leetcode74 Search a 2D Matrix-zh
      • leetcode75 Sort Colors-zh
      • leetcode76 Minimum Window Substring-zh
      • leetcode77 Combinations-zh
      • leetcode78 Subsets-zh
      • leetcode79 Word Search-zh
      • leetcode80 Remove Duplicates from Sorted Array II-zh
      • leetcode81 Search in Rotated Sorted Array II-zh
      • leetcode82 Remove Duplicates from Sorted List II-zh
      • leetcode83 Remove Duplicates from Sorted List-zh
      • leetcode84 Largest Rectangle in Histogram-zh
      • leetcode85 Maximal Rectangle-zh
      • leetcode86 Partition List-zh
      • leetcode87 Scramble String-zh
      • leetcode88 Merge Sorted Array-zh
      • leetcode89 Gray Code-zh
      • leetcode90 Subsets II-zh
      • leetcode91 Decode Ways-zh
      • leetcode92 Reverse Linked List II-zh
      • leetcode93 Restore IP Addresses-zh
      • leetcode94 Binary Tree Inorder Traversal-zh
      • leetcode95 Unique Binary Search Trees II-zh
      • leetcode96 Unique Binary Search Trees-zh
      • leetcode97 Interleaving String-zh
      • leetcode98 Validate Binary Search Tree-zh
      • leetcode99 Recover Binary Search Tree-zh
      • leetcode100 Same Tree-zh
      • leetcode101 Symmetric Tree-zh
      • leetcode102 Binary Tree Level Order Traversal-zh
      • leetcode103 Binary Tree Zigzag Level Order Traversal-zh
      • leetcode104 Maximum Depth of Binary Tree-zh
      • leetcode105 Construct Binary Tree from Preorder and Inorder Traversal-zh
      • leetcode106 Construct Binary Tree from Inorder and Postorder Traversal-zh
      • leetcode107 Binary Tree Level Order Traversal II-zh
      • leetcode108 Convert Sorted Array to Binary Search Tree-zh
      • leetcode109 Convert Sorted List to Binary Search Tree-zh
      • leetcode110 Balanced Binary Tree-zh
      • leetcode111 Minimum Depth of Binary Tree-zh
      • leetcode112 Path Sum-zh
      • leetcode113 Path Sum II-zh
      • leetcode114 Flatten Binary Tree to Linked List-zh
      • leetcode115 Distinct Subsequences-zh
      • leetcode116 Populating Next Right Pointers in Each Node-zh
      • leetcode117 Populating Next Right Pointers in Each Node II-zh
      • leetcode118 Pascal's Triangle-zh
      • leetcode119 Pascal's Triangle II-zh
      • leetcode120 Triangle-zh
      • leetcode121 Best Time to Buy and Sell Stock-zh
      • leetcode122 Best Time to Buy and Sell Stock II-zh
      • leetcode123 Best Time to Buy and Sell Stock III-zh
      • leetcode124 Binary Tree Maximum Path Sum-zh
      • leetcode125 Valid Palindrome-zh
      • leetcode126 Word Ladder II-zh
      • leetcode127 Word Ladder-zh
      • leetcode128 Longest Consecutive Sequence-zh
      • leetcode129 Sum Root to Leaf Numbers-zh
      • leetcode130 Surrounded Regions-zh
      • leetcode131 Palindrome Partitioning-zh
      • leetcode132 Palindrome Partitioning II-zh
      • leetcode133 Clone Graph-zh
      • leetcode134 Gas Station-zh
      • leetcode135 Candy-zh
      • leetcode136 Single Number-zh
      • leetcode137 Single Number II-zh
      • leetcode138 Copy List with Random Pointer-zh
      • leetcode139 Word Break-zh
      • leetcode140 Word Break II-zh
      • leetcode141 Linked List Cycle-zh
      • leetcode142 Linked List Cycle II-zh
      • leetcode143 Reorder List-zh
      • leetcode144 Binary Tree Preorder Traversal-zh
      • leetcode145 Binary Tree Postorder Traversal-zh
      • leetcode146 Lru Cache-zh
      • leetcode147 Insertion Sort List-zh
      • leetcode148 Sort List-zh
      • leetcode149 Max Points on a Line-zh
      • leetcode150 Evaluate Reverse Polish Notation-zh
      • leetcode151 Reverse Words in a String-zh
      • leetcode152 Maximum Product Subarray-zh
      • leetcode153 Find Minimum in Rotated Sorted Array-zh
      • leetcode154 Find Minimum in Rotated Sorted Array II-zh
      • leetcode155 Min Stack-zh
      • leetcode156 Binary Tree Upside Down-zh
      • leetcode157 Read N Characters Given Read4-zh
      • leetcode158 Read N Characters Given Read4 II - Call multiple times-zh
      • leetcode159 Longest Substring with At Most Two Distinct Characters-zh
      • leetcode160 Intersection of Two Linked Lists-zh
      • leetcode161 One Edit Distance-zh
      • leetcode162 Find Peak Element-zh
      • leetcode163 Missing Ranges-zh
      • leetcode164 Maximum Gap-zh
      • leetcode165 Compare Version Numbers-zh
      • leetcode166 Fraction to Recurring Decimal-zh
      • leetcode167 Two Sum II - Input array is sorted-zh
      • leetcode168 Excel Sheet Column Title-zh
      • leetcode169 Majority Element-zh
      • leetcode170 Two Sum III - Data structure design-zh
      • leetcode171 Excel Sheet Column Number-zh
      • leetcode172 Factorial Trailing Zeroes-zh
      • leetcode173 Binary Search Tree Iterator-zh
      • leetcode174 Dungeon Game-zh
      • leetcode175 Combine Two Tables-zh
      • leetcode176 Second Highest Salary-zh
      • leetcode177 Nth Highest Salary-zh
      • leetcode178 Rank Scores-zh
      • leetcode179 Largest Number-zh
      • leetcode180 Consecutive Numbers-zh
      • leetcode181 Employees Earning More Than Their Managers-zh
      • leetcode182 Duplicate Emails-zh
      • leetcode183 Customers Who Never Order-zh
      • leetcode184 Department Highest Salary-zh
      • leetcode185 Department Top Three Salaries-zh
      • leetcode186 Reverse Words in a String II-zh
      • leetcode187 Repeated DNA Sequences-zh
      • leetcode188 Best Time to Buy and Sell Stock IV-zh
      • leetcode189 Rotate Array-zh
      • leetcode190 Reverse Bits-zh
      • leetcode191 Number of 1 Bits-zh
      • leetcode192 Word Frequency-zh
      • leetcode193 Valid Phone Numbers-zh
      • leetcode194 Transpose File-zh
      • leetcode195 Tenth Line-zh
      • leetcode196 Delete Duplicate Emails-zh
      • leetcode197 Rising Temperature-zh
      • leetcode198 House Robber-zh
      • leetcode199 Binary Tree Right Side View-zh
      • leetcode200 Number of Islands-zh
      • leetcode201 Bitwise AND of Numbers Range-zh
      • leetcode202 Happy Number-zh
      • leetcode203 Remove Linked List Elements-zh
      • leetcode204 Count Primes-zh
      • leetcode205 Isomorphic Strings-zh
      • leetcode206 Reverse Linked List-zh
      • leetcode207 Course Schedule-zh
      • leetcode208 Implement Trie (Prefix Tree)-zh
      • leetcode209 Minimum Size Subarray Sum-zh
      • leetcode210 Course Schedule II-zh
      • leetcode211 Design Add and Search Words Data Structure-zh
      • leetcode212 Word Search II-zh
      • leetcode213 House Robber II-zh
      • leetcode214 Shortest Palindrome-zh
      • leetcode215 Kth Largest Element in an Array-zh
      • leetcode216 Combination Sum III-zh
      • leetcode217 Contains Duplicate-zh
      • leetcode218 The Skyline Problem-zh
      • leetcode219 Contains Duplicate II-zh
      • leetcode220 Contains Duplicate III-zh
      • leetcode221 Maximal Square-zh
      • leetcode222 Count Complete Tree Nodes-zh
      • leetcode223 Rectangle Area-zh
      • leetcode224 Basic Calculator-zh
      • leetcode225 Implement Stack using Queues-zh
      • leetcode226 Invert Binary Tree-zh
      • leetcode227 Basic Calculator II-zh
      • leetcode228 Summary Ranges-zh
      • leetcode229 Majority Element II-zh
      • leetcode230 Kth Smallest Element in a BST-zh
      • leetcode231 Power of Two-zh
      • leetcode232 Implement Queue using Stacks-zh
      • leetcode233 Number of Digit One-zh
      • leetcode234 Palindrome Linked List-zh
      • leetcode235 Lowest Common Ancestor of a Binary Search Tree-zh
      • leetcode236 Lowest Common Ancestor of a Binary Tree-zh
      • leetcode237 Delete Node in a Linked List-zh
      • leetcode238 Product of Array Except Self-zh
      • leetcode239 Sliding Window Maximum-zh
      • leetcode240 Search a 2D Matrix II-zh
      • leetcode241 Different Ways to Add Parentheses-zh
      • leetcode242 Valid Anagram-zh
      • leetcode243 Shortest Word Distance-zh
      • leetcode244 Shortest Word Distance II-zh
      • leetcode245 Shortest Word Distance III-zh
      • leetcode246 Strobogrammatic Number-zh
      • leetcode247 Strobogrammatic Number II-zh
      • leetcode248 Strobogrammatic Number III-zh
      • leetcode249 Group Shifted Strings-zh
      • leetcode250 Count Univalue Subtrees-zh
      • leetcode251 Flatten 2D Vector-zh
      • leetcode252 Meeting Rooms-zh
      • leetcode253 Meeting Rooms II-zh
      • leetcode254 Factor Combinations-zh
      • leetcode255 Verify Preorder Sequence in Binary Search Tree-zh
      • leetcode256 Paint House-zh
      • leetcode257 Binary Tree Paths-zh
      • leetcode258 Add Digits-zh
      • leetcode259 3Sum Smaller-zh
      • leetcode260 Single Number III-zh
    • leetcode-p2

    • 算法
    • leetcode
    geekzl.com
    2021-07-17

    leetcode1 两数之和【简单难度】

    # 1. 两数之和 (opens new window)

      ●  难度: 简单

    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

    你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

    你可以按任意顺序返回答案。


    示例 1:

    输入:nums = [2,7,11,15], target = 9
    输出:[0,1]
    解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
    
    1
    2
    3

    示例 2:

    输入:nums = [3,2,4], target = 6
    输出:[1,2]
    
    1
    2

    示例 3:

    输入:nums = [3,3], target = 6
    输出:[0,1]
    
    1
    2

    提示:

    • 2 <= nums.length <= 104
    • -109 <= nums[i] <= 109
    • -109 <= target <= 109
    • 只会存在一个有效答案

    进阶: 你可以想出一个时间复杂度小于 O(n2) 的算法吗?


    # 英文题目: 2 sum (Two sum)

    Given an array of integers nums and an integer target, return _indices of the two numbers such that they add up to target. You may assume that each input would have exactly one solution, and you may not use the same element twice. You can return the answer in any order.


    Example 1:

    Input: nums = [2,7,11,15], target = 9 Output: [0,1]

    Explaination: Because nums[0] + nums[1] == 9, we return [0, 1].

    Example 2: Input: nums = [3,2,4], target = 6 Output: [1,2]

    Example 3: Input: nums = [3,3], target = 6 Output: [0,1]

    Constraints:

    • 2 <= nums.length <= 103
    • -109 <= nums[i] <= 109
    • -109 <= target <= 109
    • Only one valid answer exists.

    # 分析:

    方法1: 暴力法,复杂度O(n^2),会TLE(超时);

    方法2: hashmap查表,在表中找 target - 当前循环变量i对应的那个数。用一个哈希表(C++中用unordered_map, C#中用dictionary, Python中用dict,Java中可以直接用HashMap),存储每个数对应的下标,复杂度O(n);

    方法3: 快排 + 双指针 ​

    # 方法2 AC代码:

    ​

    class Solution {
    	public:
    		vector<int> twoSum(vector<int> &nums, int target)
    		{
    			unordered_map<int, int> dict;
    			vector<int> result;
    			for(int i = 0; i < nums.size(); i++) {
    				dict[nums[i]] = i; // 顺序的map映射: value->index 
    			}
    			for(int i = 0; i < nums.size(); i++)
    			{
    				int query = target - nums[i];
    				if(dict.find(query) != dict.end() && dict[query] > i)  // dict[query] > i是为了防止重复计算 
    				{
    					result.push_back(i);
    					result.push_back(dict[query]);
    					break;
    				}
    			}
    			return result;
    		}
    };
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22

    # 方法2的另一种写法:

    class Solution {
    public:
    	vector<int> twoSum(vector<int> &nums, int target)
    	{
    		unordered_map<int, int> dict;
    		vector<int> res(2,-1), emptyVect;
    		for(int i=0;i<nums.size();i++)
    		{
    			int query=target-nums[i];
    			if(dict.find(query)==dict.end()) dict[nums[i]]=i;     // 逆序的map映射: value->index
    			else {
    				res[1]=i;
    				res[0]=dict[query];
    				return res;	
    			}
    		}
    		return emptyVect;
    	}
    };
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19

    ​

    # 方法3 AC代码:

    • 定义一个struct, 存储 index 和 value
    • 使用两个指针, l 和 r, l++, r--

    left自增, right 自减

    注意: 如果要在一个struct上调用STL中的sort方法,需要先为其定义好 compare 函数。 ​

    具体代码如下:

    typedef struct node{
        int index;
        int value;
        node(){};
        node(int i, int v) : index(i), value(v){}
    } Node;
     
    bool compare(const Node& a, const Node& b){
        return a.value < b.value;
    }
     
    class Solution {
    public:
        vector<int> twoSum(vector<int> &nums, int target) {
             
            int len = nums.size();
            assert(len >= 2);         
             
            vector<int> ret(2, 0);  // 初始化:ret包含2个值为0的元素
             
            vector<Node> nums2(len);
            for(int i = 0; i < len; i++){
                nums2[i] = Node(i+1, nums[i]);
            }
            
            sort(nums2.begin(), nums2.end(), compare);  // 在定义的struct上调用快排,T(n)=O(n*log(n))
             
            int l = 0;
            int r = len - 1;
            while(l < r){
                int sum = nums2[l].value + nums2[r].value;
                if(sum == target){
                    ret[0] = min(nums2[l].index, nums2[r].index)-1;     // 注意,这里需要减去1
                    ret[1] = max(nums2[l].index, nums2[r].index)-1;
                    break;
                } else if(sum < target){
                    l++;
                } else {
                    r--;
                }
            }       
            return ret;  // 用两个指针来扫
        }
    };
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    编辑 (opens new window)
    #leetcode
    上次更新: 2021/10/30, 12:58:38
    LeetCode题解
    leetcode2 Add Two Numbers

    ← LeetCode题解 leetcode2 Add Two Numbers→

    最近更新
    01
    leetcode2 Add Two Numbers
    07-19
    02
    leetcode3 Longest Substring Without Repeating Characters
    07-19
    03
    leetcode5 Longest Palindromic Substring
    07-19
    更多文章>
    Theme by Vdoing | Copyright © 2020 大白的故事 | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式