diff --git "a/2224020014/chapter_10/ \346\214\211\345\245\207\345\201\266\346\216\222\345\272\217\346\225\260\347\273\204.cpp" "b/2224020014/chapter_10/ \346\214\211\345\245\207\345\201\266\346\216\222\345\272\217\346\225\260\347\273\204.cpp" new file mode 100644 index 0000000000000000000000000000000000000000..fbef3c01b953a474fac1a7237d8ba591e6a10dee --- /dev/null +++ "b/2224020014/chapter_10/ \346\214\211\345\245\207\345\201\266\346\216\222\345\272\217\346\225\260\347\273\204.cpp" @@ -0,0 +1,19 @@ +/** + * Note: The returned array must be malloced, assume caller calls free(). + */ +int* sortArrayByParityII(int* nums, int numsSize, int* returnSize){ + int q=1; + int o=0; + int *new = (int*)malloc(sizeof(int)*numsSize); + for(int i=0;i nums[j+1]) { + int temp = nums[j]; + nums[j] = nums[j+1]; + nums[j+1] = temp; + flag = true; + } + } + if (!flag) { + break; + } + } + return nums; +} \ No newline at end of file diff --git "a/2224020014/chapter_10/ \346\234\200\346\216\245\350\277\221\345\216\237\347\202\271\347\232\204k\344\270\252\347\202\271.cpp" "b/2224020014/chapter_10/ \346\234\200\346\216\245\350\277\221\345\216\237\347\202\271\347\232\204k\344\270\252\347\202\271.cpp" new file mode 100644 index 0000000000000000000000000000000000000000..21d689b8ac4a116bc3b1dff6cb1f13fc735ded62 --- /dev/null +++ "b/2224020014/chapter_10/ \346\234\200\346\216\245\350\277\221\345\216\237\347\202\271\347\232\204k\344\270\252\347\202\271.cpp" @@ -0,0 +1,12 @@ +int cmp(const void *a, const void *b) { + int *aa = *(int**)a; + int *bb = *(int**)b; + return aa[0] * aa[0] + aa[1] * aa[1] - bb[0] * bb[0] - bb[1] * bb[1]; +} + +int** kClosest(int** points, int pointsSize, int* pointsColSize, int K, int* returnSize, int** returnColumnSizes){ + qsort(points, pointsSize, sizeof(points[0]), cmp); + *returnSize = K; + *returnColumnSizes = pointsColSize; + return points; +} \ No newline at end of file diff --git "a/2224020014/chapter_10/ \347\277\273\350\275\254\345\257\271.cpp" "b/2224020014/chapter_10/ \347\277\273\350\275\254\345\257\271.cpp" new file mode 100644 index 0000000000000000000000000000000000000000..678af8ceab201aca5a639a3a0c3a95194a0a715e --- /dev/null +++ "b/2224020014/chapter_10/ \347\277\273\350\275\254\345\257\271.cpp" @@ -0,0 +1,48 @@ +void merge(int size,int* nums,int start,int mid,int end){ + int tmp[size]; + int s=start,t=mid+1,k=start; + while(s<=mid&&t<=end){ + if(nums[s]<=nums[t]){ + tmp[k]=nums[s]; + s++; + } + else{ + tmp[k]=nums[t]; + t++; + } + k++; + } + while(s<=mid) + tmp[k++]=nums[s++]; + while(t<=end) + tmp[k++]=nums[t++]; + for(int i=start;i<=end;i++) + nums[i]=tmp[i]; +} +int mergesort(int size,int*nums,int start,int end){ + if(start==end) + return 0; + int mid=(start+end)/2; + int n1=mergesort(size,nums,start,mid); + int n2=mergesort(size,nums,mid+1,end); + int ret=n1+n2; + int i=start,j=mid+1; + while(i<=mid&&j<=end){ + if((long long)nums[i]>2*(long long)nums[j]){ + j++; + ret+=mid-i+1; + } + else + i++; + } + i=start; + j=mid+1; + merge(size,nums,start,mid,end); + return ret; +} + +int reversePairs(int* nums, int numsSize){ + if(numsSize==0) + return 0; + return mergesort(numsSize,nums,0,numsSize-1); +} \ No newline at end of file diff --git "a/2224020014/chapter_10/ \351\207\215\346\226\260\346\216\222\345\210\227\345\255\227\347\254\246\344\270\262.cpp" "b/2224020014/chapter_10/ \351\207\215\346\226\260\346\216\222\345\210\227\345\255\227\347\254\246\344\270\262.cpp" new file mode 100644 index 0000000000000000000000000000000000000000..8cbfe5e100cbff9d28f7fbb629c9900fa45bdb31 --- /dev/null +++ "b/2224020014/chapter_10/ \351\207\215\346\226\260\346\216\222\345\210\227\345\255\227\347\254\246\344\270\262.cpp" @@ -0,0 +1,8 @@ +char * restoreString(char * s, int* indices, int indicesSize){ + char *ss = (char *)malloc(sizeof(char)*indicesSize + 1); + for (int i = 0; i < indicesSize;i ++) { + ss[indices[i]] = s[i]; + } + ss[indicesSize] = '\0'; + return ss; +} \ No newline at end of file diff --git "a/2224020014/chapter_7/ N\345\217\211\346\240\221\347\232\204\345\205\210\346\240\271\351\201\215\345\216\206.cpp" "b/2224020014/chapter_7/ N\345\217\211\346\240\221\347\232\204\345\205\210\346\240\271\351\201\215\345\216\206.cpp" new file mode 100644 index 0000000000000000000000000000000000000000..c09764808c752f695e40f53b811a27a6a1553fc6 --- /dev/null +++ "b/2224020014/chapter_7/ N\345\217\211\346\240\221\347\232\204\345\205\210\346\240\271\351\201\215\345\216\206.cpp" @@ -0,0 +1,27 @@ +/** + * Definition for a Node. + * struct Node { + * int val; + * int numChildren; + * struct Node** children; + * }; + */ + +/** + * Note: The returned array must be malloced, assume caller calls free(). + */ +void dfs(struct Node* root,int* returnSize,int* pre) +{ + if(root==NULL) return; + pre[(*returnSize)++]=root->val; + for(int i=0;inumChildren;i++) + { + dfs(root->children[i],returnSize,pre); + } +} +int* preorder(struct Node* root, int* returnSize) { + int* pre=malloc(sizeof(int)*10001); + *returnSize=0; + dfs(root,returnSize,pre); + return pre; +} \ No newline at end of file diff --git "a/2224020014/chapter_7/ \344\272\214\345\217\211\346\240\221\346\234\200\350\277\221\345\205\254\345\205\261\347\245\226\345\205\210.cpp" "b/2224020014/chapter_7/ \344\272\214\345\217\211\346\240\221\346\234\200\350\277\221\345\205\254\345\205\261\347\245\226\345\205\210.cpp" new file mode 100644 index 0000000000000000000000000000000000000000..67e1755bf2c7ab22810dd1d7d64ba5db52be2d36 --- /dev/null +++ "b/2224020014/chapter_7/ \344\272\214\345\217\211\346\240\221\346\234\200\350\277\221\345\205\254\345\205\261\347\245\226\345\205\210.cpp" @@ -0,0 +1,29 @@ +/** + * Definition for a binary tree node. + * struct TreeNode { + * int val; + * struct TreeNode *left; + * struct TreeNode *right; + * }; + */ + +struct TreeNode* lowestCommonAncestor(struct TreeNode* root, struct TreeNode* p, struct TreeNode* q) { + if(root == NULL) + { + return NULL; + } + if(root == p || root == q) + { + return root; + } + + struct TreeNode * left = lowestCommonAncestor(root->left, p, q); + struct TreeNode * right = lowestCommonAncestor(root->right, p, q); + + if(left != NULL && right != NULL) + { + return root; + } + + return left == NULL ? right : left; +} diff --git "a/2224020014/chapter_7/ \344\272\214\345\217\211\346\240\221\347\232\204\345\220\216\345\272\217\351\201\215\345\216\206.cpp" "b/2224020014/chapter_7/ \344\272\214\345\217\211\346\240\221\347\232\204\345\220\216\345\272\217\351\201\215\345\216\206.cpp" new file mode 100644 index 0000000000000000000000000000000000000000..3007fde75663fcfc80265875cf90deaa05a09816 --- /dev/null +++ "b/2224020014/chapter_7/ \344\272\214\345\217\211\346\240\221\347\232\204\345\220\216\345\272\217\351\201\215\345\216\206.cpp" @@ -0,0 +1,26 @@ +/** + * Definition for a binary tree node. + * struct TreeNode { + * int val; + * struct TreeNode *left; + * struct TreeNode *right; + * }; + */ +/** + * Note: The returned array must be malloced, assume caller calls free(). + */ + void postbinaryTree(struct TreeNode*node, int*arr,int*arrsize){ + if(!node){ + return ; + } + postbinaryTree(node->left,arr,arrsize); + postbinaryTree(node->right,arr,arrsize); + arr[*arrsize] = node->val; + (*arrsize)++; + } +int* postorderTraversal(struct TreeNode* root, int* returnSize) { + int*newarr = (int*)malloc(1000*sizeof(int)); + *returnSize = 0; + postbinaryTree(root,newarr,returnSize); + return newarr; +} \ No newline at end of file diff --git "a/2224020014/chapter_7/ \344\272\214\345\217\211\346\240\221\347\232\204\345\261\202\346\254\241\351\201\215\345\216\206.cpp" "b/2224020014/chapter_7/ \344\272\214\345\217\211\346\240\221\347\232\204\345\261\202\346\254\241\351\201\215\345\216\206.cpp" new file mode 100644 index 0000000000000000000000000000000000000000..73e700d5f6e7c52f6f8680096104d042d7ba85fb --- /dev/null +++ "b/2224020014/chapter_7/ \344\272\214\345\217\211\346\240\221\347\232\204\345\261\202\346\254\241\351\201\215\345\216\206.cpp" @@ -0,0 +1,48 @@ +/** + * Definition for a binary tree node. + * struct TreeNode { + * int val; + * struct TreeNode *left; + * struct TreeNode *right; + * }; + */ +/** + * Return an array of arrays of size *returnSize. + * The sizes of the arrays are returned as *returnColumnSizes array. + * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free(). + */ + +int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes){ + //对树为空的情况进行讨论 + *returnSize = 0;//注意要先将returnSize设为0 + if(root == NULL){ + return NULL; + } + //初始化各类值 + int **res = (int**)malloc(sizeof(int*)*2000); + *returnColumnSizes = (int*)malloc(sizeof(int)*2000); + int front = 0, rear = 0; + struct TreeNode *queue[2000]; + queue[rear++] = root; + //队列中有元素的情况 + while(front != rear){ + int last = rear; + int flag = 0; + struct TreeNode *t; + res[*returnSize] = (int*)malloc(sizeof(int)*(last - front)); + //对队列中的所有元素进行处理:把它们放在数组中,然后将他们的左右儿子放在队列中 + while(front < last){ + t = queue[front++]; + res[*returnSize][flag++] = t -> val; + if(t -> left != NULL){ + queue[rear++] = t -> left; + } + if(t -> right != NULL){ + queue[rear++] = t -> right; + } + } + (*returnColumnSizes)[*returnSize] = flag; + (*returnSize)++; + } + return res; +} \ No newline at end of file diff --git "a/2224020014/chapter_7/ \344\272\214\345\217\211\346\240\221\347\232\204\346\234\200\345\244\247\345\256\275\345\272\246.cpp" "b/2224020014/chapter_7/ \344\272\214\345\217\211\346\240\221\347\232\204\346\234\200\345\244\247\345\256\275\345\272\246.cpp" new file mode 100644 index 0000000000000000000000000000000000000000..272fcc3c88b210b1edea32d27dbdbc3bc07e0667 --- /dev/null +++ "b/2224020014/chapter_7/ \344\272\214\345\217\211\346\240\221\347\232\204\346\234\200\345\244\247\345\256\275\345\272\246.cpp" @@ -0,0 +1,50 @@ +/** + * Definition for a binary tree node. + * struct TreeNode { + * int val; + * struct TreeNode *left; + * struct TreeNode *right; + * }; + */ + + +#define MAX_NUM 20005 + +int widthOfBinaryTree(struct TreeNode* root){ + if (root == NULL) { + return 0; + } + struct TreeNode *q[MAX_NUM]; + // 在原节点上修改val值记录不行,有用例会超过int范围,加一个长整型型辅助数组 + unsigned long long idxQ[MAX_NUM]; + + int front = 0; + int rear = 0; + // 根节点赋值为其编号0 + // root->val = 0; + idxQ[rear] = 1; + // 根节点入队 + q[rear++] = root; + int max = 0; + + while (front < rear) { + // 每层宽度:每层最后一个节点的值减去最后一个节点的值+1 + // max = fmax(max, q[rear - 1]->val - q[front]->val + 1); + max = fmax(max, idxQ[rear - 1] - idxQ[front] + 1); + // 本层所有元素出队,同时将子节点入队,且对子节点赋值正确的编号 + int curLevelSize = rear - front; + for (int i = 0; i < curLevelSize; i++) { + unsigned long long idx = idxQ[front]; + struct TreeNode *node = q[front++]; + if (node->left != NULL) { + idxQ[rear] = idx * 2; + q[rear++] = node->left; + } + if (node->right != NULL) { + idxQ[rear] = idx * 2 + 1; + q[rear++] = node->right; + } + } + } + return max; +} \ No newline at end of file diff --git "a/2224020014/chapter_7/ \344\272\214\345\217\211\346\240\221\347\232\204\346\234\200\345\244\247\346\267\261\345\272\246.cpp" "b/2224020014/chapter_7/ \344\272\214\345\217\211\346\240\221\347\232\204\346\234\200\345\244\247\346\267\261\345\272\246.cpp" new file mode 100644 index 0000000000000000000000000000000000000000..9b979c0b73203ba4b042b1ceed13501fd7d02243 --- /dev/null +++ "b/2224020014/chapter_7/ \344\272\214\345\217\211\346\240\221\347\232\204\346\234\200\345\244\247\346\267\261\345\272\246.cpp" @@ -0,0 +1,27 @@ +/** + * Definition for a binary tree node. + * struct TreeNode { + * int val; + * struct TreeNode *left; + * struct TreeNode *right; + * }; + */ +int maxDepth(struct TreeNode* root){ + //结束条件 + if(root == NULL) + { + return 0; + } + + //单层递归 + int L=maxDepth(root->left) + 1; + int R=maxDepth(root->right) + 1; + if(L > R) + { + return L; + } + else + { + return R; + } +} \ No newline at end of file diff --git "a/2224020014/chapter_7/ \344\273\216\345\205\210\345\272\217\344\270\216\344\270\255\345\272\217\351\201\215\345\216\206\345\272\217\345\210\227\346\236\204\351\200\240\344\272\214\345\217\211\346\240\221.cpp" "b/2224020014/chapter_7/ \344\273\216\345\205\210\345\272\217\344\270\216\344\270\255\345\272\217\351\201\215\345\216\206\345\272\217\345\210\227\346\236\204\351\200\240\344\272\214\345\217\211\346\240\221.cpp" new file mode 100644 index 0000000000000000000000000000000000000000..df89dd3468deff542450502b15d5722380b548ca --- /dev/null +++ "b/2224020014/chapter_7/ \344\273\216\345\205\210\345\272\217\344\270\216\344\270\255\345\272\217\351\201\215\345\216\206\345\272\217\345\210\227\346\236\204\351\200\240\344\272\214\345\217\211\346\240\221.cpp" @@ -0,0 +1,21 @@ +struct TreeNode* tree(int* preorder, int preStar, int preEnd, int* inorder, int inStar, int inEnd){ + if(preStar > preEnd)return NULL; + int rootVal = preorder[preStar]; + int index = 0; + for(int i=inStar; i<=inEnd; i++){ + if(inorder[i] == rootVal){ + index = i; + break; + } + } + struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode)); + root->val = rootVal; + int leftSize = index-inStar; + root->left = tree(preorder, preStar+1, preStar+leftSize, inorder, inStar, index-1); + root->right = tree(preorder, preStar+leftSize+1, preEnd, inorder, index+1, inEnd); + return root; +} + +struct TreeNode* buildTree(int* preorder, int preorderSize, int* inorder, int inorderSize){ + return tree(preorder, 0, preorderSize-1, inorder, 0, inorderSize-1); +} \ No newline at end of file diff --git "a/2224020014/chapter_7/ \345\234\250\346\257\217\344\270\252\346\240\221\350\241\214\344\270\255\346\211\276\346\234\200\345\244\247\345\200\274.cpp" "b/2224020014/chapter_7/ \345\234\250\346\257\217\344\270\252\346\240\221\350\241\214\344\270\255\346\211\276\346\234\200\345\244\247\345\200\274.cpp" new file mode 100644 index 0000000000000000000000000000000000000000..c9a583f2e7d479791991737701d76af0f17d6e6f --- /dev/null +++ "b/2224020014/chapter_7/ \345\234\250\346\257\217\344\270\252\346\240\221\350\241\214\344\270\255\346\211\276\346\234\200\345\244\247\345\200\274.cpp" @@ -0,0 +1,31 @@ +typedef struct CostInfo { + int a; + int b; + int diff; +} CostInfo; +int Cmp(const void *a, const void *b) +{ + CostInfo *aa = (CostInfo*)a; + CostInfo *bb = (CostInfo*)b; + if (aa->diff > bb->diff) { + return 1; + } + if (aa->diff > bb->diff) { + return 0; + } + return -1; +} +int twoCitySchedCost(int** costs, int costsSize, int* costsColSize){ + CostInfo *sched = (CostInfo *)malloc(costsSize * sizeof(CostInfo)); + for (int idx = 0; idx < costsSize; idx++) { + sched[idx].a = costs[idx][0]; + sched[idx].b = costs[idx][1]; + sched[idx].diff = costs[idx][0] - costs[idx][1]; + } + qsort(sched, costsSize, sizeof(CostInfo), Cmp); + int sum = 0; + for (int i = 0; i < costsSize / 2; i++) { + sum += sched[i].a + sched[i + costsSize / 2].b; + } + return sum; +} \ No newline at end of file diff --git "a/2224020014/chapter_7/ \350\267\257\345\276\204\346\200\273\345\222\214.cpp" "b/2224020014/chapter_7/ \350\267\257\345\276\204\346\200\273\345\222\214.cpp" new file mode 100644 index 0000000000000000000000000000000000000000..748e2b4ffc42330ac20705b9f95985f793f67e61 --- /dev/null +++ "b/2224020014/chapter_7/ \350\267\257\345\276\204\346\200\273\345\222\214.cpp" @@ -0,0 +1,18 @@ +/** + * Definition for a binary tree node. + * struct TreeNode { + * int val; + * struct TreeNode *left; + * struct TreeNode *right; + * }; + */ + +bool hasPathSum(struct TreeNode* root, int targetSum){ + if (root == NULL) { + return false; + } + if (root->left == NULL && root->right == NULL) { + return targetSum == root->val; + } + return hasPathSum(root->left,targetSum-root->val)||hasPathSum(root->right,targetSum-root->val); +} \ No newline at end of file diff --git "a/2224020014/chapter_8/ \345\210\244\346\226\255\344\272\214\345\210\206\345\233\276.cpp" "b/2224020014/chapter_8/ \345\210\244\346\226\255\344\272\214\345\210\206\345\233\276.cpp" new file mode 100644 index 0000000000000000000000000000000000000000..656dc80b6573cd21df26cb7690e1e2faf0f78cd2 --- /dev/null +++ "b/2224020014/chapter_8/ \345\210\244\346\226\255\344\272\214\345\210\206\345\233\276.cpp" @@ -0,0 +1,44 @@ +int FindRoot(int set[], int pos){ + if(set[pos] < 0){ + return pos; + } + else{ + return set[pos] = FindRoot(set, set[pos]); + } +} + +void Union(int set[], int pos1, int pos2){ + int root1 = FindRoot(set, pos1), root2 = FindRoot(set, pos2); + if(root1 != root2){ + if(set[root1] > set[root2]){ + int tmp = root1; + root1 = root2; + root2 = tmp; + } + set[root1] += set[root2]; + set[root2] = root1; + } +} + +bool isBipartite(int** graph, int graphSize, int* graphColSize){ + bool ret = true; + int i, j; + int set[graphSize]; + for(i = 0; i < graphSize; i++){ + set[i] = -1; + } + for(i = 0; i < graphSize; i++){ + for(j = 1; j < graphColSize[i]; j++){ + Union(set, graph[i][0], graph[i][j]); + } + } + for(i = 0; i < graphSize; i++){ + if(graphColSize[i] > 0){ + if(FindRoot(set, i) == FindRoot(set, graph[i][0])){ + ret = false; + break; + } + } + } + return ret; +} \ No newline at end of file diff --git "a/2224020014/chapter_8/ \346\211\276\345\210\260\345\260\217\351\225\207\346\263\225\345\256\230.cpp" "b/2224020014/chapter_8/ \346\211\276\345\210\260\345\260\217\351\225\207\346\263\225\345\256\230.cpp" new file mode 100644 index 0000000000000000000000000000000000000000..dbb51aa021a28f0b6b869069224af31248e660e9 --- /dev/null +++ "b/2224020014/chapter_8/ \346\211\276\345\210\260\345\260\217\351\225\207\346\263\225\345\256\230.cpp" @@ -0,0 +1,22 @@ +int findJudge(int N, int** trust, int trustSize, int* trustColSize){ + int *ret_val = (int *)calloc(N+1, sizeof(int)); + for (int i = 0; i < N+1; ++i) + ret_val[i] = 0; + + for (int i = 0; i < trustSize; ++i) + ++ret_val[trust[i][1]]; //记录被相信的次数 + + for (int i = 0; i < trustSize; ++i) + ret_val[trust[i][0]] = 0;//如果他相信别人,就对被相信的次数清零 + + int num = 0; + int top = -1; + for (int i = 1; i <= N; ++i) { + if (ret_val[i] == N-1) { //查找相信次数为N-1的人 + ++num; + top = i;//记录下标 + } + } + free(ret_val); + return (num > 1 ? -1 : top);//如果有大于1个法官,就为-1,否则就为该下标 +} \ No newline at end of file diff --git "a/2224020014/chapter_8/ \350\257\276\347\250\213\350\241\250.cpp" "b/2224020014/chapter_8/ \350\257\276\347\250\213\350\241\250.cpp" new file mode 100644 index 0000000000000000000000000000000000000000..aa7f1d78ba91afd208ee2cad3f9118f97a0dc060 --- /dev/null +++ "b/2224020014/chapter_8/ \350\257\276\347\250\213\350\241\250.cpp" @@ -0,0 +1,50 @@ +/** + * Note: The returned array must be malloced, assume caller calls free(). + */ +int* findOrder(int numCourses, int** prerequisites, int prerequisitesSize, int* prerequisitesColSize, int* returnSize){ + int a[3000] = {0}; + int i,j, t; + for (i = 0; i < numCourses; i++) { + a[i] = 0; + } + //记录所有点的入度 + for (i = 0; i < prerequisitesSize; i++) { + a[prerequisites[i][0]]++; + } + + //返回的数组 + int * b = (int *)malloc(sizeof(int) * numCourses); + int top = 0; + //入度为0的点放入返回数组中 + for (i = 0; i < numCourses; i++) { + if(0 == a[i]) { + b[top++] = i; + } + } + + //处理入度不为0的点 + for (i= 0; i< numCourses; i++) { + t = 0; + for (j = 0; j < prerequisitesSize; j++) { + if (prerequisites[j][0] != -1 && + a[prerequisites[j][0]] > 0 && + a[prerequisites[j][1]] == 0) { + a[prerequisites[j][0]]--; + if (0 == a[prerequisites[j][0]]) { + b[top++] = prerequisites[j][0]; + } + prerequisites[j][0] = -1; + } + t = 1; + } + if (t == 0) { + break; + } + } + if (numCourses != top) { + *returnSize = 0; + } else { + *returnSize = numCourses; + } + return b; +} \ No newline at end of file diff --git "a/2224020014/chapter_8/ \350\277\236\346\216\245\346\211\200\346\234\211\347\202\271\347\232\204\346\234\200\345\260\217\350\264\271\347\224\250.cpp" "b/2224020014/chapter_8/ \350\277\236\346\216\245\346\211\200\346\234\211\347\202\271\347\232\204\346\234\200\345\260\217\350\264\271\347\224\250.cpp" new file mode 100644 index 0000000000000000000000000000000000000000..5f5556fd237155eb1d52e8f572e7ea3673d95106 --- /dev/null +++ "b/2224020014/chapter_8/ \350\277\236\346\216\245\346\211\200\346\234\211\347\202\271\347\232\204\346\234\200\345\260\217\350\264\271\347\224\250.cpp" @@ -0,0 +1,39 @@ +int res; + +int minCostConnectPoints(int** points, int pointsSize, int* pointsColSize){ + res = 0; + int n = pointsSize; + bool collected[n]; + int dist[n]; //dist[i]表示i号点到点集的最短距离 + int fee[n][n]; //fee[i][j] 表示i、j连接所需的费用 + memset(collected, 0, sizeof(collected)); + + for(int i = 0; i < n; i++){ + fee[i][i] = 0; + for(int j = i + 1; j < n; j++) + fee[i][j] = fee[j][i] = abs(points[i][0] - points[j][0]) + abs(points[i][1] - points[j][1]); + } + //从0号点开始,此时点集只有0 + collected[0] = true; + for(int i = 0; i < n; i++) dist[i] = fee[i][0]; + + while(1){ + int v = -1; + int mindist = INT_MAX; + for(int i = 0; i < n; i++){ + if(collected[i]) continue; + if(dist[i] < mindist){ + mindist = dist[i]; + v = i; + } + } + if(v == -1) break; + res += mindist; + collected[v] = true; + dist[v] = 0; + for(int i = 0; i < n; i++) //更新未收录顶点与收录点集的最短距离 + if(!collected[i] && dist[i] > fee[v][i]) + dist[i] = fee[v][i]; + } + return res; +} diff --git "a/2224020014/chapter_8/\344\272\214\350\277\233\345\210\266\347\237\251\351\230\265\344\270\255\346\234\200\347\237\255\350\267\257\345\276\204.cpp" "b/2224020014/chapter_8/\344\272\214\350\277\233\345\210\266\347\237\251\351\230\265\344\270\255\346\234\200\347\237\255\350\267\257\345\276\204.cpp" new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git "a/2224020014/chapter_9/ \345\257\273\346\211\276\344\270\244\344\270\252\346\255\243\345\272\217\346\225\260\347\273\204\347\232\204\344\270\255\344\275\215\346\225\260.cpp" "b/2224020014/chapter_9/ \345\257\273\346\211\276\344\270\244\344\270\252\346\255\243\345\272\217\346\225\260\347\273\204\347\232\204\344\270\255\344\275\215\346\225\260.cpp" new file mode 100644 index 0000000000000000000000000000000000000000..f1da8107a5bec7beca61f9013f2a74b48b1555f4 --- /dev/null +++ "b/2224020014/chapter_9/ \345\257\273\346\211\276\344\270\244\344\270\252\346\255\243\345\272\217\346\225\260\347\273\204\347\232\204\344\270\255\344\275\215\346\225\260.cpp" @@ -0,0 +1,25 @@ +ouble findMedianSortedArrays(int* a1, int len1, int* a2, int len2){ + if(len1==0 && len2==0) return 0; + double sum=0; + int len=len1+len2; + int a[len], index1=0, index2=0; + while(index1 target) { + r = mid - 1; + } + else { + return mid; + } + } + return -1; +} \ No newline at end of file diff --git "a/2224020014/chapter_9/\344\272\214\345\217\211\346\216\222\345\272\217\346\240\221\347\232\204\346\234\200\350\277\221\345\205\254\345\205\261\347\245\226\345\205\210.cpp" "b/2224020014/chapter_9/\344\272\214\345\217\211\346\216\222\345\272\217\346\240\221\347\232\204\346\234\200\350\277\221\345\205\254\345\205\261\347\245\226\345\205\210.cpp" new file mode 100644 index 0000000000000000000000000000000000000000..b91feaab467b585501f2cdf457833a9dfac10040 --- /dev/null +++ "b/2224020014/chapter_9/\344\272\214\345\217\211\346\216\222\345\272\217\346\240\221\347\232\204\346\234\200\350\277\221\345\205\254\345\205\261\347\245\226\345\205\210.cpp" @@ -0,0 +1,24 @@ +/** + * Definition for a binary tree node. + * struct TreeNode { + * int val; + * struct TreeNode *left; + * struct TreeNode *right; + * }; + */ + +struct TreeNode* lowestCommonAncestor(struct TreeNode* root, struct TreeNode* p, struct TreeNode* q) { + struct TreeNode* father=root; + while(root!=NULL){ + if(p->valval&&q->valval){ + father=father->left; + } + else if(p->val>father->val&&q->val>father->val){ + father=father->right; + } + else{ + break; + } + } + return father; +} \ No newline at end of file diff --git "a/2224020014/chapter_9/\345\271\263\350\241\241\344\272\214\345\217\211\346\240\221.cpp" "b/2224020014/chapter_9/\345\271\263\350\241\241\344\272\214\345\217\211\346\240\221.cpp" new file mode 100644 index 0000000000000000000000000000000000000000..61f69a48a9e487f170054633cce36aed40cb3d63 --- /dev/null +++ "b/2224020014/chapter_9/\345\271\263\350\241\241\344\272\214\345\217\211\346\240\221.cpp" @@ -0,0 +1,30 @@ +/** + * Definition for a binary tree node. + * struct TreeNode { + * int val; + * struct TreeNode *left; + * struct TreeNode *right; + * }; + */ +int getHeight(struct TreeNode* root){ + if(root==NULL){ + return 0; + } + int leftHeight=getHeight(root->left);//左子树 + if(leftHeight==-1){ + return -1; + } + int rightHeight=getHeight(root->right);//右子树 + if(rightHeight==-1){ + return -1; + } + //遍历中间的根节点 + if(fabs(leftHeight-rightHeight)>1){ + return -1; + }else{ + return 1+fmax(leftHeight,rightHeight); + } +} +bool isBalanced(struct TreeNode* root) { + return getHeight(root)==-1?false:true; +} \ No newline at end of file diff --git "a/2224020014/chapter_9/\347\254\254\344\270\211\345\244\247\347\232\204\346\225\260.cpp" "b/2224020014/chapter_9/\347\254\254\344\270\211\345\244\247\347\232\204\346\225\260.cpp" new file mode 100644 index 0000000000000000000000000000000000000000..cde3b1255c616712f81cb63b05033f5aeec53989 --- /dev/null +++ "b/2224020014/chapter_9/\347\254\254\344\270\211\345\244\247\347\232\204\346\225\260.cpp" @@ -0,0 +1,14 @@ +int cmp(const void *a, const void *b) { + return *(int*)a < *(int*)b; +} + +int thirdMax(int* nums, int numsSize){ + qsort(nums, numsSize, sizeof(nums[0]), cmp); + int diff = 0; + for (int i = 1; i < numsSize; i++) { + if (nums[i] != nums[i - 1] && ++diff == 2) { + return nums[i]; + } + } + return nums[0]; +} \ No newline at end of file