03 2023 档案
摘要:1、机器学习是干什么的。我的理解:通过查看现在的状况,利用机器学习,预测未来可能出现的情况。(房价预测)/或者说通过一些算法、代码让机器实现一些简单的工作。(客服机器人) 编写算法,让机器人通过大量的数据、经验自己学习获得最优解。 显著式编程 和 非显著式编程: 告诉特点让其分类;让计算机自己总结规
阅读全文
摘要:15.三数之和 (opens new window)的双指针解法是一层for循环num[i]为确定值,然后循环内有left和right下标作为双指针,找到nums[i] + nums[left] + nums[right] == 0。 四数之和的双指针解法是两层for循环nums[k] + nums
阅读全文
摘要:给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可
阅读全文
摘要:从四个vector里找四个数成一组,使得他们的和为零,问有几个这样的组。 class Solution { public: int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>
阅读全文
摘要:1、什么时候使用哈希法? 当我们需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法。 2、常见的map、set、数组的优缺点: map可以存放键值对,自动排序。multimap、map中find() 的时间复杂度是O(logn) 而unordered_map中find
阅读全文
摘要:map、multimap中的find()操作的时间复杂度是O(logn) unordered_map中find()的时间复杂度是O(1) alogrithm中的find()的时间复杂度是O(n) 因此本题可以O(nlogn) 这个算法并不是最好的,代码随想录的代码才是神!(我居然还稍微质疑了一下,太
阅读全文
摘要:class Solution { public: vector<vector<string>> groupAnagrams(vector<string>& strs) { multimap<string,string>mp; //键排序,值没动 int len=strs.size(); for(in
阅读全文
摘要:1、多用于判断一个元素在这个集合中是否出现过。 2、数组、set(去重)、map(自动排序)。 3、set是有序且 不允许有多个重复的键;unordered_set是无序的;multiset是允许有多个重复的键。 #include <set> int main(){ set<int>s; s.siz
阅读全文
摘要:一、map的简介 1、map是STL的一个关联容器,map 容器中所有的元素都会根据元素对应的键值来排序,而键值key 是唯一值,并不会出现同样的键值key,也就是说假设已经有一个键值key 存在map 里,当同样的键值key 再insert 时,新的会覆盖掉旧的。 2、map内部所有的数据都是有序
阅读全文
摘要:1、尺取 2、比较 class Solution { public: vector<int> findAnagrams(string s, string p) { int len2=p.size(); int len1=s.size(); int i,j; int a[30]; int b[30];
阅读全文
摘要:判断一个链表有无环,并且如果有环指出入环的位置。 1、判断有无环是通过 一快一慢指针来判断的。快的指针走每次走两步、慢的指针每次走一步,这样如果没有环的话他俩不会相遇。如果有环则一定相遇。 为什么一定相遇呢? 因为快指针走两步、慢指针走一步,快指针每次比慢指针多走一步,所以快指针必定能和慢指针相遇。
阅读全文
摘要:1、链表相交是两个指针相同而非值相同。 class Solution { public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { ListNode *p=headA,*q=headB; int len1=0,
阅读全文
摘要:设一快一慢指针,快指针先走N步,等快指针到达最后一个元素时,此时慢指针恰好在倒数第N个元素的前一个元素,然后删掉就可以了。 class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode* p
阅读全文
摘要:两两交换链表中的节点: 先把一个链表分为两个链表,再把两个链表组成一个链表。 注意最后可能有一个链表有剩余,但此时另一个链表的指针已经到了NULL,要再遍历一遍/提前记录(感觉有点麻烦)。 class Solution { public: ListNode* swapPairs(ListNode*
阅读全文
摘要:1、反转链表的常见几种: 头插法;双指针方法; 头插法创建一个新节点再头插比较合适;如果在原来的链表头插法,要对第一个元素的next在适当的时候变为NULL。 双指针的方法比较好用,用两个指针一前一后实现链表反转。 双指针: class Solution { public: ListNode* re
阅读全文
摘要:两种做法: 第一种是在原链表的基础上直接删除。此时需要先把链头节点特判一下。 第二种是在原链表的表头再加一个节点,这样代码简单,并且原来的头节点就不需要特判了。 注意:循环的时候,不要直接判断p->val==val,最好是循环里判断p是否为空。如果while(p->val==val) p=p->ne
阅读全文
摘要:1、注意区间:我写的是每一次都留最后一个元素下次处理。左闭右开。 2、每次先遍历完一圈再遍历下一圈。用sx来记录 每一圈要走多少步。用 turn来记录这次应该往哪走了。 比如n=4 turn=0,sx=2时,那么最外面一圈要走两步(两步要包括在开始不用走的那个位置也就是 1 2 3写好了) 之后tu
阅读全文
摘要:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 (注意数组的空间不能改变,删除只能覆盖
阅读全文
摘要:代码随想录学习笔记:时间复杂度是一个函数,它定性描述该算法的运行时间。面试中算法的时间复杂度指的都是一般情况(即大多数情况下)。但样例不同会影响时间复杂度。 大O:用来表示上界的,通常用它描述算法的最坏情况运行时间的上界。但快排的时间复杂度却是O(nlogn)。这里说的O代表的就是一般情况,而不是严
阅读全文
摘要:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 1: 输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums
阅读全文
摘要:给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums = [-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,
阅读全文
摘要:1、给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 用 j 一直往后遍历,当满足一定
阅读全文
摘要:水果成篮: 按顺序取,问连续最多的两个数有几个。 总体思路: 1、如果是我们要的数,直接数量加一; 2、如果是新的数,那么j-1的位置的数就是第一个数,j位置的数就是第二个数。并且要更新j-1上数的数量,计算j-1 到 “碰到要丢弃的那个数” 的数量。 举例: 2 1 2 2 2 3 3 3 当取到
阅读全文

浙公网安备 33010602011771号