WordPress的目錄大綱杭州百度快照優(yōu)化排名
目錄
1. 在字符串中找出連續(xù)最長的數(shù)字串
2.島嶼數(shù)量
3.拼三角
1. 在字符串中找出連續(xù)最長的數(shù)字串
字符串中找出連續(xù)最長的數(shù)字串_??皖}霸_??途W(wǎng) (nowcoder.com)
算法思路:
這是一道簡單的雙指針題目,首先用i遍歷數(shù)組,當遍歷到數(shù)字的時候,i向后便利,使用count記錄下數(shù)字的長度。如果數(shù)字的長度 count 大于 歷史的最大長度 maxcount,更新 最大長度的起始位置maxi,和maxcount。
#include <iostream>
#include<string>
using namespace std;int isnumb(char s)//判斷是否是數(shù)字
{return s >= '0' && s <= '9';
}int main() {string s ;cin>>s;int maxi = -1;//最大長度數(shù)字串的起始位置int maxcount = 0;//歷史最大長度int i = 0;while(i < s.size()){ int count = 0;//記錄當前數(shù)字串的長度 while(i < s.size()&&isnumb(s[i])) {count++;i++;}if(count > maxcount)//當前數(shù)字串是否比歷史最大長度大{maxi = i-count;maxcount = count;}i++;}string ret = s.substr(maxi,maxcount); cout<<ret<<endl;}
// 64 位輸出請用 printf("%lld")
2.島嶼數(shù)量
?
算法思路:
這是一道經(jīng)典的搜索題,使用dfs和bfs都可以,但是dfs的代碼更好寫,所以使用dfs。
遍歷矩陣找到一塊陸地,對這塊dfs,ret++ 并將周邊的的陸地全部標記為已遍歷過。
dfs的目的就是將這塊陸地周圍的陸地全部標記
class Solution { public:int m , n;//矩陣的邊界int dx[4] = {0, 0, 1, -1};//向量數(shù)組,為了更好的遍歷上下左右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)
、
算法思路:
這道題利用單調(diào)性是有取巧的做法,將輸入的6個數(shù)進行排序。
這里012是數(shù)組下標的012,數(shù)組依次增大
?我們那最左邊的4組舉例,如果 0 1 2構(gòu)不成三角形,那么 0 1 3, 0 1 4, 0 1 5,必然構(gòu)不成三角形,因為2是剩下最小數(shù)字,0 + 1不能大于 2,那么肯定也不能 大于 3 4 5,所以剩下3組都不需要判斷了。
#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;
}