楼主: zhuli19901106
跳转到指定楼层
上一主题 下一主题
收起左侧

分享我的Lintcode题解,目前进度244/248

 
🔗
 楼主| zhuli19901106 2015-7-19 22:23:55 | 只看该作者
全局:
2 Sum
题意:给定一个未排序的数组,请找出是否存在a{i} + a{j} = target。返回i和j,要求i < j。
解法1:hashing显然是方便又高效。
代码1:
  1. // The O(n) solution by hashing
  2. #include <unordered_map>
  3. using namespace std;

  4. class Solution {
  5. public:
  6.     /*
  7.      * @param numbers : An array of Integer
  8.      * @param target : target = numbers[index1] + numbers[index2]
  9.      * @return : [index1+1, index2+1] (index1 < index2)
  10.      */
  11.     vector<int> twoSum(vector<int> &nums, int target) {
  12.         vector<int> &a = nums;
  13.         vector<int> ans;
  14.         int n = a.size();
  15.         unordered_map<int, int> um;
  16.         unordered_map<int, int>::iterator it;
  17.         
  18.         int i;
  19.         for (i = 0; i < n; ++i) {
  20.             it = um.find(target - a[i]);
  21.             if (it != um.end()) {
  22.                 ans.push_back(it->second + 1);
  23.                 ans.push_back(i + 1);
  24.                 break;
  25.             }
  26.             um[a[i]] = i;
  27.         }
  28.         return ans;
  29.     }
  30. };
复制代码
复杂度1:时间O(N),空间O(N)。

解法2:在有序数组中求two sum可以用O(N)时间,O(1)空间。但是这题需要先排序(于是会改变各元素的位置),然后还要返回元素在原数组中的位置。所以我不知道如何做到O(1)空间?
代码2:
  1. // O(n * log(n)) solution with O(n) space
  2. #include <algorithm>
  3. using namespace std;

  4. struct Term {
  5.     int val;
  6.     int i;
  7. };

  8. bool comp(const Term &x, const Term &y)
  9. {
  10.         return x.val < y.val;
  11. }

  12. class Solution {
  13. public:
  14.     /*
  15.      * @param numbers : An array of Integer
  16.      * @param target : target = numbers[index1] + numbers[index2]
  17.      * @return : [index1+1, index2+1] (index1 < index2)
  18.      */
  19.     vector<int> twoSum(vector<int> &nums, int target) {
  20.         vector<int> &a = nums;
  21.         int n = a.size();
  22.         vector<Term> v(n);
  23.         
  24.         int i, j;
  25.         for (i = 0; i < n; ++i) {
  26.             v[i].val = a[i];
  27.             v[i].i = i + 1;
  28.         }
  29.         sort(v.begin(), v.end(), comp);
  30.         
  31.         vector<int> ans(2);
  32.         i = 0;
  33.         j = n - 1;
  34.         while (i < j) {
  35.             if (v[i].val + v[j].val < target) {
  36.                 ++i;
  37.             } else if (v[i].val + v[j].val > target) {
  38.                 --j;
  39.             } else {
  40.                 ans[0] = v[i].i;
  41.                 ans[1] = v[j].i;
  42.                 if (ans[0] > ans[1]) {
  43.                     swap(ans[0], ans[1]);
  44.                 }
  45.                 break;
  46.             }
  47.         }
  48.         return ans;
  49.     }
  50. };
复制代码
复杂度2:时间O(N * log(N)),空间O(N)。
回复

使用道具 举报

🔗
 楼主| zhuli19901106 2015-7-19 22:33:20 | 只看该作者
全局:
本帖最后由 zhuli19901106 于 2015-7-19 22:49 编辑

