2022-08-11 真实题目

  1. 无重复字符的最长子串](https://leetcode.cn/problems/longest-substring-without-repeating-characters/)
    给定一个字符串 s ,请你找出其中不含有重复字符的 **最长子串 **的长度。

  2. hash set space O(n), time O(|n|) n string len, |n| char set

  3. dynamic time O(n2) , space O(n)

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        if (s.length() <= 1) {
            return s.length();
        }
        vector<int> dp(s.length(), 0);
        dp[0] = 1;
        int imx = 0;
        for (int i = 1; i < s.length(); i++) {
            int j = i - 1;
            while (j >= 0 && s[j] != s[i]) {
                j--;
            }
            dp[i] = dp[i - 1] < i - j ? dp[i - 1] + 1 : i - j;
            imx = max(imx, dp[i]);
        }
        return imx;
    }
};
  1. 给两组数据,order = {time stamp, customer id, order id}, sale ad event = {time stamp, customer id, event id}, 给每一个order找之前最近的sale ad event or null if not found.
    例如 order = {100, 1, 20}, sale event ad = {{90, 1, 33}, {110, 1, 45}}, 那么合适的sale ad event 是{90, 1, 33}
    return type需要自己定义,需要同时return order and its matching sale event ad.

sort -> binary search

struct Node{
     long long timeStam;
     long long id;
     long long orderid;
      operator < (const Node &a) {
            timeStam < a.timeStam;
       }
      operator > (const Node &a) {
            timeStam > a.timeStam;
       }
};
sort(nodes.begin(), nodes.end());

bs(node, 0, nodes.size(), target);

  1. LRU 缓存
typedef struct NodeSt {
    struct NodeSt* pre;
    struct NodeSt* next;
    int key;
    int val;
    NodeSt(int key, int val):pre(NULL), next(NULL) {
        this->key = key;
        this->val = val;
    }
}Node;

LRUCache(int capacity): size(0)
int get(int key)
void put(int key, int value)
void moveToTail(Node* n)
void pushToTail(Node* n)
void removeFromHead()
private:
    unordered_map<int, Node*> table;
    Node *head;
    Node *tail;
    int size;
    int capacity;

  1. 1487 保证文件名唯一

给你一个长度为 n 的字符串数组 names 。你将会在文件系统中创建 n 个文件夹:在第 i 分钟,新建名为 names[i] 的文件夹。

由于两个文件 不能 共享相同的文件名,因此如果新建文件夹使用的文件名已经被占用,系统会以 (k) 的形式为新文件夹的文件名添加后缀,其中 k 是能保证文件名唯一的 最小正整数 。

返回长度为 n 的字符串数组,其中 ans[i] 是创建第 i 个文件夹时系统分配给该文件夹的实际名称。

unorder_map<string, sub> mp;

5pre. 单词拆分 O(n2) space O(n)

class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict) {
        unordered_set<string> mp;
        for (int i = 0; i < wordDict.size(); i++) {
            mp.insert(wordDict[i]);
        }
        vector<int> dp(s.size() + 1, 0);
        dp[0] = 1;
        for (int j = 0; j <= s.size(); j++) {
            for (int i = 0; i < j; i++) {
                if (!dp[i]) {
                    continue;
                }
                string str = s.substr(i, j - i);
                dp[j] = dp[i] & (mp.count(str));
                if (dp[j]) {
                    break;
                }
            }
        }
        return dp[s.size()];
    }
};
  1. 472 连接词
    给你一个 不含重复 单词的字符串数组 words ,请你找出并返回 words 中的所有 连接词 。
    pre的进阶, 遍历一遍数组。。
class Solution {
public:
    bool check(string s , unordered_set<string> &mp)
    {
        mp.erase(s);
        vector<int> dp(s.size() + 1, 0);
        dp[0] = 1;
        for (int j = 1; j <= s.size(); j++) {
            for (int i = 0; i < j; i++) {
                if (dp[i]) {
                    string str = s.substr(i, j - i);
                    if (mp.count(str)) {
                        dp[j] = true;
                        break;
                    }
                }
            }
        }
        mp.insert(s);
        return dp[s.size()];
    }
    vector<string> findAllConcatenatedWordsInADict(vector<string>& words) {
        vector<string> ret;
        unordered_set<string> mp;
        for (string s : words) {
            mp.insert(s);
        }
        for (string s : words) {
            if (check(s, mp)) {
                ret.push_back(s);
            }
        }
        return ret;
    }
};
  1. 295 中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。
class MedianFinder {
public:
    MedianFinder() {

    }
    
