算法笔记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;
}
相关推荐
Xing-Zhuang34 分钟前
C++笔记
开发语言·c++·笔记
赵玄月1 小时前
网络工程实验四:NAT的配置
网络·数据结构·经验分享·笔记·智能路由器
Petal9909121 小时前
UEFI学习笔记(十八):ARM电源管理之PSCI和SCMI概述
arm开发·笔记·学习·uefi
技术拾荒者2 小时前
Day02_AJAX综合案例 (黑马笔记)
网络·笔记·ajax
热爱计算机的小马2 小时前
虚拟存储器管理(深入理解计算机系统期末周突击笔记)
笔记
[小瓜]2 小时前
高级AI记录笔记(三)
人工智能·笔记·学习·ue5·虚幻
2301_815389372 小时前
【笔记】关于git和GitHub和git bash
笔记
赵玄月3 小时前
网络工程实验三:DHCP的配置
网络·经验分享·笔记·智能路由器
羊村积极分子懒羊羊4 小时前
2024.11.18晚Linux复习课笔记
linux·运维·笔记
Katherine10295 小时前
Python 笔记之单例
javascript·笔记·python