算法日常刷题笔记(2)
为保持刷题的习惯 计划一天刷3-5题 然后一周总计汇总一下 这是第二篇笔记 笔记时间为2月17日到2月23日
第一天
找到初始输入字符串
找到初始输入字符串 Ihttps://leetcode.cn/problems/find-the-original-typed-string-i/
Alice 正在她的电脑上输入一个字符串。但是她打字技术比较笨拙,她 可能 在一个按键上按太久,导致一个字符被输入 多次 。
尽管 Alice 尽可能集中注意力,她仍然可能会犯错 至多 一次。
给你一个字符串
word
,它表示 最终 显示在 Alice 显示屏上的结果。请你返回 Alice 一开始可能想要输入字符串的总方案数。
int possibleStringCount(char* word) {int ans = 1; while (* word) if (* word ++ == * word) ++ ans;return ans;
}
Excel 表列序号
Excel 表列序号https://leetcode.cn/problems/excel-sheet-column-number/
给你一个字符串
columnTitle
,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。例如:
A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28
int titleToNumber(char* columnTitle) {int length = strlen(columnTitle);int ans = 0;int n = 0;for(int i = length -1;i >= 0;i--){ans += (columnTitle[i] - 'A' + 1) * pow(26,n++);}return ans;}
K次取反后最大化的数组和
K 次取反后最大化的数组和https://leetcode.cn/problems/maximize-sum-of-array-after-k-negations/
int comp(const void* a,const void* b){return *(const int*)a - *(const int *)b;
}int largestSumAfterKNegations(int* nums, int numsSize, int k) {int max_v = 0;qsort(nums,numsSize,sizeof(int),comp);for (int i = 0; i < numsSize && k > 0; i++) {if (nums[i] < 0) {nums[i] = -nums[i];k--;} else {break;}}qsort(nums,numsSize,sizeof(int),comp);if(k % 2 == 1){nums[0] = -nums[0];}for(int i = 0; i < numsSize;i++){max_v += nums[i];}return max_v;
}
第二天
区间查询数字的频率
2080. 区间内查询数字的频率https://leetcode.cn/problems/range-frequency-queries/
请你设计一个数据结构,它能求出给定子数组内一个给定值的 频率 。
子数组中一个值的 频率 指的是这个子数组中这个值的出现次数。
请你实现
RangeFreqQuery
类:
RangeFreqQuery(int[] arr)
用下标从 0 开始的整数数组arr
构造一个类的实例。int query(int left, int right, int value)
返回子数组arr[left...right]
中value
的 频率 。一个 子数组 指的是数组中一段连续的元素。
arr[left...right]
指的是nums
中包含下标left
和right
在内 的中间一段连续元素。
class RangeFreqQuery {// 用于存储每个值出现的所有索引private Map<Integer, List<Integer>> indexMap;public RangeFreqQuery(int[] arr) {indexMap = new HashMap<>();// 遍历数组,记录每个值出现的索引for (int i = 0; i < arr.length; i++) {int num = arr[i];// 如果该值还没有对应的索引列表,创建一个新的列表indexMap.computeIfAbsent(num, k -> new ArrayList<>()).add(i);}}public int query(int left, int right, int value) {// 如果该值没有出现过,直接返回 0if (!indexMap.containsKey(value)) {return 0;}// 获取该值出现的所有索引列表List<Integer> indices = indexMap.get(value);// 找到第一个大于等于 left 的索引int leftIndex = binarySearchLeft(indices, left);// 找到第一个大于 right 的索引int rightIndex = binarySearchRight(indices, right);// 计算在 [left, right] 范围内该值出现的次数return rightIndex - leftIndex;}// 二分查找第一个大于等于 target 的索引private int binarySearchLeft(List<Integer> list, int target) {int left = 0, right = list.size();while (left < right) {int mid = left + (right - left) / 2;if (list.get(mid) < target) {left = mid + 1;} else {right = mid;}}return left;}// 二分查找第一个大于 target 的索引private int binarySearchRight(List<Integer> list, int target) {int left = 0, right = list.size();while (left < right) {int mid = left + (right - left) / 2;if (list.get(mid) <= target) {left = mid + 1;} else {right = mid;}}return left;}
}
寻找右区间
436. 寻找右区间https://leetcode.cn/problems/find-right-interval/
给你一个区间数组
intervals
,其中intervals[i] = [starti, endi]
,且每个starti
都 不同 。区间
i
的 右侧区间 是满足startj >= endi
,且startj
最小 的区间j
。注意i
可能等于j
。返回一个由每个区间
i
对应的 右侧区间 下标组成的数组。如果某个区间i
不存在对应的 右侧区间 ,则下标i
处的值设为-1
// 自定义结构体用于存储区间起始位置和其对应的下标
typedef struct {int start;int index;
} StartIndex;// 比较函数,用于qsort排序
int compare(const void *a, const void *b) {StartIndex *sa = (StartIndex *)a;StartIndex *sb = (StartIndex *)b;return sa->start - sb->start;
}// 二分查找函数,找到满足startj >= endi的最小startj对应的下标
int binarySearch(StartIndex *starts, int n, int target) {int left = 0, right = n - 1;int result = -1;while (left <= right) {int mid = left + (right - left) / 2;if (starts[mid].start >= target) {result = starts[mid].index;right = mid - 1;} else {left = mid + 1;}}return result;
}// 主函数,计算每个区间的右侧区间下标
int* findRightInterval(int** intervals, int intervalsSize, int* intervalsColSize, int* returnSize) {// 分配内存用于存储每个区间的起始位置和其对应的下标StartIndex *starts = (StartIndex *)malloc(intervalsSize * sizeof(StartIndex));for (int i = 0; i < intervalsSize; i++) {starts[i].start = intervals[i][0];starts[i].index = i;}// 对起始位置进行排序qsort(starts, intervalsSize, sizeof(StartIndex), compare);// 分配内存用于存储结果数组int *result = (int *)malloc(intervalsSize * sizeof(int));*returnSize = intervalsSize;// 对每个区间进行二分查找,找到其右侧区间的下标for (int i = 0; i < intervalsSize; i++) {int end = intervals[i][1];result[i] = binarySearch(starts, intervalsSize, end);}// 释放之前分配的内存free(starts);return result;
}
下一个更大元素Ⅱ
下一个更大元素 IIhttps://leetcode.cn/problems/next-greater-element-ii/
给定一个循环数组
nums
(nums[nums.length - 1]
的下一个元素是nums[0]
),返回nums
中每个元素的 下一个更大元素 。数字
x
的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出-1
。
暴力破解
/*** Note: The returned array must be malloced, assume caller calls free().*/
int* nextGreaterElements(int* nums, int numsSize, int* returnSize) {int* ans = (int*)malloc(sizeof(int) * numsSize);*returnSize = numsSize;int max = 0;for(int i = 0;i < numsSize;i++){if(nums[i] > nums[max]){max = i;}for(int j = i + 1;j < numsSize*2;j++){if(nums[j%numsSize] > nums[i]){ans[i] = nums[j%numsSize];break;}}}for(int i = 0;i < numsSize;i++){if(nums[i] == nums[max]){ans[i] = -1;}}return ans;
}
优化解
int* nextGreaterElements(int* nums, int numsSize, int* returnSize) {int* ans = malloc(numsSize * sizeof(int));memset(ans, -1, numsSize * sizeof(int));int* st = malloc(numsSize * sizeof(int));int top = 0;for (int i = 2 * numsSize - 1; i >= 0; i--) {int x = nums[i % numsSize];while (top && x >= st[top - 1]) {top--;}if (top && i < numsSize) {ans[i] = st[top - 1];}st[top++] = x;}free(st);*returnSize = numsSize;return ans;
}
第三天
数组列表中的最大距离
数组列表中的最大距离https://leetcode.cn/problems/maximum-distance-in-arrays/
给定
m
个数组,每个数组都已经按照升序排好序了。现在你需要从两个不同的数组中选择两个整数(每个数组选一个)并且计算它们的距离。两个整数
a
和b
之间的距离定义为它们差的绝对值|a-b|
。返回最大距离。
示例 1:
输入:[[1,2,3],[4,5],[1,2,3]] 输出:4 解释: 一种得到答案 4 的方法是从第一个数组或者第三个数组中选择 1,同时从第二个数组中选择 5
int maxDistance(int** arrays, int arraysSize, int* arraysColSize) {int res = 0;int n = arraysColSize[0];int min_val = arrays[0][0];int max_val = arrays[0][arraysColSize[0] - 1];for (int i = 1; i < arraysSize; i++) {n = arraysColSize[i];res = fmax(res, fmax(abs(arrays[i][n - 1] - min_val), abs(max_val - arrays[i][0])));min_val = fmin(min_val, arrays[i][0]);max_val = fmax(max_val, arrays[i][n - 1]);}return res;
}
优质数对的总数
优质数对的总数 Ihttps://leetcode.cn/problems/find-the-number-of-good-pairs-i/
给你两个整数数组
nums1
和nums2
,长度分别为n
和m
。同时给你一个正整数k
。如果
nums1[i]
可以除尽nums2[j] * k
,则称数对(i, j)
为 优质数对(0 <= i <= n - 1
,0 <= j <= m - 1
)。返回 优质数对 的总数。
int numberOfPairs(int* nums1, int nums1Size, int* nums2, int nums2Size, int k) {int nums = 0;for(int i = 0;i < nums1Size;i++){for(int j = 0;j < nums2Size;j ++){if(nums1[i] % (nums2[j] * k) == 0){nums ++;}}}return nums;
}
移除石头游戏
移除石头游戏https://leetcode.cn/problems/stone-removal-game/
Alice 和 Bob 在玩一个游戏,他们俩轮流从一堆石头中移除石头,Alice 先进行操作。
- Alice 在第一次操作中移除 恰好 10 个石头。
- 接下来的每次操作中,每位玩家移除的石头数 恰好 为另一位玩家上一次操作的石头数减 1 。
第一位没法进行操作的玩家输掉这个游戏。
给你一个正整数
n
表示一开始石头的数目,如果 Alice 赢下这个游戏,请你返回true
,否则返回false
。
bool canAliceWin(int n) {// Alice 第一次移除 10 个石头int aliceRemove = 10;// 先检查 Alice 第一次操作是否可行if (n < aliceRemove) {return false;}n -= aliceRemove;while (1) {// Bob 移除的石头数为 Alice 上一次移除的石头数减 1int bobRemove = aliceRemove - 1;if (n < bobRemove) {// Bob 无法进行操作,Alice 赢return true;}n -= bobRemove;// Alice 下一次移除的石头数为 Bob 上一次移除的石头数减 1aliceRemove = bobRemove - 1;if (n < aliceRemove) {// Alice 无法进行操作,Alice 输return false;}n -= aliceRemove;}
}
第四天
奇偶位数
奇偶位数https://leetcode.cn/problems/number-of-even-and-odd-bits/
给你一个 正 整数
n
。用
even
表示在n
的二进制形式(下标从 0 开始)中值为1
的偶数下标的个数。用
odd
表示在n
的二进制形式(下标从 0 开始)中值为1
的奇数下标的个数。请注意,在数字的二进制表示中,位下标的顺序 从右到左。
返回整数数组
answer
,其中answer = [even, odd]
/*** Note: The returned array must be malloced, assume caller calls free().*/
int* evenOddBit(int n, int* returnSize) {int* ans = (int*)malloc(sizeof(int)*2);*returnSize = 2;int even = 0;int odd = 0;int num = n;int length = 0;while(num){length ++;if(num % 2 == 1){if(length % 2 == 0){odd ++;}else{even ++;}}num /= 2;}ans[0] = even;ans[1] = odd;return ans;}
等差数列划分
等差数列划分https://leetcode.cn/problems/arithmetic-slices/
如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。
- 例如,
[1,3,5,7,9]
、[7,7,7,7]
和[3,-1,-5,-9]
都是等差数列。给你一个整数数组
nums
,返回数组nums
中所有为等差数组的 子数组 个数。子数组 是数组中的一个连续序列
int numberOfArithmeticSlices(int* nums, int numsSize) {if (numsSize == 1) {return 0;}int d = nums[0] - nums[1], t = 0;int ans = 0;// 因为等差数列的长度至少为 3,所以可以从 i=2 开始枚举for (int i = 2; i < numsSize; ++i) {if (nums[i - 1] - nums[i] == d) {++t;} else {d = nums[i - 1] - nums[i];t = 0;}ans += t;}return ans;
}
有效的回旋镖
1037. 有效的回旋镖https://leetcode.cn/problems/valid-boomerang/
给定一个数组
points
,其中points[i] = [xi, yi]
表示 X-Y 平面上的一个点,如果这些点构成一个 回旋镖 则返回true
。回旋镖 定义为一组三个点,这些点 各不相同 且 不在一条直线上
bool isBoomerang(int** points, int pointsSize, int* pointsColSize) {// 计算向量 (x1 - x0, y1 - y0) 和 (x2 - x0, y2 - y0) 的叉积int dx1 = points[1][0] - points[0][0];int dy1 = points[1][1] - points[0][1];int dx2 = points[2][0] - points[0][0];int dy2 = points[2][1] - points[0][1];// 判断叉积是否为 0,如果不为 0,则三点不共线,构成回旋镖return dx1 * dy2 != dx2 * dy1;}
第五天
用地毯覆盖后的最少白色砖块
用地毯覆盖后的最少白色砖块https://leetcode.cn/problems/minimum-white-tiles-after-covering-with-carpets/
给你一个下标从 0 开始的 二进制 字符串
floor
,它表示地板上砖块的颜色。
floor[i] = '0'
表示地板上第i
块砖块的颜色是 黑色 。floor[i] = '1'
表示地板上第i
块砖块的颜色是 白色 。同时给你
numCarpets
和carpetLen
。你有numCarpets
条 黑色 的地毯,每一条 黑色 的地毯长度都为carpetLen
块砖块。请你使用这些地毯去覆盖砖块,使得未被覆盖的剩余 白色 砖块的数目 最小 。地毯相互之间可以覆盖。请你返回没被覆盖的白色砖块的 最少 数目。
int minimumWhiteTiles(char* floor, int numCarpets, int carpetLen) {int length = strlen(floor);// 创建动态规划数组int** dp = (int**)malloc((length + 1) * sizeof(int*));for (int i = 0; i <= length; i++) {dp[i] = (int*)calloc(numCarpets + 1, sizeof(int));}// 初始化动态规划数组for (int i = 1; i <= length; i++) {for (int j = 0; j <= numCarpets; j++) {// 不使用新的地毯覆盖第 i 块砖块dp[i][j] = dp[i - 1][j] + (floor[i - 1] == '1');if (j > 0) {// 使用新的地毯覆盖第 i 块砖块int prev = (i - carpetLen > 0) ? i - carpetLen : 0;dp[i][j] = (dp[i][j] < dp[prev][j - 1]) ? dp[i][j] : dp[prev][j - 1];}}}int ans = dp[length][numCarpets];// 释放动态规划数组for (int i = 0; i <= length; i++) {free(dp[i]);}free(dp);return ans;}
高度检查器
高度检查器https://leetcode.cn/problems/height-checker/
学校打算为全体学生拍一张年度纪念照。根据要求,学生需要按照 非递减 的高度顺序排成一行。
排序后的高度情况用整数数组
expected
表示,其中expected[i]
是预计排在这一行中第i
位的学生的高度(下标从 0 开始)。给你一个整数数组
heights
,表示 当前学生站位 的高度情况。heights[i]
是这一行中第i
位学生的高度(下标从 0 开始)。返回满足
heights[i] != expected[i]
的 下标数量 。
int comp(const void* a,const void* b){return *(int *)a - *(int *)b;
}int heightChecker(int* heights, int heightsSize) {int nums = 0;int* arr = (int*) malloc(sizeof(int) * heightsSize);for(int i = 0;i < heightsSize;i++){arr[i] = heights[i];}qsort(arr,heightsSize,sizeof(int),comp);for(int i = 0;i < heightsSize;i++){if(heights[i] != arr[i]){nums ++;}}return nums;
}
删除一个元素使数组严格递增
删除一个元素使数组严格递增https://leetcode.cn/problems/remove-one-element-to-make-the-array-strictly-increasing/
给你一个下标从 0 开始的整数数组
nums
,如果 恰好 删除 一个 元素后,数组 严格递增 ,那么请你返回true
,否则返回false
。如果数组本身已经是严格递增的,请你也返回true
。数组
nums
是 严格递增 的定义为:对于任意下标的1 <= i < nums.length
都满足nums[i - 1] < nums[i]
。
bool canBeIncreasing(int* nums, int numsSize) {int count = 0;for (int i = 1; i < numsSize; i++) {if (nums[i] <= nums[i - 1]) {// 出现不满足严格递增的情况,计数加 1count++;if (count > 1) {// 如果需要删除超过一个元素,直接返回 falsereturn false;}if (i > 1 && nums[i] <= nums[i - 2]) {// 如果删除前一个元素后仍然不满足严格递增,尝试修改当前元素nums[i] = nums[i - 1];}}}return true;
}
第六天
统计相似字符串对的数目
统计相似字符串对的数目https://leetcode.cn/problems/count-pairs-of-similar-strings/
给你一个下标从 0 开始的字符串数组
words
。如果两个字符串由相同的字符组成,则认为这两个字符串 相似 。
- 例如,
"abca"
和"cba"
相似,因为它们都由字符'a'
、'b'
、'c'
组成。- 然而,
"abacba"
和"bcfd"
不相似,因为它们不是相同字符组成的。请你找出满足字符串
words[i]
和words[j]
相似的下标对(i, j)
,并返回下标对的数目,其中0 <= i < j <= words.length - 1
。
暴力破解
bool isCom(char* word1,char* word2){int arr[26][2];memset(arr,0,sizeof(int)*52);for(int i = 0;i < strlen(word1);i++){arr[word1[i] - 'a'][0] ++;}for(int i = 0;i < strlen(word2);i++){arr[(word2[i] - 'a')][1] ++;}for(int i = 0;i < 26;i ++){if ((arr[i][0] > 0 && arr[i][1] == 0) || (arr[i][0] == 0 && arr[i][1] > 0)) {return false;}}return true;}int similarPairs(char** words, int wordsSize) {int ans = 0;for(int i = 0;i < wordsSize;i++){for(int j = i + 1;j < wordsSize;j++){if(isCom(words[i],words[j])){ans ++;}}}return ans;
}
优化解
class Solution {
public:int similarPairs(vector<string>& words) {int res = 0;unordered_map<int, int> cnt;for (const string& word : words) {int state = 0;for (char c : word) {state |= 1 << (c - 'a');}res += cnt[state];cnt[state]++;}return res;}
};
在区间范围内统计奇数数目
在区间范围内统计奇数数目https://leetcode.cn/problems/count-odd-numbers-in-an-interval-range/
给你两个非负整数
low
和high
。请你返回low
和high
之间(包括二者)奇数的数目。
int sum(int n){int nums = 0;if(n % 2 == 1){nums += (n + 1)/2;}else{nums += n/2;}return nums;
}int countOdds(int low, int high) {int nums = 0;nums += (sum(high) - sum(low));if(low % 2 == 1){nums ++;}return nums;
}
统计字符串中的元音子字符串
统计字符串中的元音子字符串https://leetcode.cn/problems/count-vowel-substrings-of-a-string/
子字符串 是字符串中的一个连续(非空)的字符序列。
元音子字符串 是 仅 由元音(
'a'
、'e'
、'i'
、'o'
和'u'
)组成的一个子字符串,且必须包含 全部五种 元音。给你一个字符串
word
,统计并返回word
中 元音子字符串的数目 。
// 判断字符是否为元音字母
int isVowel(char c) {return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
}// 检查子字符串是否仅由元音字母组成且包含全部五种元音字母
int isValidVowelSubstring(char* word, int start, int end) {int vowelCount[5] = {0};for (int i = start; i <= end; i++) {if (!isVowel(word[i])) {return 0;}switch (word[i]) {case 'a':vowelCount[0] = 1;break;case 'e':vowelCount[1] = 1;break;case 'i':vowelCount[2] = 1;break;case 'o':vowelCount[3] = 1;break;case 'u':vowelCount[4] = 1;break;}}for (int i = 0; i < 5; i++) {if (vowelCount[i] == 0) {return 0;}}return 1;
}// 主函数,统计元音子字符串的数量
int countVowelSubstrings(char* word) {int n = strlen(word);int count = 0;// 枚举所有可能的子字符串for (int i = 0; i < n; i++) {for (int j = i; j < n; j++) {if (isValidVowelSubstring(word, i, j)) {count++;}}}return count;
}
第七天
一维数组的动态和
一维数组的动态和https://leetcode.cn/problems/running-sum-of-1d-array/
给你一个数组
nums
。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i])
。请返回
nums
的动态和。
int* runningSum(int* nums, int numsSize, int* returnSize) {*returnSize = numsSize;for (int i = 1; i < numsSize; i++) {nums[i] += nums[i - 1];}return nums;
}
每个查询的最大异或值
每个查询的最大异或值https://leetcode.cn/problems/maximum-xor-for-each-query/
给你一个 有序 数组
nums
,它由n
个非负整数组成,同时给你一个整数maximumBit
。你需要执行以下查询n
次:
- 找到一个非负整数
k < 2maximumBit
,使得nums[0] XOR nums[1] XOR ... XOR nums[nums.length-1] XOR k
的结果 最大化 。k
是第i
个查询的答案。- 从当前数组
nums
删除 最后 一个元素。请你返回一个数组
answer
,其中answer[i]
是第i
个查询的结果。
/*** Note: The returned array must be malloced, assume caller calls free().*/
int* getMaximumXor(int* nums, int numsSize, int maximumBit, int* returnSize) {int* ans = (int*)malloc(sizeof(int) * numsSize);*returnSize = numsSize;// 计算最大可能的值 2^maximumBit - 1int maxV = (1 << maximumBit) - 1;// 计算前缀异或值int xorValue = 0;for (int i = 0; i < numsSize; i++) {xorValue ^= nums[i];}// 从后往前计算最大异或结果for (int i = 0; i < numsSize; i++) {// 计算最大异或结果ans[i] = xorValue ^ maxV;// 去掉当前元素的异或值xorValue ^= nums[numsSize - 1 - i];}return ans;
}
三数之和的多种可能
三数之和的多种可能https://leetcode.cn/problems/3sum-with-multiplicity/
给定一个整数数组
arr
,以及一个整数target
作为目标值,返回满足i < j < k
且arr[i] + arr[j] + arr[k] == target
的元组i, j, k
的数量。由于结果会非常大,请返回
109 + 7
的模。
#define MOD 1000000007// 比较函数,用于 qsort
int compare(const void *a, const void *b) {return (*(int *)a - *(int *)b);
}int threeSumMulti(int* arr, int arrSize, int target) {// 对数组进行排序qsort(arr, arrSize, sizeof(int), compare);long long count = 0;// 遍历数组,固定一个元素 arr[i]for (int i = 0; i < arrSize - 2; i++) {int newTarget = target - arr[i];int j = i + 1, k = arrSize - 1;// 使用双指针法在剩余元素中寻找满足条件的 arr[j] 和 arr[k]while (j < k) {int sum = arr[j] + arr[k];if (sum < newTarget) {j++;} else if (sum > newTarget) {k--;} else {// 找到满足条件的 arr[j] 和 arr[k]if (arr[j] != arr[k]) {int leftCount = 1, rightCount = 1;// 处理重复元素 arr[j]while (j + 1 < k && arr[j] == arr[j + 1]) {leftCount++;j++;}// 处理重复元素 arr[k]while (k - 1 > j && arr[k] == arr[k - 1]) {rightCount++;k--;}// 计算满足条件的元组数量count += (long long)leftCount * rightCount;count %= MOD;j++;k--;} else {// arr[j] 和 arr[k] 相等int num = k - j + 1;// 计算组合数 C(num, 2)count += (long long)num * (num - 1) / 2;count %= MOD;break;}}}}return (int)count;
}
相关文章:
算法日常刷题笔记(2)
为保持刷题的习惯 计划一天刷3-5题 然后一周总计汇总一下 这是第二篇笔记 笔记时间为2月17日到2月23日 第一天 找到初始输入字符串 找到初始输入字符串 Ihttps://leetcode.cn/problems/find-the-original-typed-string-i/ Alice 正在她的电脑上输入一个字符串。但是她打字技…...
C# httpclient 和 Flurl.Http 的测试
关于C#调用接口或Post,Flurl封装了httpclient, CSDN有哥们提供了一个公网的测试网站,可以测试Post调用,我写了2个函数,测试httpclient和Flurl使用Post: async 和 await 是成对使用的,为了接受web异步返回的数据,winfor…...
关于ES中text类型时间字段范围查询的结构化解决方案
前言 有关es中text类型的时间字段范围查询的问题,比如: {"query": {"range": {"insertTime": {"gte": "2025-02-01T00:00:00","lte": "2025-11-30T23:59:59","format&quo…...
四元数 欧拉角
orientation 是表示物体在三维空间中的 旋转姿态 的数据结构。它通常使用 四元数(Quaternion) 来表示旋转。四元数是一种数学工具,用于描述三维空间中的旋转,相比欧拉角(Euler Angles)和旋转矩阵࿰…...
Linux项目自动化构建工具-make/Makefile (linux第六课)
目录 背景 介绍 依赖关系的格式 依赖方法的格式 原理 背景 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定…...
Java 登录框架
Java框架中常用的几种成熟的token生成框架对比 - 白露~ - 博客园 SpringBoot整合sa-token,jwt登录及拦截器鉴权Demo_只有在集成 sa-token-jwt 插件后才可以使用 extra 扩展参数-CSDN博客 推荐一款轻量级权限认证框架Sa-Token,集成JWT和Redis轻松实现认…...
人工智能、机器学习、深度学习和大语言模型之间的关系
人工智能(AI)、机器学习(ML)、深度学习(DL)和大语言模型(LLM)之间是逐层包含且技术递进的关系,具体如下: 1. 层级关系 人工智能(AI)…...
项目组合管理:优化项目选择与资源分配——从战略到实战的全流程指南
在复杂的商业环境中,企业往往需要同时推进多个项目以支撑战略目标。然而,资源有限、目标冲突、优先级模糊等问题常导致项目失败或资源浪费。项目组合管理(Project Portfolio Management, PPM) 正是解决这一痛点的系统性方法。它通…...
zabbix排障-zabbix监控的主机出现可用性灰色或者红色问题
目录 解决zabbix-agent可用性灰色的办法: 解决zabbix可用性红色的方法: 在zabbix日常的使用中 我们会遇到很多的问题 就比如今天我做好zabbix-server和zabbix-agent两台机器的配置 然后在wen页面上发现两台主机都有可用性的问题 如下图 解决zabbix-agent可用性灰色的办法: …...
C语言(13)------------>do-while循环
1.do-while循环的语法 我们知道C语言有三大结构,顺序、选择、循环。我们可以使用while循环、for循环、do-while循环实现循环结构。之前的博客中提及到了前两者的技术实现。可以参考: C语言(11)------------->while循…...
2025-spring boot 之多数据源管理
1、是使用Spring提供的AbstractRoutingDataSource抽象类 注入多个数据源。 创建 DataSourceConfig 配置类 通过spring jdbc 提供的带路由的抽象数据源 AbstractRoutingDataSource import org.springframework.beans.factory.annotation.Autowired; import org.springframew…...
自动驾驶两个传感器之间的坐标系转换
有两种方式可以实现两个坐标系的转换。 车身坐标系下一个点p_car,需要转换到相机坐标系下,旋转矩阵R_car2Cam,平移矩阵T_car2Cam。点p_car在相机坐标系下记p_cam. 方法1:先旋转再平移 p_cam T_car2Cam * p_car T_car2Cam 需要注…...
DeepSeek 细节之 MoE
DeepSeek 细节之 MoE DeepSeek 团队通过引入 MoE(Mixture of Experts,混合专家) 机制,以“分而治之”的思想,在模型容量与推理成本之间找到了精妙的平衡点,其中的技术实现和细节值得剖思 Transformer 演变…...
SeaCMS V9海洋影视管理系统报错注入
漏洞背景 SQL 注入攻击是当前网络安全中最常见的一种攻击方式,攻击者可以利用该漏洞访问或操作数据库,造成数据泄露或破坏。通常发生在开发人员未能正确处理用户输入时。 在 SeaCMS V9 中,用户输入(如登录、评论、分页、ID 等&a…...
Cannot deserialize instance of java.lang.String out of START_ARRAY token
这个错误 Cannot deserialize instance of java.lang.String out of START_ARRAY token 表示 Jackson 正在尝试将一个 JSON 数组反序列化成一个 String 类型的字段,但是 JSON 中传递的是一个数组而不是单一的字符串。 具体来说,这段堆栈信息:…...
LeetCode 解题思路 1(Hot 100)
解题思路: 使用哈希表优化查找:利用哈希表存储已遍历元素的值及其索引,将查找时间从O(n)降至O(1)。一次遍历:遍历数组,对每个元素计算其补数(target - nums[i]),若补数存在于哈希表…...
js中的await与async的使用
以下两个方法,区别只在有没有catch,使用的时候却要注意 // 封装请求方法,同步loading状态出去 export const fetchWithLoading async (fn: Function, params: any, loading: Ref) > {loading.value true;try {return await fn(params);…...
蓝耘科技上线 DeepSeek 满血版,500万tokens免费送
🌟 嗨,我是Lethehong!🌟 🌍 立志在坚不欲说,成功在久不在速🌍 🚀 欢迎关注:👍点赞⬆️留言收藏🚀 🍀欢迎使用:小智初学…...
【入门音视频】音视频基础知识
🌈前言🌈 这个系列在我学习过程中,对音视频知识归纳总结的笔记。因为音视频相关讲解非常稀少,所以我希望通过这个音视频系列,跟大家一起学习音视频,希望减少初学者在学习上的压力。同时希望也欢迎指出文章的…...
w~视觉~合集13
我自己的原文哦~ https://blog.51cto.com/whaosoft/13384038 #xxx w视觉合集13~17没了.... #ViTAR 作者提出了一种新颖的架构:任意分辨率的视觉 Transformer (ViTAR)。ViTAR中的自适应标记合并功能使模型能够自适应地处理可变分辨率图像…...
DeepSeek+Kimi 一键生成100种PPT
一 简介 PPT在工作中经常用到,无论是给老板汇报,还是同事、朋友之间的分享,或是去见投资人:) ,都离不开它,然而写PPT经常让人感觉不胜其烦,无论是逻辑的展开、还是页面的布局、字体、配图,都像个…...
【Qt之QQuickWidget】QML嵌入QWidget中
由于我项目开始使用Widgets,换公司后直接使用QML开发,没有了解过如何实现widget到qml过渡,恰逢面试时遇到一家公司希望从widget迁移到qml开发,询问相关实现,一时语塞,很尴尬,粗略研究并总结下。 对qwidget嵌…...
Apache Flink CDC (Change Data Capture) mysql Kafka
比如使用 Flink CDC , 监听mysql bin-log日志实现数据的实时同步, 发送到kafka springboot整合flink cdc监听数据库数据 阿里开源的神仙工具,完美实现数据同步!#程序员阿里开源的这个神器很好很强大。阿里开源的这个神器全面超越Canal,果然在…...
Week1_250217~250223_OI日志(待完善)
W1_250217~250223_OI日志 250217大致安排题目 250218大致安排题目 250219大致安排 250217 大致安排 上午讲了树上启发式合并,中午和下午补了上午的题,额外做了一道。 题目 U41492 树上数颜色 (老师自己出的,实在是太典中点了&…...
线性模型 - 学习总结
本文对前面博文中所学的机器学习的知识进行总结,以便整体上加深对机器学习的理解。 一、机器学习三要素:模型、学习准则、优化算法 机器学习是从有限的观测数据中学习(或“猜测”)出具有一般性的规律,并 可以将总结出来的规律推广应用到未观…...
IP----访问服务器流程
1.访问服务器流程 1.分层 1.更利于标准化 2.降低层次之间的关联性---每一层都只完成自身层次所执行的功能--每一层都在下层的基础上提供增值服务 1.应用层 抽象语言---编码---提供人机交互的接口 2.表示层 编码--二进制,压缩解压缩、格式转换 3.会话层 建立…...
Visual Studio 中 C/C++ 函数不安全警告(C4996)终极解决方案:分场景实战指南
问题描述 在 Visual Studio 中编写 C/C 代码时,使用 scanf、strcpy、fopen 等传统函数会触发以下警告: C4996: xxx: This function or variable may be unsafe. Consider using xxx_s instead. 根本原因: 这些函数缺乏缓冲区溢出检查&#…...
DeepSeek写俄罗斯方块手机小游戏
DeepSeek写俄罗斯方块手机小游戏 提问 根据提的要求,让DeepSeek整理的需求,进行提问,内容如下: 请生成一个包含以下功能的可运行移动端俄罗斯方块H5文件: 核心功能要求 原生JavaScript实现,适配手机屏幕 …...
小程序高度问题背景scss
不同的机型,他的比例啥的都会不一样,同样的rpx也会有不同的效果。所以这里选择了取消高度。 <view class"box-border" :style"{padding-top: ${navHeight}px,}"><!-- 已登录 --><view v-if"userStore.userInfo&…...
浅析 DeepSeek 开源的 FlashMLA 项目
浅析 DeepSeek 开源的 FlashMLA 项目 DeepSeek 开源周 Day 1(2025 年 2 月 24 日)放出的开源项目——FlashMLA,是一款针对 Hopper 架构 GPU 高效多层级注意力 (Multi-Level Attention, MLA) 解码内核,专门为处理变长序列问题而设…...
【Blender】二、建模篇--08,小狐狸角色建模
这堂课呢 我们来完成本套课程建模片的最后一个模型 小狐狸 这堂课呢 主要想让大家一起走一遍角色建模的一个基本流程 让你以后遇到类似的模型时候有一个基本的建模思路 那我们现在就开始吧 2 00:00:16,830 --> 00:00:24,390 我们还是在我们之前建模马拉松的那个文件里面继…...
【Gin-Web】Bluebell社区项目梳理6:限流策略-漏桶与令牌桶
本文目录 一、限流二、漏桶三、令牌桶算法四、Gin框架中实现令牌桶限流 一、限流 限流又称为流量控制,也就是流控,通常是指限制到达系统的并发请求数。 限流虽然会影响部分用户的使用体验,但是能一定程度上保证系统的稳定性,不至…...
MySQL 数据库基础
1. MySQL 数据库基础 在这一部分,我们将学习 MySQL 的基本概念和常见的数据库操作,帮助你掌握如何创建数据库、表,并进行数据的增、删、改操作。同时,我们还会探讨一些常见的错误示例及其原因,帮助你避免常见的陷阱。…...
如何查看java的字节码文件?javap?能用IDEA吗?
编译指令: javac YourProject.java 查看字节码文件的指令: javap -c -l YourProject.class 不添加-c指令就不会显示字节码文件: 不添加 -l 就不会显示源代码和字节码文件的对应关系: 添加-l之后多出来这些: IDEA不太…...
实战技巧:如何快速提高网站收录的权威性?
快速提高网站收录的权威性是一个系统性的工作,涉及内容质量、网站结构、外部链接、用户体验等多个方面。以下是一些实战技巧,可以帮助你快速提升网站收录的权威性: 一、提升内容质量 原创性: 确保网站内容具备高质量与原创性&a…...
详解传输层协议TCP/UDP
传输层 传输层是OSI模型的第四层,主要负责端到端的数据传输,确保数据可靠、有> 序地从源设备传送到目标设备。其主要功能包括: 端到端通信:在源和目标设备之间建立连接,确保数据准确传输。数据分段与重组࿱…...
案例|某开关站室外轮式巡检机器人解决方案
随着电网规模的扩大和复杂性的增加,传统的GIS开关设备巡视工作面临着巨大的挑战。人工巡视不仅劳动强度大、效率低,而且难以保证巡视的准确性和全面性。此外,GIS设备通常位于复杂的环境中,如高海拔、高湿度、强电磁干扰等…...
穿越虚拟与现实:解密Linux进程的地址空间
在 Linux 操作系统中,每个进程都有独立的虚拟地址空间。虚拟地址空间是操作系统为每个进程提供的抽象内存模型,它使得每个进程都觉得自己拥有独立的内存,而不需要关心物理内存的具体布局。本文将深入探讨 Linux 进程的虚拟地址空间及其管理机…...
什么是MySql的主从复制(主从同步)?
主页还有其他面试题总结,有需要的可以去看一下,喜欢的就留个三连再走吧~ 1.什么是MySql的主从复制原理? 主从复制的核心就是二进制binlog(DDL(数据定义语言)语句和DML(数据操纵语言)…...
C++面向对象编程技术研究
一、引言 面向对象编程(OOP)是一种程序设计方法,它将现实世界中的实体抽象为“对象”,并通过类和对象来实现程序的设计。OOP的核心思想包括封装、继承和多态,这些特性使得程序更加模块化、易于扩展和维护。C作为一种支…...
MySQL 连表查询:原理、语法与优化
目录 引言 什么是连表查询? 连表查询的类型 1. 内连接(INNER JOIN) 2. 左连接(LEFT JOIN) 3. 右连接(RIGHT JOIN) 4. 全连接(FULL JOIN) 5. 交叉连接(…...
力扣2382. 删除操作后的最大子段和
力扣2382. 删除操作后的最大子段和 题目 题目解析及思路 题目要求找到每次删除一个元素的最大字段和 因为删除不好做,可以转删除为添加,用并查集维护当前子段和 两部分合并(两个并查集),三部分求和(两个并查集和一个元素) 代码 class S…...
PMP--题库--一模--纯问题
文章目录 单选题 (每题1分,共170道题)1、 [单选] 根据项目的特点,项目经理建议选择一种敏捷方法,该方法限制团队成员在任何给定时间执行的任务数。此方法还允许团队提高工作过程中问题和瓶颈的可见性。项目经理建议采用…...
C++核心指导原则: 错误处理
C Core Guidelines 整理目录 哲学部分接口(Interface)部分函数部分类和类层次结构部分枚举部分资源管理部分性能部分错误处理 E: Error handling E.1: Develop an error-handling strategy early in a design 翻译: 在设计早期制定一个错误处理策略。原因: 为确保代码的健壮…...
豆包、扣子等产品如何与CSDN合作?
要实现CSDN开发者社区与豆包、扣子等产品的深度合作,构建创作者Agent生态体系,可通过以下结构化方案实现技术、生态与商业价值的闭环(含具体实施路径与数据指标): 一、战略合作框架搭建 开放平台互通 建立三方API网关&…...
C#开发——ConcurrentDictionary集合
ConcurrentDictionary<TKey, TValue> 是 C# 中一个专为多线程场景设计的线程安全字典集合,位于 System.Collections.Concurrent 命名空间中。它允许多个线程同时对字典进行读写操作,而无需额外的同步措施。 一、集合特征 此集合有如下特征…...
CSS `transform` 属性详解:打造视觉效果与动画的利器
CSS transform 属性详解:打造视觉效果与动画的利器 引言一、transform 属性简介二、平移(Translation)三、旋转(Rotation)四、缩放(Scale)五、倾斜(Skew)六、组合变换&am…...
Python 进阶特性深度解析:从语法糖到内存管理的统一视角
生成式(推导式)的用法与内存效率分析 Python 的推导式不仅仅是语法糖,它们在内存管理和性能方面有着深刻的影响。理解推导式的工作原理,有助于我们写出更高效的代码。 推导式的内存模型分析 列表推导式在 CPython 解释器中的实现实际上比等价的 for 循环更为高效: # 列…...
eclipse配置Spring
1、从eclipse下载Spring工具 进入 help – install new software… ,如下图: 点击 add ,按以下方式输入: Name : Spring Location : http://dist.springsource.com/release/TOOLS/update/e4.10/ 之后点击 add ,等待…...
属性绑定
双大括号不能在html属性中使用,想要响应式地绑定一个属性,应用v-bind指令 <script > export default{data(){return{dynamicId:"appid",dynamicClass:"appclass"}} } </script><template><div v-bind:id"…...