3 Sum
题意:给定一个未排序的数组,求所有加起来等于target的a{i} + a{j} + a{k}组合。要求不能重复,而且三元组必须是升序的。
解法1:首先排序,然后逐个元素求two sum。对于判重,我用的是比较偷懒的算签名查哈希的方法。实际上你用任何效率不算低的签名算法都可以,只要别发生碰撞就行了。
代码1:
  1. #include <algorithm>
  2. #include <string>
  3. #include <unordered_set>
  4. using namespace std;

  5. class Solution {
  6. public:   
  7.     /**
  8.      * @param numbers : Give an array numbers of n integer
  9.      * @return : Find all unique triplets in the array which gives the sum of zero.
  10.      */
  11.     vector<vector<int> > threeSum(vector<int> &nums) {
  12.         vector<int> &a = nums;
  13.         vector<int> v(3);
  14.         int n = a.size();
  15.         
  16.         ans.clear();
  17.         int i, j, k;
  18.         sort(a.begin(), a.end());
  19.         for (i = 0; i < n - 2; ++i) {
  20.             j = i + 1;
  21.             k = n - 1;
  22.             while (j < k) {
  23.                 if (a[i] + a[j] + a[k] < 0) {
  24.                     ++j;
  25.                 } else if (a[i] + a[j] + a[k] > 0) {
  26.                     --k;
  27.                 } else {
  28.                     string s = calcSign(a[i], a[j], a[k]);
  29.                     if (us.find(s) == us.end()) {
  30.                         v[0] = a[i];
  31.                         v[1] = a[j];
  32.                         v[2] = a[k];
  33.                         ans.push_back(v);
  34.                         us.insert(s);
  35.                     }
  36.                     ++j;
  37.                 }
  38.             }
  39.         }
  40.         us.clear();
  41.         return ans;
  42.     }
  43. private:
  44.     unordered_set<string> us;
  45.     vector<vector<int> > ans;
  46.    
  47.     string calcSign(int a, int b, int c) {
  48.         return to_string(a) + to_string(b) + to_string(c);
  49.     }
  50. };
复制代码
复杂度1:时间O(N ^ 2),空间理论上是O(N ^ 3),因为解的个数是O(N ^ 3)规模的。

解法2:再来个不用哈希的,刚写好。
代码2:
  1. // O(1) space
  2. #include <algorithm>
  3. using namespace std;

  4. class Solution {
  5. public:   
  6.     /**
  7.      * @param numbers : Give an array numbers of n integer
  8.      * @return : Find all unique triplets in the array which gives the sum of zero.
  9.      */
  10.     vector<vector<int> > threeSum(vector<int> &nums) {
  11.         vector<int> &a = nums;
  12.         vector<int> v(3);
  13.         int n = a.size();
  14.         
  15.         ans.clear();
  16.         int i, j, k;
  17.         sort(a.begin(), a.end());
  18.         int val;
  19.         i = 0;
  20.         while (i < n) {
  21.             j = i + 1;
  22.             k = n - 1;
  23.             while (j < k) {
  24.                 if (a[i] + a[j] + a[k] < 0) {
  25.                     ++j;
  26.                 } else if (a[i] + a[j] + a[k] > 0) {
  27.                     --k;
  28.                 } else {
  29.                     v[0] = a[i];
  30.                     v[1] = a[j];
  31.                     v[2] = a[k];
  32.                     ans.push_back(v);
  33.                     val = j;
  34.                     j = nextPos(a, k, j);
  35.                 }
  36.             }
  37.             i = nextPos(a, n, i);
  38.         }
  39.         return ans;
  40.     }
  41. private:
  42.     vector<vector<int> > ans;
  43.    
  44.     int nextPos(vector<int> &a, int n, int i) {
  45.         int val = a[i];
  46.         while (i < n && a[i] == val) {
  47.             ++i;
  48.         }
  49.         return i;
  50.     }
  51. };
复制代码
复杂度2:时间O(N),空间O(1)。其实空间也不算严格O(1),因为我不会刻意为了追求O(1)空间而把本来可以复用的代码重复贴几遍。

回复

使用道具 举报

🔗
 楼主| zhuli19901106 2015-7-19 23:02:52 | 只看该作者
全局:
本帖最后由 zhuli19901106 于 2015-7-19 23:13 编辑

