09 2022 档案
摘要:小和问题: 在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数 的小和。求一个数组 的小和。 例子:[1,3,4,2,5] 1左边比1小的数,没有; 3左边比3小的数,1; 4左 边比4小的数,1、3; 2左边比2小的数,1; 5左边比5小的数,1、3、4、 2; 所以小和为1+1+3+1
阅读全文
摘要:1)整体就是一个简单递归,左边排好序、右边排好序、让其整体有序 2)让其整体有序的过程里用了排外序方法 3)利用master公式来求解时间复杂度 4)归并排序的实质 时间复杂度O(N*logN),额外空间复杂度O(N) void Merge(int arr[], int left, int mid,
阅读全文
摘要:int GetMax(int arr[], int left, int right) { if (left == right) return arr[right]; int mid = left + ((left-right)>>1); int leftMax = GetMax(arr, left,
阅读全文
摘要:一个数组中有两种数出现了奇数次,其他数都出现了偶数次,怎么找到这两个数? int* a =new int[2]; int* GetOddTwo(int arr[], int size) { if (!arr) return NULL; int eor = 0; for (int i = 0; i <
阅读全文
摘要:一个数组中有一种数出现了奇数次,其他数都出现了偶数次,怎么找到这一个数? int FindOddTimes(int arr[], int size) { if (!arr) return -1; int eor = 0; for (int i = 0; i < size; ++i) { eor ^=
阅读全文
摘要:int BSLeft(int arr[], int size, int target) { if (!arr) return; int Left = 0; int Right = size-1; int Mid = 0; int Index = -1; while (Left < Right) {
阅读全文
摘要:什么是局部最小值?如下: 给定一个序列,在这个序列中如果存在一个数,小于等于它的前一个数且小于等于它的后一个数,那么就称之为局部最小。 (注:如果是两边则只看一个即可,即如果是序列头部,则头部元素小于等于第二个元素即可;同理,如果是`尾部元素,则尾部元素小与次尾部元素即可) int GetPartM
阅读全文
摘要:bool IsExistTarget(int arr[], int size, int target) { if (!arr) return false; int Left = 0; int Right = 0; int Mid = 0; while (Left < Right) { Mid = L
阅读全文
摘要://算法描述: //将待排序的序列中的元素依次插入已排序好的元素中 void InsertSort(int arr[], int size) { if (!arr || size < 2) return; for(int i = 1; i < size-1; ++i) { for (int j =
阅读全文
摘要://算法描述: //从前往后(从后往前)两两依次比较,若为逆序,则交换两元素,称为一趟冒泡 int BubbleSort(int arr[], int size) { if (!arr || size < 2) return; for(int i = 0; i < size-1; ++i) { fo
阅读全文
摘要://算法描述: //每次从待排序的元素中选择一个最小元素进行排序 void SelectSort(int arr[], int size) { if (!arr || size < 2) { return; } for (int i = 0; i < size-1; ++i) { int minIn
阅读全文
摘要://注:在使用异或交换两元素时,两元素不能在同一内存中 void Swap(int arr[], int i, int j) { if (i == j) return;//不能在同一内存中,若在同一内存中,最后值会被0 arr[i] = arr[i]^arr[j]; arr[j] = arr[i]^
阅读全文