[万人前提计划]《C语言入门100例》(第25例) 多维枚举——习题(C语言)(超简单易懂)φ(゜▽゜*)♪

文章目录

零、写在前面

一、判断子序列

二、搜做二维矩阵II

三、差的绝对值为k的数对个数


   

零、写在前面

本章知识回顾:这一章主要描述了多维枚举的方法

【第25题】求所有 1 到 5 的全排列 | 令人窒息的 for 循环_英雄哪里出来-CSDN博客难度:★★☆☆☆,令人窒息的 for 循环https://blog.csdn.net/WhereIsHeroFrom/article/details/118273052

每天会开启一篇试读文章,每日坚持打卡就可以一直白嫖哦

一、判断子序列

1.题目

给定字符串 s 和 t ,判断 s 是否为 t 的子序列。

字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace""abcde"的一个子序列,而"aec"不是)。

进阶:

如果有大量输入的 S,称作 S1, S2, ... , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码

示例 1:

输入:s = "abc", t = "ahbgdc"
输出:true

力扣icon-default.png?t=LA92https://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

力扣icon-default.png?t=LA92https://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]

力扣icon-default.png?t=LA92https://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.结果

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空白-checkmate

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值