08 2022 档案
摘要:今天做美团笔试,第二题就,题目大概是:对于一串n个数字:1,2…n,给一串操作,每次把指定的数字移动到最左边(最前面),输出最后的结果 很明显,最直接的想法肯定就是模拟一个链表,每次把链表中的指定节点移动到链表头的位置 看起来这是很简单基础的对吧 但事实上自己做起来却是如此的不熟练,让我觉得其实自己
阅读全文
摘要:直达链接 前两天刚做了~~梦开始的地方~~两数之和 常规思路是二层遍历,对于每个数都去遍历数组找有没有刚好能凑成指定数字的 进阶思路是使用hashmap,一次遍历,对于每个元素去看hahsmap里有没有能凑成一对的,有就直接返回(因为题设答案唯一),没有就插到hashmap里面去(键为值,值为索引位
阅读全文
摘要:约瑟夫环问题 已知 n 个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为 k 的人开始报数,数到 m 的那个人出圈;他的下一个人又从 1 开始报数,数到 m 的那个人又出圈;依此规律重复下去,直到剩余最后一个胜利者。 递归 假设f(n,m)代表从长度为n的序列中,循环数到m就划掉,最
阅读全文
摘要:本来觉得很简单,然后准备提交了发现要在数组1里面合并,没有额外空间 然后就有了一个大胆的想法——我直接插进去然后sort class Solution { public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n)
阅读全文
摘要:如果将所有区间按照左端点进行排序,那么能够合并的区间一定是连续的 class Solution { public: int randomInRange(int start, int end) { srand(time(NULL)); return rand() % (end - start + 1)
阅读全文
摘要:回过头来做第一题 class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> map; // 遍历数组元素,如果hashmap中存在可以凑成target的数就
阅读全文
摘要:参考链接 堆排序 概述 堆排序是利用 堆 这种数据结构进行排序的一种排序算法,堆排序是一种选择排序(每次选出序列中 最大 / 最小 元素) 它的最好和最坏时间复杂度都是O(n logN) 升序->大顶堆 降序->小顶堆 堆 堆是具有以下性质的完全二叉树: 因为是完全二叉树,所以可以映射为一个一维数组
阅读全文
摘要:给定一个长度为n的任意序列 可能有重复 转换为正则序列 只包含n个元素 序列中元素范围都在[1,n] 不存在重复元素 要求: 通过加一/减一操作转换 步数最小 对于一个小于1的数 只能做+操作 当前数组中1是否存在?存在就加到1, 不存在,1+1=2是否存在?存在就加到2,以此类推 对于一个大于n的
阅读全文
摘要:直达链接 与打家劫舍的区别在于,打家劫舍原题是数组,这里是二叉树 而且这里只能由根节点开始 回顾一下之前的思路,看有什么异同、是否还适用 访问任意节点,当前节点可获得最大价值为: 不要当前节点值,那么收益便是:截至上一个节点的值(上一个节点?!这里只能知道子节点不能知道父节点) 要当前值,那么获得的
阅读全文
摘要:直达链接 跟以往的回溯不太一样的是: 这里的出口条件不再是数组长度,而是数组元素和 参数数组中的元素可以被无限制重复选取 class Solution { public: void backtrack(vector<vector<int>>& ret, vector<int>& candidates
阅读全文
摘要:直达链接 之前好像也有一道括号的题,力扣-20-有效的括号,给的标签是“栈”,不过这次的标签是“动态规划”和“回溯法”了 返回所有可能结果,一看就是回溯了,但是我好像一直没完全搞明白过 class Solution { public: void backtrack(vector<string>& a
阅读全文
摘要:直达链接 想到了连续子数组的最大和 自己想 我本来想倒着推,有点像mari和shiny,但是不对 class Solution { public: int lengthOfLIS(vector<int>& nums) { int length = nums.size(); if (length <
阅读全文
摘要:直达链接 旋转数组,想到了剑指Offer-11-旋转数组的最小值 最朴素的想法肯定是,把数组恢复,但是如果这里恢复了,目标值的位置就会变化,达不到要求 如果不恢复,就没法使用二分查找,题目中要求的时间复杂度为O(log n) 评论区提醒: 将数组一分为二,因为旋转后的数组是由两个有序部分组成的,所以
阅读全文
摘要:给定一个“非递减顺序排列”,就是说包含了重复元素的递增序列 class Solution { public: int binarySearch(vector<int>& nums, int target, bool lower) { int left = 0; int right = nums.si
阅读全文
摘要:直达链接 猛然发现我做过了,3月4号 回顾前段时间面试的经历,感觉二分查找的出现概率挺大 当然,也大概是因为都是些小公司,考察的还是很基础的算法 写一篇总结一下 二分查找 条件 必须是有序序列 因为是每次与“中间值”相比较,这个“中间值”既是序列位置的中间值,也是数值大小的中间值 存储在数组中 实现
阅读全文