算法题常用

本文主要介绍两种经典算法问题的解决方案:一是给定一个由0和1组成的二维矩阵,如何找到其中最大的1组成的正方形的面积;二是如何找到字符串中最长的无重复字符子串。对于二维矩阵问题,通过理解参数含义,可以使用双指针策略找到最大正方形的面积。而对于最长子串问题,同样采用双指针技巧,通过滑动窗口来避免重复字符。文章提供了详细的题目解析和代码实现。
摘要由CSDN通过智能技术生成

前言

主要列举一些经典的算法思路

参数解析

这里说明下c语言的话在解题的时候会给出一些参数,如果不能真确的理解这些参数的意义,那么题目中参数赋值就没意义了。

题目

给定一个由 ‘0’ 和 ‘1’ 组成的2维矩阵,返回该矩阵中最大的由 ‘1’ 组成的正方形的面积。输入的矩阵是字符形式而非数字形式。
输入:
[[1,0,1,0,0],[1,0,1,1,1],[1,1,1,1,1],[1,0,0,1,0]]
复制
返回值:
4

题目解析:

意思输入一个二维的矩阵,求1围成的面积
如下所示,注意这里的1 0 均为字符。
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0

然后他给的这个函数原型是这样的
int solve(char** matrix, int matrixRowLen, int* matrixColLen ) {
// write code here
}

函数解析

  1. matrix 二维指针毋庸置疑,因为传入是是一个二维数组嘛,
  2. matrixRowLen这个代表的是我二维数组有多少行,
  3. matrixColLen 这其实代表一个数组每个数组的元素代表这个行有多少列

这里可能有的人就不理解了,我们撇开这道题目来说
我举个例子
char *arr[6] ={
“1234”,
“12333”,
“25”
}

我们对应这个函数来说
int solve(char** matrix, int matrixRowLen, int* matrixColLen ) {

  1. matrix 其实就是arr的地址
  2. matrixRowLen其实就是3行
  3. matrixColLen 其实是另一个数组他的值是{4,5,2}
  4. 只不过上面的比较特殊matrixColLen 的元素都是5

最长子串

子串是连续的子集,子序列不要求字母的连续性
在这里插入图片描述

题解

  1. 这种题目一般就是使用双指正一头一尾,不停滑动。
  2. 头部出现相同的字母
    直接移除第一位即可,比如abc abc
  3. 中间出现相同的字母(每添加一个字母就要和前面的所有字母对比一下)
    就需要在来一个循环判断是否中间有重复的, abcd c abdef 这种
  4. 注意特殊情况要在开始就拦截
int lengthOfLongestSubstring(char * s){
    int len = strlen(s);
    int start,end,i,max;

    start=end=max=0;  //必须
    if(len=0){
        return 0;   //必须
    }
    while(s[end] != '\0') {
        i= start;
        while(i<end){
            if(s[i] == s[end]) {
                start = i+1; //如果
            }
            i++;
        }
        end++;
        max = max > (end - start) ? max :  (end - start);
    }
    return max;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值