
剑指Offer
凯撒袁六兽
9102年初入林大大一计算机系
展开
-
LeetCode4-寻找两个正序数组的中位数
题意&思路 题意:两个正数单调不减的整数数组,找到这两个数组中的中位数 思路:一开始我考虑直接在两个数组中找到中位数对应的元素,这样节省空间,但是试了一下情况实在是太多了,因为无法知道连续两个数组处于哪个数组因此无法解决总数是偶数的情况,而且还要考虑数组越界,感觉很麻烦,所以我选择把他们先合并到一个数组里,然后直接算出中位数取出来就完事了,不过这个Leetcode不能用ceil函数还是挺坑的 AC代码 class Solution { public: double findMedianSor原创 2021-11-06 19:17:21 · 231 阅读 · 0 评论 -
剑指 Offer 25. 合并两个排序的链表
合并两个排序的链表思路代码 思路 我太蠢了,一直想着把一条链往第二条链上转移,忽略了链表的特点,只要创建一个新的头地址就可以了,不需要一次创造新节点来赋值。 代码 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solutio原创 2021-04-23 23:21:54 · 88 阅读 · 0 评论 -
剑指 Offer 24. 反转链表
反转链表思路代码 思路 这个题可以暴力找一遍然后再转移到另一个数组中去用头插法就行,但是这样写不够优雅,在数据结构课里学过一种方法是在原链表的基础上反转链表,一共需要三个操作,第一个是记录当前节点的前驱,后继,以及自己,第二个将这点的前驱插在自己的后面完成反转,第三重新更新前驱后继,记得判断空链表和单一节点的问题 代码 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNod原创 2021-04-22 09:20:47 · 79 阅读 · 0 评论 -
剑指 Offer 22. 链表中倒数第k个节点
链表中倒数第k个节点思路代码 思路 暴力就完事了,找到一个关系当前数量==总数-k+1即可 代码 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* getKthF原创 2021-04-21 21:29:06 · 75 阅读 · 0 评论 -
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
调整数组顺序使奇数位于偶数前面思路代码 思路 设置两个指针l,r,分出四种情况:1.l为奇数,r为偶数,直接l++,r- - 2.l为偶数,r为奇数,直接交换 3.l为奇数,r为奇数,l++直到偶数 4.l为偶数,r为偶数,r- - 直到奇数 代码 class Solution { public: vector<int> exchange(vector<int>& nums) { int l=0,r=nums.size()-1; w原创 2021-04-21 20:29:23 · 70 阅读 · 0 评论 -
剑指 Offer 15. 二进制中1的个数
二进制中1的个数思路代码 思路 lowbit(x)是x的二进制表达式中最低位的1所对应的值,比如10为1010则返回的是2即10,那么我每一次把lowbit减掉就行,看能减几次就有几个1 代码 class Solution { public: int hammingWeight(uint32_t n) { int sum=0; while(n) { n-=lowbit(n); sum++;原创 2021-04-21 16:23:29 · 69 阅读 · 0 评论 -
剑指 Offer 11. 旋转数组的最小数字
旋转数组的最小数字思路代码 思路 不知道这个题有什么意思,一发sort就解决了,sort排好序以后取第一个最小的数即可 代码 class Solution { public: int minArray(vector<int>& numbers) { sort(numbers.begin(),numbers.end()); return numbers.front(); } }; ...原创 2021-04-19 23:28:58 · 73 阅读 · 0 评论 -
剑指 Offer 10- II. 青蛙跳台阶问题
这里写目录标题思路代码 思路 这个题经典dp了,上到当前的楼梯可以从前两个楼梯一步上来,可以从前一个楼梯一步上来,所以dp[i]=dp[i-1]+dp[i-2]; 记得设置好数组长度别越界和mod取余操作 代码 class Solution { public: int numWays(int n) { int mod=1e9+7; int f[n+5]; f[0]=1;f[1]=1; for(int i=2;i<=n;i++)原创 2021-04-19 23:23:08 · 75 阅读 · 0 评论 -
剑指 Offer 10- I. 斐波那契数列
斐波那契数列思路题解 思路 逐渐领悟到对于工程问题,在执行函数中的所有函数都需要初始化,否则必然会出问题,而且要非常明确的考虑边界条件。 这个题有很多种写法,递归,递推,矩阵连乘等等,我用的是最节省空间的滚动数组,设置三个数字a,b,c=a+b,在每次循环中使a=b,b=c,c=a+b,这样能够不断的向前滚动。 题解 class Solution { public: int fib(int n) { int mod=1e9+7; int a=0,b=1,c=a+b原创 2021-04-19 23:13:37 · 117 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
从尾到头打印链表思路代码 思路 思路比较简单,先把整个链表跑一遍,统计元素个数,再把链表跑一遍,把数倒着装到数组里,返回数组即可 代码 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public:原创 2021-04-19 13:43:43 · 84 阅读 · 0 评论 -
剑指 Offer 05. 替换空格
替换空格思路代码 思路 这个题很阴间 ans[k]=(char)’%’;k++; ans[k]=(char)‘2’;k++; ans[k]=(char)‘0’;k++; 一开始我还想用三个赋值解决问题,然后出现了程序内存错误的问题,然后查了一会发现可能是[]只能访问字符串且不检查是否越界的问题,创造空串的时候,它不包含任何元素,只能添加,不能访问(个人猜测 剩下的就比较简单了,遍历一遍模板串,然后遇到空格就+目标串,可以直接+,也可以append。 代码 class Solution { public:原创 2021-04-19 11:28:14 · 85 阅读 · 0 评论 -
剑指 Offer 03. 数组中重复的数字
我用的刷题网站是Leetcode,由于是第一次使用leetcode,发现了很多和在Noip,Acwing上不一样的地方,比如它给我一个函数,我没法用设置全局变量来使数组置零等等。 好了,废话不多说直接上思路 数组中重复的数字思路代码 思路 思路:整一个桶排序数组,也就是所有初始值为0的数组,如果遇到一个数字x,就让这个st[x]++,最后遍历这个数组,如果那个下标的值数组值大于1,直接return就行,也要考虑到没有值的时候return0 代码 代码 class Solution { public: .原创 2021-04-19 09:49:38 · 84 阅读 · 0 评论