4 Sum
题意:给定一个未排序数组,求其中加起来等于target的组合a + b + c + d。
解法1:两个维度用遍历解决,另两个维度使用two sum的解法。查重依然是偷懒的签名+哈希。话说我要是用位运算配合加减法来算签名,应该速度会快得多吧。
代码1:
  1. #include <algorithm>
  2. #include <string>
  3. #include <unordered_set>
  4. using namespace std;

  5. class Solution {
  6. public:
  7.     /**
  8.      * @param numbers: Give an array numbersbers of n integer
  9.      * @param target: you need to find four elements that's sum of target
  10.      * @return: Find all unique quadruplets in the array which gives the sum of
  11.      *          zero.
  12.      */
  13.     vector<vector<int> > fourSum(vector<int> nums, int target) {
  14.         ans.clear();
  15.         vector<int> &a = nums;
  16.         vector<int> v(4);
  17.         int n = nums.size();
  18.         int i1, i2, i3, i4;
  19.         
  20.         sort(a.begin(), a.end());
  21.         for (i1 = 0; i1 < n - 3; ++i1) {
  22.             for (i4 = i1 + 3; i4 < n; ++i4) {
  23.                 i2 = i1 + 1;
  24.                 i3 = i4 - 1;
  25.                 while (i2 < i3) {
  26.                     if (a[i1] + a[i2] + a[i3] + a[i4] < target) {
  27.                         ++i2;
  28.                     } else if (a[i1] + a[i2] + a[i3] + a[i4] > target) {
  29.                         --i3;
  30.                     } else {
  31.                         v[0] = a[i1];
  32.                         v[1] = a[i2];
  33.                         v[2] = a[i3];
  34.                         v[3] = a[i4];
  35.                         string s = calcSign(v);
  36.                         if (us.find(s) == us.end()) {
  37.                             ans.push_back(v);
  38.                             us.insert(s);
  39.                         }
  40.                         ++i2;
  41.                     }
  42.                 }
  43.             }
  44.         }
  45.         us.clear();
  46.         return ans;
  47.     }
  48. private:
  49.     unordered_set<string> us;
  50.     vector<vector<int> > ans;
  51.    
  52.     string calcSign(vector<int> &v) {
  53.         int n = v.size();
  54.         string s = "";
  55.         int i;
  56.         for (i = 0; i < n; ++i) {
  57.             s += to_string(v[i]);
  58.         }
  59.         return s;
  60.     }
  61. };
复制代码
复杂度1:时间O(N ^ 3),空间O(N ^ 4)。

解法2:依然是用跳过相等元素的方法来去重。
代码2:
  1. // Without hashing
  2. #include <algorithm>
  3. using namespace std;

  4. class Solution {
  5. public:
  6.     /**
  7.      * @param numbers: Give an array numbersbers of n integer
  8.      * @param target: you need to find four elements that's sum of target
  9.      * @return: Find all unique quadruplets in the array which gives the sum of
  10.      *          zero.
  11.      */
  12.     vector<vector<int> > fourSum(vector<int> nums, int target) {
  13.         ans.clear();
  14.         vector<int> &a = nums;
  15.         vector<int> v(4);
  16.         int n = nums.size();
  17.         int i1, i2, i3, i4;
  18.         
  19.         sort(a.begin(), a.end());
  20.         i1 = 0;
  21.         while(i1 < n) {
  22.             i4 = n - 1;
  23.             while (i4 > i1) {
  24.                 i2 = i1 + 1;
  25.                 i3 = i4 - 1;
  26.                 while (i2 < i3) {
  27.                     if (a[i1] + a[i2] + a[i3] + a[i4] < target) {
  28.                         ++i2;
  29.                     } else if (a[i1] + a[i2] + a[i3] + a[i4] > target) {
  30.                         --i3;
  31.                     } else {
  32.                         v[0] = a[i1];
  33.                         v[1] = a[i2];
  34.                         v[2] = a[i3];
  35.                         v[3] = a[i4];
  36.                         ans.push_back(v);
  37.                         i2 = nextPos(a, n, i2);
  38.                     }
  39.                 }
  40.                 i4 = lastPos(a, i1, i4);
  41.             }
  42.             i1 = nextPos(a, n, i1);
  43.         }
  44.         return ans;
  45.     }
  46. private:
  47.     vector<vector<int> > ans;
  48.    
  49.     int lastPos(vector<int> &a, int n, int i) {
  50.         int val = a[i];
  51.         while (i > n && a[i] == val) {
  52.             --i;
  53.         }
  54.         return i;
  55.     }
  56.    
  57.     int nextPos(vector<int> &a, int n, int i) {
  58.         int val = a[i];
  59.         while (i < n && a[i] == val) {
  60.             ++i;
  61.         }
  62.         return i;
  63.     }
  64. };
复制代码
复杂度2:时间O(N ^ 3),空间O(1)。

回复

使用道具 举报

