数据结构与算法
chaonan_shen
这个作者很懒,什么都没留下…
展开
-
数据结构与算法python语言实现-单链表实现
使用python实现一个简单单链表,头/尾添加/删除元素,查找满足一定条件(任意定义的条件)的元素,遍历对每个元素实行一种操作(任意定义的操作),迭代器一样的访问链表##代码部分## #自定义一种错误类型 class LinkedListUnderflow(ValueError): pass #定义链表节点类 class LNode: def __init__(self, el...原创 2018-04-03 14:02:12 · 1673 阅读 · 1 评论 -
LeetCode141. Linked List Cycle (two pointers)
这道题用two pointers的方法也很巧妙,用一个slow pointer一次移动一步,一个fast pointer一次移动两步,如果有环,那么最终fast会和slow会和(用个简单例子比划下),如果没会和前fast或fast->next就到达了终点NULL,那么必是无环链表。这样能让空间复杂度是O(1) naive的想法是用hash table储存所有已经访问过的节点 b...原创 2019-04-11 11:53:43 · 115 阅读 · 0 评论 -
LeetCode283. Move Zeroes (two pointers)
如果不看tag肯定想不到可以用two pointers很快很巧妙的做出来! 最开始的navie想法 void moveZeroes(vector<int>& nums) { //delte all zeroes and then add back at the end int cnt = 0; for (auto it = nums.begin()...原创 2019-04-10 22:05:55 · 126 阅读 · 0 评论 -
LeetCode217. Contains Duplicate
我的办法将元素不断插入一个集合,对新元素如果集合中已存在,就返回true。(最初naive想法遍历一遍元素,对每个新元素看看该元素前面部分序列是否已存在该元素,但这样太慢了) bool containsDuplicate(vector<int>& nums) { if(nums.size() <= 1) retu...原创 2018-12-03 20:53:40 · 118 阅读 · 0 评论 -
LeetCode169. Majority Element
开始更多借助STL的力量。 int majorityElement(vector<int>& nums) { vector<int> elem; vector<int> time; //elem存储元素值,time在elem相同下标位置处存储出现次数 for (auto iter = nums...原创 2018-12-03 20:15:29 · 101 阅读 · 0 评论 -
LeetCode804. Unique Morse Code Words
我的想法是建立一个从单个字符到摩尔码的map,这样对所有words里单词直接映射得到相应摩尔码,再全部插入一个set中就自动去重了。(注意char到string要经过转换) int uniqueMorseRepresentations(vector<string>& words) { vector<string> code = ...原创 2018-12-06 11:44:02 · 125 阅读 · 0 评论 -
LeetCode485. Max Consecutive Ones
遍历一遍vector,max_seq 记录历史最长全1子串,count记录新全1子串 int findMaxConsecutiveOnes(vector<int>& nums) { int max_seq = 0; int count = 0; for (int i = 0; i < nums.siz...原创 2018-12-03 15:30:52 · 143 阅读 · 0 评论 -
LeetCode896. Monotonic Array
我直接写了一个判断是否单调不增或单调不减的函数,然后直接调用。 bool isIncreasing(vector<int>& A) { for(int i = 0; i < A.size()-1; ++i) if(A[i] > A[i+1]) return false; ...原创 2018-12-03 14:54:12 · 150 阅读 · 0 评论 -
LeetCode566. Reshape the Matrix
如果要返回的matrix元素个数与原先不同,直接返回。 否则遍历一遍原matrix, 重新组装成一个新的行列数的matrix vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) { int pr = nums...原创 2018-12-03 14:28:23 · 171 阅读 · 0 评论 -
LeetCode766. Toeplitz Matrix
思路比较简单,从第二行第二列起开始遍历, 如果matrix[row][col] != matrix[row - 1][col - 1](也即当前元素不等于起对角线上元素),就不是ToeplitzMatrix bool isToeplitzMatrix(vector<vector<int>>& matrix) { int max_...原创 2018-12-03 13:57:11 · 158 阅读 · 0 评论 -
LeetCode832. Flipping an Image
题意简单,翻转图像,写个翻转每一行(一个vector)的函数,然后Image每一行调用即可。 void flipAndInvertRow(vector<int>& vec) { size_t size = vec.size(); for (size_t i = 0; i<int(size / 2); ++i) ...原创 2018-12-02 00:55:57 · 132 阅读 · 0 评论 -
LeetCode922. Sort Array By Parity II
这题我简单的借鉴905. Sort Array By Parity 的想法那两个vector临时存储even和odd再合并,可惜这样就慢了,88ms(43%) vector<int> sortArrayByParityII(vector<int>& A) { size_t size = A.size(); vector&...原创 2018-12-02 00:35:12 · 131 阅读 · 0 评论 -
LeetCode905. Sort Array By Parity
我的解法,不用额外空间,p从头开始跳过偶数捕捉奇数,q从尾开始跳过奇数捕捉偶数,捕捉到就交换,知道p<q不再满足。 vector<int> sortArrayByParity(vector<int>& A) { int p = 0; int q = A.size() - 1; while (true...原创 2018-12-02 00:15:43 · 120 阅读 · 0 评论 -
LeetCode867. Transpose Matrix
翻转矩阵,遍历一遍原矩阵,然后行列顺序交换着将元素插入一个新矩阵。 class Solution { public: vector<vector<int>> transpose(vector<vector<int>>& A) { int maxrow = A.size(); int maxcol =...原创 2018-12-02 10:26:13 · 108 阅读 · 0 评论 -
LeetCode561. Array Partition I
我的做法是先排序,然后取偶数位之和。因此感觉大部分都是在写归并排序。 typedef size_t Rank; void merge(vector<int>& vec, Rank first, Rank mid, Rank last) //vec[first, mid), vec[mid, last)都已拍好序,归并 { vector<int> A...原创 2018-12-02 09:51:37 · 105 阅读 · 0 评论 -
763. Partition Labels(Greedy, two pointers)
这题用贪心很完美!非常简洁清晰 unordered_map<char, int> mp; vector<int> partitionLabels(string S) { vector<int> ret; //建立map,存放每个字符最后一次出现位置 for(int i=0; i<S.siz...原创 2019-04-11 16:52:25 · 124 阅读 · 0 评论