文章目录
零、写在前面
本章知识回顾:这一章主要描述了多维枚举的方法
每天会开启一篇试读文章,每日坚持打卡就可以一直白嫖哦
一、判断子序列
1.题目
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,
"ace"
是"abcde"
的一个子序列,而"aec"
不是)。进阶:
如果有大量输入的 S,称作 S1, S2, ... , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码
示例 1:
输入:s = "abc", t = "ahbgdc" 输出:true
力扣https://leetcode-cn.com/problems/is-subsequence/
2.解题
思路:在t里边找s[0]字符,找到后继续s[1],以此类推,能使s到达最后就返回true
bool isSubsequence(char * s, char * t){
if(s[0]==NULL){ //数组为空
return true;
}
int j=0;
int lenS=strlen(s); // s的长度
int lenT=strlen(t); // t的长度
int i=0;j=0;
for(j;j<lenT;j++){ //s中的字符在t里边找,找到了i后移一位,遍历到最后
if(s[i]==t[j]){
i++;
}
if(i==(lenS)){
return true; //如果能使s到最后,则可以
}
}
return false;
}
3.结果
二、搜做二维矩阵II
1.题目
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
每行的元素从左到右升序排列。
每列的元素从上到下升序排列。
示例 1:输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
输出:true
力扣https://leetcode-cn.com/problems/search-a-2d-matrix-ii/submissions/
2.解题
思路:直接2层枚举
bool searchMatrix(int** matrix, int matrixSize, int* matrixColSize, int target){
for(int i=0;i<matrixSize;++i){
for(int j=0;j<*matrixColSize;++j){ //两层循环,枚举每一个数,比较
if(matrix[i][j]==target){
return 1;
}
}
}
return 0;
}
3.结果
三、差的绝对值为k的数对个数
1.题目
给你一个整数数组 nums 和一个整数 k ,请你返回数对 (i, j) 的数目,满足 i < j 且 |nums[i] - nums[j]| == k 。
|x| 的值定义为:
如果 x >= 0 ,那么值为 x 。
如果 x < 0 ,那么值为 -x 。
示例 1:
输入:nums = [1,2,2,1], k = 1
输出:4
解释:差的绝对值为 1 的数对为:
- [1,2,2,1]
- [1,2,2,1]
- [1,2,2,1]
- [1,2,2,1]
力扣https://leetcode-cn.com/problems/count-number-of-pairs-with-absolute-difference-k/
2.解题
思路:两层枚举,
int countKDifference(int* nums, int numsSize, int k){
int ans=0;
for(int i=0;i<numsSize;++i){ //两层枚举
for(int j=i+1;j<numsSize;++j){
if(abs(nums[i]-nums[j])==k){
ans++;
}
}
}
return ans;
}
3.结果