🔗
 楼主| zhuli19901106 2015-7-19 23:18:50 | 只看该作者
全局:
3 Sum Closest
题意:给定一个未排序的数组,找出加起来和target最接近的a + b + c。答案保证唯一。
解法:第一个维度用遍历的,后两个维度使用two sum的做法,不过这次要随时更新答案。如果找到等于target的,就可以直接退出了。
代码:
  1. #include <algorithm>
  2. using namespace std;

  3. class Solution {
  4. public:   
  5.     /**
  6.      * @param numbers: Give an array numbers of n integer
  7.      * @param target: An integer
  8.      * @return: return the sum of the three integers, the sum closest target.
  9.      */
  10.     int threeSumClosest(vector<int> nums, int target) {
  11.         vector<int> &a = nums;
  12.         int n = a.size();
  13.         int i, j, k;
  14.         int ans;
  15.         
  16.         sort(a.begin(), a.end());
  17.         ans = a[0] + a[1] + a[2];
  18.         int s;
  19.         for (i = 0; i < n - 2; ++i) {
  20.             j = i + 1;
  21.             k = n - 1;
  22.             while (j < k) {
  23.                 s = a[i] + a[j] + a[k];
  24.                 if (s < target) {
  25.                     if (abs(s - target) < abs(ans - target)) {
  26.                         ans = s;
  27.                     }
  28.                     ++j;
  29.                 } else if (s > target) {
  30.                     if (abs(s - target) < abs(ans - target)) {
  31.                         ans = s;
  32.                     }
  33.                     --k;
  34.                 } else {
  35.                     return target;
  36.                 }
  37.             }
  38.         }
  39.         return ans;
  40.     }
  41. private:
  42.     int abs(int x) {
  43.         return x >= 0 ? x : -x;
  44.     }
  45. };
复制代码
复杂度:时间O(N ^ 2),空间O(1)。
回复

使用道具 举报

🔗
 楼主| zhuli19901106 2015-7-19 23:26:19 | 只看该作者
全局:
Search Insert Position
题意:在有序数组中插入一个元素,保证依然有序。求插入的位置。
解法1:二分
代码1:
  1. class Solution {
  2.     /**
  3.      * param A : an integer sorted array
  4.      * param target :  an integer to be inserted
  5.      * return : an integer
  6.      */
  7. public:
  8.     int searchInsert(vector<int> &A, int target) {
  9.         int n = A.size();
  10.         if (n == 0 || target > A[n - 1]) {
  11.             return n;
  12.         }
  13.         if (target <= A[0]) {
  14.             return 0;
  15.         }
  16.         int ll, rr, mm;
  17.         
  18.         ll = 0;
  19.         rr = n - 1;
  20.         while (rr - ll > 1) {
  21.             mm = (ll + rr) / 2;
  22.             if (A[mm] < target) {
  23.                 ll = mm;
  24.             } else {
  25.                 rr = mm;
  26.             }
  27.         }
  28.         return rr;
  29.     }
  30. };
复制代码
复杂度1:时间O(log(N)),空间O(1)。

解法2:lower_bound。
代码2:
  1. #include <algorithm>
  2. using namespace std;

  3. class Solution {
  4.     /**
  5.      * param A : an integer sorted array
  6.      * param target :  an integer to be inserted
  7.      * return : an integer
  8.      */
  9. public:
  10.     int searchInsert(vector<int> &A, int target) {
  11.         return lower_bound(A.begin(), A.end(), target) - A.begin();
  12.     }
  13. };
复制代码
复杂度2:一样
回复

使用道具 举报

🔗
 楼主| zhuli19901106 2015-7-19 23:31:08 | 只看该作者
全局:
Search for a Range
题意:给定一个有序数组和target,求数组中等于target的元素的起始位置。
解法:二分,用lower_bound和upper_bound。
代码:
  1. class Solution {
  2.     /**
  3.      *@param A : an integer sorted array
  4.      *@param target :  an integer to be inserted
  5.      *return : a list of length 2, [index1, index2]
  6.      */
  7. public:
  8.     vector<int> searchRange(vector<int> &A, int target) {
  9.         vector<int> ans(2);
  10.         int n = A.size();
  11.         if (n == 0) {
  12.             ans[0] = ans[1] = -1;
  13.             return ans;
  14.         }
  15.         ans[0] = lower_bound(A.begin(), A.end(), target) - A.begin();
  16.         if (A[ans[0]] != target) {
  17.             ans[0] = ans[1] = -1;
  18.             return ans;
  19.         }
  20.         ans[1] = upper_bound(A.begin(), A.end(), target) - A.begin() - 1;
  21.         return ans;
  22.     }
  23. };
