剑指offer
暴走小布丁
这个作者很懒,什么都没留下…
展开
-
剑指offer53 在排序数组中查找数字(左右边界)
class Solution { public: int search(vector<int>& nums, int target) { int i = 0, j = nums.size()-1; //查找右边界 while(i<=j){ int mid = i + (j-i)/2; if(nums[mid] <= target) i = mid+1; .原创 2021-07-07 20:25:34 · 110 阅读 · 0 评论 -
最小的K个数(C++)
1、快速排序的改进 其实和快速排序思想相同,只不过当哨兵被换到索引K时,排序结束,返回哨兵前的K个数。 class Solution { public: vector<int> getLeastNumbers(vector<int>& arr, int k) { if(k>=arr.size()) return arr; return Least(arr,k,0,arr.size()-1); } vect原创 2021-06-29 20:49:52 · 230 阅读 · 0 评论 -
STL一些库的使用(待补充)
1、堆 大根堆小根堆都可以用STL中的优先队列表示 //优先队列默认大根堆,两种写法 priority_queue<int> a; priority_queue<int, vector<int>, less<int> > a; //小根堆 priority_queue<int, vector<int>, greater<int> > c; 2、vector //截取数组arr一部分赋给res res.assig原创 2021-06-29 20:24:29 · 132 阅读 · 0 评论 -
剑指offer18 删除链表中的节点
题目其实很简单,数据结构的时候就学了,但是现在写下来就是想记录一下大佬的递归写法,感觉很多时候,递归其实是解决链表问题的一种很好的思路,但是自己总是忘掉。 1非递归写法 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class S..原创 2021-06-27 11:38:27 · 60 阅读 · 0 评论 -
剑指offer17 打印从1到最大的n位数
这道提取实际上要考虑大数的越界问题,n较大时,数值可能会超出int32的问题,虽然题目中不考虑,但是实际面试中是肯定要体现出来的,所以需要使用字符串表示大数。 根据leetcode大佬的题解,实际上我们有两个问题要考虑 (1)生成数字的字符串集,这里我们可以采用全排列的方式考虑,这样可以避免了考虑进位的操作。基于分治的思想,我们可以固定高位,然后向低位递归,当个位i而已经被固定时,说明该出自已经确定,打印该数字。 (2)删除高位多余的零,这一步其实实现起来也相对容易,直接截取字符串就好啦。 ..原创 2021-06-27 11:02:11 · 69 阅读 · 0 评论 -
剑指offer25 合并有序链表(C++)
方法一:正常思路 可以理解为双指针? class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { //伪头节点 ListNode *res = new ListNode(0), *p = res; while(l1 && l2 ){ l1->val < l2->val ? (p->next原创 2021-06-22 19:57:49 · 54 阅读 · 0 评论 -
剑指offer06 从尾到头打印链表
方法一:栈 顺序入栈、逆序出栈 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: vector<int> reversePrint(ListNode* head) {原创 2021-06-22 19:37:03 · 60 阅读 · 0 评论