    void addNum(int num) {
        if (maxheap.empty()) {
            maxheap.push(num);
            return;
        }
        int k = maxheap.top();
        if (num <= k) {
            maxheap.push(num);
        } else {
            minheap.push(num);
        }
        // adjust
        int a = minheap.size();
        int b = maxheap.size();
        while (abs(a - b) > 1) {
            if (minheap.empty()) {
                int t2 = maxheap.top();
                maxheap.pop();
                minheap.push(t2);
                a = minheap.size();
                b = maxheap.size();
                continue;
            }
            int t1 = minheap.top();
            int t2 = maxheap.top();
            if (a > b) {
                minheap.pop();
                maxheap.push(t1);
            } else {
                maxheap.pop();
                minheap.push(t2);
            }
            a = minheap.size();
            b = maxheap.size();
        }
        
    }
    
    double findMedian() {
        if (minheap.size() == maxheap.size()) {
            int t1 = minheap.top();
            int t2 = maxheap.top();
            return (double)(t1 + t2) / 2;
        }
        if (minheap.size() > maxheap.size()) {
            return minheap.top();
        }
        return maxheap.top();
    }
private:
    priority_queue<int, vector<int>, greater<int>> minheap;
    priority_queue<int> maxheap;
};

罗马数字,注意时间,空间复杂度都是O(1)

class Solution {
public:
    string intToRoman(int num) {
        string ret;
        vector<int> sub = {
            1,4,5,9,10,40,50,90,100,400, 500, 900, 1000
        };
        map<int,string> mp = {
            pair(1, "I"),
            pair(4, "IV"),
            pair(5, "V"),
            pair(9, "IX"),
            pair(10, "X"),
            pair(40, "XL"),
            pair(50, "L"),
            pair(90, "XC"),
            pair(100, "C"),
            pair(400, "CD"),
            pair(500, "D"),
            pair(900, "CM"),
            pair(1000, "M")
            };
        // O(1)
            for (int i = sub.size() - 1; i >= 0; i--) {
                while (num >= sub[i]) {
                    num -= sub[i];
                    ret += mp[sub[i]];
                }
                if (num == 0) {
                    break;
                }
            }
        return ret;

    }
};

45 跳跃游戏II greed(贪心)

    int jump(vector<int>& nums)
    {
        int imx = 0;
        int end = 0;
        int ans = 0;
        int j = 0;
        vector<int> pos;
        for (int i = 0; i < nums.size() - 1; i++) {
            if (imx < i + nums[i]) {
                j = i;
                imx = i + nums[i];
            }
            if (i == end) {
                end = imx;
                imx = 0;
                ans++;
                pos.push_back(nums[j]);
            }
        }
        pos.push_back(nums[nums.size() - 1]);
        return ans;
    }

994 腐烂的橘子

class Solution {
public:
    int orangesRotting(vector<vector<int>>& grid) {
        vector<pair<int,int>> dir = {
            {1,0},
            {0,1},
            {-1, 0},
            {0, -1}
        };
        // bfs
        // init
        queue<pair<int,int>> que;
        int m = grid.size();
        int n = grid[0].size();
        int miu = 0;
        int cnt = 0;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (grid[i][j] == 2) {
                    que.push(pair(i, j));
                } else if (grid[i][j] == 1) {
                    cnt++;
                }
            }
        }
        // bfs

        while (cnt && !que.empty()) {
            int len = que.size();
            miu++;
            for (int i = 0; i < len; i++) {
                auto bad = que.front();
                
                // search in 4 dir & push new bad
                for (int d = 0; d < 4; d++) {
                    int x = bad.first + dir[d].first;
                    int y = bad.second + dir[d].second;
                    if (!(x < m && y < n && x >= 0 && y >= 0)) {
                        continue;
                    }
                    if (grid[x][y] == 1) {
                        grid[x][y] = 2;
                        cnt--;
                        que.push(pair(x, y));
                    }
                }
                que.pop();
            }
        }

        // check all grid, and no == 1, return min, else return -1
        if (cnt > 0) {
            return -1;
        }
        // first que element is aready bad.
        return miu;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,647评论 18 139
  • 1,NSObject中description属性的意义,它可以重写吗?答案:每当 NSLog(@"")函数中出现 ...
    eightzg阅读 4,142评论 2 19
  • Hadoop 常见面试题 mr 工作原理 ☆☆☆☆mr 将得到的split 分配对应的 task,每个任务处理相对...
    hdn040083阅读 3,601评论 0 1
  • 首先附上Python的官方中文文档。在刷微信中看到了一个百天打卡学习Python的项目,就参加了,下面是笔记。 5...
    CrazySteven阅读 1,359评论 0 1
  • 面试必背 会舍弃、总结概括——根据我这些年面试和看面试题搜集过来的知识点汇总而来 建议根据我的写的面试应对思路中的...
    luoyangzk阅读 6,753评论 6 173