复制代码
复杂度:时间O(log(N)),空间O(1)。
回复

使用道具 举报

🔗
 楼主| zhuli19901106 2015-7-19 23:43:32 | 只看该作者
全局:
本帖最后由 zhuli19901106 于 2015-7-20 00:25 编辑

Search in Rotated Sorted Array
题意:在一个旋转过的有序数组中查找一个值,不含重复元素。
解法1:先找出旋转的位置,然后再二分查找。
代码1:
  1. class Solution {
  2.     /**
  3.      * param A : an integer ratated sorted array
  4.      * param target :  an integer to be searched
  5.      * return : an integer
  6.      */
  7. public:
  8.     int search(vector<int> &A, int target) {
  9.         int n = A.size();
  10.         if (n == 0) {
  11.             return -1;
  12.         }
  13.         
  14.         int ll, rr, mm;
  15.         ll = 0;
  16.         rr = n - 1;
  17.         int k = findRotatePos(A);
  18.         while (ll <= rr) {
  19.             mm = (ll + rr) / 2;
  20.             if (target < A[(mm + k) % n]) {
  21.                 rr = mm - 1;
  22.             } else if (target > A[(mm + k) % n]) {
  23.                 ll = mm + 1;
  24.             } else {
  25.                 return (mm + k) % n;
  26.             }
  27.         }
  28.         return -1;
  29.     }
  30. private:
  31.     int findRotatePos(vector<int> &A) {
  32.         int ll, rr, mm;
  33.         int n = A.size();
  34.         
  35.         if (n <= 1) {
  36.             return 0;
  37.         }
  38.         
  39.         ll = 0;
  40.         rr = n - 1;
  41.         while (rr - ll > 1) {
  42.             if (A[ll] < A[rr]) {
  43.                 break;
  44.             }
  45.             if (A[ll] == A[rr]) {
  46.                 --rr;
  47.                 continue;
  48.             }
  49.             mm = (ll + rr) / 2;
  50.             if (A[mm] >= A[ll]) {
  51.                 ll = mm;
  52.             } else {
  53.                 rr = mm;
  54.             }
  55.         }
  56.         return A[ll] < A[rr] ? ll : rr;
  57.     }
  58. };
复制代码
复杂度1:时间O(log(N)),空间O(1)。

解法2:其实可以直接二分,不用求出偏移量。这个代码更简洁些。
代码2:
  1. class Solution {
  2.     /**
  3.      * param A : an integer ratated sorted array
  4.      * param target :  an integer to be searched
  5.      * return : an integer
  6.      */
  7. public:
  8.     int search(vector<int> &A, int target) {
  9.         int n = A.size();
  10.         int ll, rr, mm;
  11.         
  12.         ll = 0;
  13.         rr = n - 1;
  14.         while (ll <= rr) {
  15.             mm = ll + (rr - ll) / 2;
  16.             if (A[mm] == target) {
  17.                 return mm;
  18.             }
  19.             if (A[ll] < A[mm]) {
  20.                 if (target >= A[ll] && target < A[mm]) {
  21.                     rr = mm - 1;
  22.                 } else {
  23.                     ll = mm + 1;
  24.                 }
  25.             } else if (A[mm] < A[rr]) {
  26.                 if (target > A[mm] && target <= A[rr]) {
  27.                     ll = mm + 1;
  28.                 } else {
  29.                     rr = mm - 1;
  30.                 }
  31.             } else {
  32.                 // In case there're duplicates
  33.                 ++ll;
  34.             }
  35.         }
  36.         return -1;
  37.     }
  38. };
复制代码
复杂度2:一样。

回复

使用道具 举报

🔗
 楼主| zhuli19901106 2015-7-20 00:45:40 | 只看该作者
