Tang Space

Tang Space

[LeetCode] Problem 170: Two Sum III - Data structure design

Difficulty: Easy这道题就符合我之前的总结。无序且求一解,这时候hashmap有奇效。具体而言也分两种思路,一个是在add的时候用vector存起来,再在find的时候渐进式地插入hashmap,另一个是使用带计数的hashmap,比如unordered_map<int,int&

[LeetCode] Problem 1877: Minimize Maximum Pair Sum in Array

Difficulty: Medium这道题说到底不难,就是首尾相加就可以了。凭知觉做就可以。题目要求是最大数对和最小,也就是要求每一个数对的和分布均匀,很容易想到首尾相加。那么如何证明呢?假如有四个数,a>b>c>d。如果我们不收尾相加,即a+c和b+d。如果收尾相加,就是a+d和

[LeetCode] Problem 15 & 18: 3Sum & 4Sum

Difficulty: Medium这两道题其实是一个类型,都是TwoSum的变种。只要在外部循环里嵌套进TwoSum就好了。SumTwo 总结我们首先总结一下TwoSum的两种方法的优劣。两种方法:一种就是(对于有序元素)用双指针,对于重复元素可以快速跳过。另一种就是用hashmap(不要求有序)

[LeetCode] Problem 25: Reverse Nodes in k-Group

Difficulty: Hard这道题给 Hard 其实没必要,简单而言就是一个大的链表翻转套一个小的链表翻转,但在处理的时候要小心节点操作顺序。这段代码还可以处理得更简洁一点,比如加一个过头元,通过计数来判断是不是一组,等等class Solution {public: ListNode *re

[LeetCode] Problem 167: Two Sum II - Input array is sorted

Difficulty: Easy典型的双指针法Solution 1:class Solution {public: vector<int> twoSum(vector<int> &numbers, int target) { int i = 0, j = nu

[LeetCode] Problem 1: Two Sum

Difficulty: Easy暴力解法肯定不行。注意到两点:最后要返回在原始数组中的位置数字可以有重复,所以不可以简单用 map 或 set 全装进去Solution 1:先排序,然后转化为双指针,找到两个数字之后,再在原来的数组中找到它们的位置。复杂度O(nlogn)。class Solutio

[Golang] 在结构体中嵌入接口

在 go 语言的教程中,结构体嵌入结构体或者接口嵌入接口的说明是比较详细的,但对在结构体中嵌入接口的说明则比较少见。本文将对其本质进行探讨。在结构体声明中嵌入接口之后,再对这一接口进行赋值,即可使用这一特性。如果未赋值,则这一接口(相当于一变量)为 nil。对其调用则有两种方法,Struct.Int

[LeetCode] Problem 169: Majority Element

Difficulty: EasySolution 1:很容易想到的计数法class Solution {public: int majorityElement(vector<int>& nums) { unordered_map<int,int>