尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

测试开发学习中。。。。

测试开发学习中。。。。 1.数组去重原地修改返回新长度int removeDuplicates(int nums[], int size) { if (size 0) return 0; // 慢指针从0开始第一个元素必然保留 int slow 0; for (int fast 1; fast size; fast) { // 快慢值不同说明是新元素 if (nums[fast] ! nums[slow]) { slow; nums[slow] nums[fast]; // 原地覆盖 } } // slow是下标长度需要1 return slow 1; }2.移动零把数组全部 0 挪到末尾其他元素顺序不变void moveZeroes(int nums[], int size) { // slow存放非0元素的下一个位置 int slow 0; // fast遍历数组找所有非0数字 for (int fast 0; fast size; fast) { if (nums[fast] ! 0) { // 把非0数字挪到slow位置 nums[slow] nums[fast]; slow; } } // slow前面全是非0slow到末尾全部填0 for (int i slow; i size; i) { nums[i] 0; } }3.合并区间将重叠区间合并#include stdlib.h /* 比较函数按照区间左端点排序 */ int cmp(const void *a, const void *b) { int *x *(int **)a; int *y *(int **)b; return x[0] - y[0]; } /** * Return an array of arrays of size *returnSize. * The sizes of the arrays are returned in *returnColumnSizes. */ int** merge(int** intervals, int intervalsSize, int* intervalsColSize, int* returnSize, int** returnColumnSizes) { if (intervalsSize 0) { *returnSize 0; *returnColumnSizes NULL; return NULL; } /* 1. 按照左端点排序 */ qsort(intervals, intervalsSize, sizeof(int *), cmp); /* 2. 开辟结果数组 */ int **result (int **)malloc(sizeof(int *) * intervalsSize); *returnColumnSizes (int *)malloc(sizeof(int) * intervalsSize); int count 0; /* 3. 合并区间 */ for (int i 0; i intervalsSize; i) { /* 第一个区间或者没有重叠 */ if (count 0 || intervals[i][0] result[count - 1][1]) { result[count] (int *)malloc(sizeof(int) * 2); result[count][0] intervals[i][0]; result[count][1] intervals[i][1]; (*returnColumnSizes)[count] 2; count; } else { /* 有重叠更新右端点 */ if (intervals[i][1] result[count - 1][1]) { result[count - 1][1] intervals[i][1]; } } } *returnSize count; return result; }4.给定数组输出全部子数组求每个子数组最大最小差值之和class Solution { public: long long subArrayRanges(vectorint nums) { long long ans 0; int n nums.size(); for (int i 0; i n; i) { int maxVal nums[i]; int minVal nums[i]; for (int j i; j n; j) { maxVal max(maxVal, nums[j]); minVal min(minVal, nums[j]); ans maxVal - minVal; } } return ans; } };5.三数之和数组找三元组和为 0int cmp(const void *a, const void *b) { return *(int *)a - *(int *)b; } /** * param nums 输入数组 * param numsSize 数组长度 * param returnSize 返回结果二维数组行数 * param returnColumnSizes 每行元素个数固定为3 * return 二维数组存储所有三元组 */ int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes) { *returnSize 0; if (numsSize 3) return NULL; // 排序 qsort(nums, numsSize, sizeof(int), cmp); // 动态分配结果空间最多 n^2 组这里预分配足够大 int maxAns numsSize * numsSize; int** res (int**)malloc(maxAns * sizeof(int*)); *returnColumnSizes (int*)malloc(maxAns * sizeof(int)); for (int i 0; i numsSize; i) { int a nums[i]; // 第一个数大于0后面不可能和为0 if (a 0) break; // 去重和上一个a相同跳过 if (i 0 nums[i] nums[i - 1]) continue; int l i 1; int r numsSize - 1; while (l r) { int b nums[l]; int c nums[r]; int sum a b c; if (sum 0) { // 存入答案 res[*returnSize] (int*)malloc(3 * sizeof(int)); res[*returnSize][0] a; res[*returnSize][1] b; res[*returnSize][2] c; (*returnColumnSizes)[*returnSize] 3; (*returnSize); // 跳过左侧重复 while (l r nums[l] nums[l 1]) l; // 跳过右侧重复 while (l r nums[r] nums[r - 1]) r--; l; r--; } else if (sum 0) { l; // 和太小左指针右移 } else { r--; // 和太大右指针左移 } } } return res; }
返回列表