全局:
Search in Rotated Sorted Array II
题意:在一个旋转过的有序数组中,查找一个值是否存在,可以有重复元素。
解法1:找出旋转的位置,然后二分搜索。
代码1:
  1. class Solution {
  2.     /**
  3.      * param A : an integer ratated sorted array and duplicates are allowed
  4.      * param target :  an integer to be search
  5.      * return : a boolean
  6.      */
  7. public:
  8.     bool search(vector<int> &A, int target) {
  9.         int n = A.size();
  10.         if (n == 0) {
  11.             return false;
  12.         }
  13.         
  14.         int ll, rr, mm;
  15.         ll = 0;
  16.         rr = n - 1;
  17.         int k = findRotatePos(A);
  18.         while (ll <= rr) {
  19.             mm = (ll + rr) / 2;
  20.             if (target < A[(mm + k) % n]) {
  21.                 rr = mm - 1;
  22.             } else if (target > A[(mm + k) % n]) {
  23.                 ll = mm + 1;
  24.             } else {
  25.                 return true;
  26.             }
  27.         }
  28.         return false;
  29.     }
  30. private:
  31.     int findRotatePos(vector<int> &A) {
  32.         int ll, rr, mm;
  33.         int n = A.size();
  34.         
  35.         if (n <= 1) {
  36.             return 0;
  37.         }
  38.         
  39.         ll = 0;
  40.         rr = n - 1;
  41.         while (rr - ll > 1) {
  42.             if (A[ll] < A[rr]) {
  43.                 break;
  44.             }
  45.             if (A[ll] == A[rr]) {
  46.                 --rr;
  47.                 continue;
  48.             }
  49.             mm = (ll + rr) / 2;
  50.             if (A[mm] >= A[ll]) {
  51.                 ll = mm;
  52.             } else {
  53.                 rr = mm;
  54.             }
  55.         }
  56.         return A[ll] < A[rr] ? ll : rr;
  57.     }
  58. };
复制代码
复杂度1:时间O(log(N)),空间O(1)。

解法2:直接二分搜索,代码写得不太简洁,欠缺美感。
代码2:
  1. class Solution {
  2.     /**
  3.      * param A : an integer ratated sorted array
  4.      * param target :  an integer to be searched
  5.      * return : an integer
  6.      */
  7. public:
  8.     bool search(vector<int> &A, int target) {
  9.         int n = A.size();
  10.         int ll, rr, mm;
  11.         
  12.         ll = 0;
  13.         rr = n - 1;
  14.         while (ll <= rr) {
  15.             if (A[ll] == target) {
  16.                 return true;
  17.             }
  18.             if (A[ll] == A[rr]) {
  19.                 ++ll;
  20.                 continue;
  21.             }
  22.             mm = ll + (rr - ll) / 2;
  23.             if (A[mm] == target) {
  24.                 return true;
  25.             }
  26.             if (A[ll] < A[mm]) {
  27.                 if (target >= A[ll] && target < A[mm]) {
  28.                     rr = mm - 1;
  29.                 } else {
  30.                     ll = mm + 1;
  31.                 }
  32.             } else if (A[mm] < A[rr]) {
  33.                 if (target > A[mm] && target <= A[rr]) {
  34.                     ll = mm + 1;
  35.                 } else {
  36.                     rr = mm - 1;
  37.                 }
  38.             } else {
  39.                 // In case there're duplicates
  40.                 ++ll;
  41.             }
  42.         }
  43.         return false;
  44.     }
  45. };
复制代码
复杂度2:一样。
回复

使用道具 举报

🔗
 楼主| zhuli19901106 2015-7-20 00:59:28 | 只看该作者
全局:
本帖最后由 zhuli19901106 于 2015-7-20 01:07 编辑

没想到刷的时候感觉挺流畅的,现在回过头看自己刚写的代码,就是各种漏洞,各种不全面。

之后又翻了翻自己一年前刷leetcode时写的代码,简直是烂。。。

然后又翻了翻自己几年前ZOJ、POJ刷的题,那都不能叫代码了~

于是从好的一面说:我真是进步了。
从坏的一面说:我是有多菜,进步到现在才这样。。。
所以我明白了leetcode为什么要多刷两遍了。因为第一遍的时候,还不懂这东西该怎么玩,可能AC了就完事,光刷成就感了,没有以全面思考为目的。
回复

使用道具 举报

🔗
 楼主| zhuli19901106 2015-7-20 01:02:13 | 只看该作者
全局:
今天先到这儿,累了~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表