Posts

Showing posts with the label 基本知识

AM 384. Longest Substring Without Repeating Characters 和 Amazon OA 763. Partition Labels有些相似

class Solution { public : /** * @param s: a string * @return: an integer */ int lengthOfLongestSubstring ( string &s) { // write your code here //思路最重要。之前做出了,现在做写出了bug。 //因为之前做时,把握了整体思路。就是一边遍历时,一边确认左边有效边界。 // 有这个思路做指导 就不会有bug。思路!! int res = 1 ; unordered_map < char , int > mp; const int size = s.size(); if (size < 2 ){ return size; } int left = -1 ; for ( int i = 0 ; i < size; i++){ if (mp.find(s[i]) != mp.end()){ left = max(left, mp[s[i]]); mp[s[i]] = i; } else { mp[s[i]] = i; } res = max(res, i - left); } return res; } }; 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 Close

C++ STL容器时间复杂度下的最佳选择

https://blog.csdn.net/CSND_Ayo/article/details/72574924

priority queue(heap) 原理和实现

https://blog.csdn.net/luomingjun12315/article/details/47376359 1、什么是优先队列        能够完成下列两种操作的数据结构,我们便称之为优先队列。        ①插入一个数值    ②取出最大(或者最小)的数值(获取数值,并且删除)。        从严格意义上来说优先队列,并不是队列,因为它并不遵循队列的FIFO(先进先出的原则)。 2、实现优先队列       我们可以使用一种叫做“堆(heap)”的数据结构来实现优先队列。堆有一个重要的性质就是儿子的值一定不小于父亲。除此之外,树的节点是从上到下、从左到右的顺序紧凑排列的。堆就是如下图的二叉树, 不知道是什么是二叉树的同学请移步:传送门         我们向堆插入数值时,首先我们先在堆的尾部插入该值,然后再根据大小关系不断的提升它的位置        删除堆的最小值时,首先把堆的最后一个节点复制到根节点上,然后删除最后一个节点。之后我们根据大小关系不断和交换位置,使其满足堆的定义。         堆的这两种操作所用的时间,和树的深度成正比。我们不难发现堆的时间复杂度为O(log n).        现在我们就可以来实现堆了,为了简单一些我们使用数组来实现: int heap[MAXN], size_heap = 0; //插入数值 void push(int x){     int i = size_heap++;     while(i > 0){         //父节点的编号         int p = (i-1)/2;         //如果大小关系满足,则退出循环 ...