算法笔记day04

目录

[1. 在字符串中找出连续最长的数字串](#1. 在字符串中找出连续最长的数字串)

2.岛屿数量

3.拼三角


1. 在字符串中找出连续最长的数字串

字符串中找出连续最长的数字串_牛客题霸_牛客网 (nowcoder.com)

算法思路:

这是一道简单的双指针题目,首先用i遍历数组,当遍历到数字的时候,i向后便利,使用count记录下数字的长度。如果数字的长度 count 大于 历史的最大长度 maxcount,更新 最大长度的起始位置maxi,和maxcount。

cpp 复制代码
#include <iostream>
#include<string>
using namespace std;

int isnumb(char s)//判断是否是数字
{
    return s >= '0' && s <= '9';
}


int main() {
    string s ;
    cin>>s;

    int maxi = -1;//最大长度数字串的起始位置
    int maxcount = 0;//历史最大长度
    int  i = 0;
    while(i < s.size())
    { 
       int count = 0;//记录当前数字串的长度 
       while(i < s.size()&&isnumb(s[i]))       
        {
            count++;
            i++;
         }
         if(count > maxcount)//当前数字串是否比历史最大长度大
         {
           maxi = i-count;
           maxcount = count;
         }
         i++;
           
    }
    string ret = s.substr(maxi,maxcount);  
    cout<<ret<<endl;
 
}
// 64 位输出请用 printf("%lld")

2.岛屿数量

算法思路:

这是一道经典的搜索题,使用dfs和bfs都可以,但是dfs的代码更好写,所以使用dfs。

遍历矩阵找到一块陆地,对这块dfs,ret++ 并将周边的的陆地全部标记为已遍历过。

dfs的目的就是将这块陆地周围的陆地全部标记

cpp 复制代码
class Solution {
public:
    int m , n;//矩阵的边界
    int dx[4] = {0, 0, 1, -1};//向量数组,为了更好的遍历上下左右
    int dy[4] = {1, -1, 0, 0};
    bool vis[210][210] = { 0 };//标记当前陆地是否被遍历过
    int solve(vector<vector<char> >& grid) 
    {
       m = grid.size(), n = grid[0].size();
       int ret = 0;

        for(int i = 0; i < m; i++)
        {
            for(int j = 0; j < n; j++)
            {
                if(grid[i][j] == '1' && !vis[i][j])//找到一块没有被遍历过的陆地
                {
                    ret++;
                    dfs(grid, i ,j);
                }   
            }
        }
        return ret;
    }

    void dfs(vector<vector<char> >& grid, int i, int j)
    {
        vis[i][j] = true;//将当前位置标记
        for(int k = 0; k < 4; k++)
        {
            int x = i + dx[k], y = j + dy[k];//上下左右
            if(x >= 0 && x < m && y >= 0 && y < n && grid[x][y] == '1' && !vis[x][y])
            {   //如果x,y不越界,grid[x][y]是一块陆地,并且没有被便利过
                dfs(grid, x, y);
            }
        }
    }

};

3.拼三角

拼三角 (nowcoder.com)

算法思路:

这道题利用单调性是有取巧的做法,将输入的6个数进行排序。

这里012是数组下标的012,数组依次增大

我们那最左边的4组举例,如果 0 1 2构不成三角形,那么 0 1 3, 0 1 4, 0 1 5,必然构不成三角形,因为2是剩下最小数字,0 + 1不能大于 2,那么肯定也不能 大于 3 4 5,所以剩下3组都不需要判断了。

cpp 复制代码
#include <iostream>
#include <algorithm>
using namespace std;
int t;
int arr[6];
int main()
{
     cin >> t;
     while(t--)
     {
         for(int i = 0; i < 6; i++) cin >> arr[i];
         sort(arr, arr + 6);

         if(arr[0] + arr[1] > arr[2] && arr[3] + arr[4] > arr[5] ||
         arr[0] + arr[2] > arr[3] && arr[1] + arr[4] > arr[5] ||
         arr[0] + arr[3] > arr[4] && arr[1] + arr[2] > arr[5] ||
         arr[0] + arr[4] > arr[5] && arr[1] + arr[2] > arr[3])
         {
             cout << "Yes" << endl;
         }
         else cout << "No" << endl;
     }
 
 return 0;
}
相关推荐
Fhd-学习笔记5 小时前
《大语言模型》综述学习笔记
笔记·学习·语言模型
简知圈6 小时前
【04-自己画P封装,并添加已有3D封装】
笔记·stm32·单片机·学习·pcb工艺
YxVoyager7 小时前
GAMES101学习笔记(五):Texture 纹理(纹理映射、重心坐标、纹理贴图)
笔记·学习·图形渲染
Buring_learn7 小时前
代理模式 -- 学习笔记
笔记·学习·代理模式
池佳齐7 小时前
《AI大模型开发笔记》DeepSeek技术创新点
人工智能·笔记
圆圆滚滚小企鹅。8 小时前
刷题记录 HOT100回溯算法-6:79. 单词搜索
笔记·python·算法·leetcode
大邳草民8 小时前
计算机网络的基础设备
笔记·计算机网络
霸王蟹9 小时前
文本复制兼容方案最佳实现落地。
前端·javascript·vue.js·笔记·学习
dal118网工任子仪10 小时前
86.(2)攻防世界 WEB PHP2
笔记·学习
会敲代码的Steve10 小时前
git笔记-简单入门
笔记·git