随笔分类 - 算法刷题
刷题找工作
摘要:题目描述 "原题" 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。 编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。 实例1 实例2 代码实现 允许重复
阅读全文
摘要:题目描述 "原题" 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 1 。 你可以假设数组中不存在重复的元素。 你的算法时
阅读全文
摘要:题目描述 "原目" 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现2次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 实例2: 代码实现 实现1 c++ class Solution { pu
阅读全文
摘要:题目描述 "原题" 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 示例 2: 代码实现 实现1 实现3 "upper_bound"
阅读全文
摘要:题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例 代码实现
阅读全文
摘要:题目链接 "牛客网" 题目描述 在一个长度为 n 的数组里的所有数字都在 0 到 n 1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。要求时间复杂度 O(N),空间复杂度 O(1)。因此不能使用排序的方法,也不能使用额外的标
阅读全文
摘要:冒泡排序 插入排序 选择排序 c / 思想: 0~N 1选一个最小的放0位置 1~N 1选一个最小的放1位置 / void SelectionSort(int arr[], int n) { if (arr == NULL || n 1);//L和R中点位置(L+R)/2 mergeSort(arr
阅读全文
摘要:Union简介 检测大小端使用到了union union维护足够的空间来存放多个数据成员中的一种,而不是为每一个数据成员配置空间。在union中所有的数据成员共用一个空间,同一时间只能存储其中一个数据成员,所有的数据成员具有相同的起始地址,例如 一个union之配置一个足够大的空间来容纳最大长度的数
阅读全文
摘要:include using namespace std; //将栈底元素返回并移除 int getAndRemoveLastElement(stack& s){//必须传引用 int result = s.top(); s.pop(); if(s.empty()){ return result; }
阅读全文
摘要:题目 使用栈的结构和操作实现一个队列。 代码实现 使用双栈 入队O(n)出队O(1) c++ include using namespace std; struct MyQueue{ stack s1,s2; enQueue(q, x): / While stack1 is not empty, p
阅读全文
摘要:题目 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。 要求: 1. pop、push、getMin操作的时间复杂度都是O(1) 2. 设计的栈类型可以使用现成的栈结构。 代码实现 时间复杂度O(1),空间复杂度O(n) 这也是书上的写法,使用两个栈,一个正常存数据,一个
阅读全文
摘要:要求 对数组实现旋转操作, leftRotate(ar[], d, n) 长度为n的数组,旋转d个数,相当于循环左移d位。最终效果如下图 代码实现 "视频讲解" Juggling Algorithm 算法思路: 虽然代码实现是向左循环移动d位,并没有单独讲如何实现循环向右移动d位。其实向左循环移动和
阅读全文
摘要:题目 不允许使用循环结构(for、while、do while),允许使用isEmpty()、push()、pop()等操作,基于递归实现栈中元素排序 代码实现 "参考" c++ include using namespace std; void stack_insert_sort(stack& s
阅读全文
摘要:include using namespace std; void stackSort(stack& s){ if(s.empty())return; stack help; while(!s.empty()){ int tmp = s.top(); s.pop(); while(!help.emp
阅读全文
摘要:题目 有一个整型数组arr和一个大小为w的窗口从数组的最左边滑到最右边,窗口每次向右边滑一个位置。 例如,数组为[4,3,5,4,3,3,6,7],窗口大小为3时: [ 4 3 5 ] 4 3 3 6 7窗口中最大值为12 4 [ 3 5 4 ] 3 3 6 7窗口中最大值为12 4 3 [ 5 4
阅读全文