刷leetcode,锻炼编程能力(c++)

2023-05-16

力扣20 ,有效的括号 ,栈

#include<bits/stdc++.h>
using namespace std;
int main(){
	string s;
	cin >> s;
	stack<char> z;
    int i=0;
    while(s[i]!='\0'){
        if(s[i] == '('||s[i]=='['||s[i]=='{'){
            z.push(s[i]);
        }else{
        	if(z.size()==0){
        		printf("false");
                return 0;
			}
            if(s[i]==')'&&z.top()=='(')z.pop();
            else if(s[i]==']'&&z.top()=='[')z.pop();
            else if(s[i]=='}'&&z.top()=='{')z.pop();
            else {
                printf("false");
                return 0;
            }
        }
        i++;
    }
    if(z.size()==0){
    	printf("true");
	}else{
		printf("false");
	}
    return 0;
}

力扣206,链表反转(面试考)
定义一个永远指向第一个元素的dummy指针,让head指针固定不变,将head.next接在前面实现反转。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode *dummy = head;
        while(head!=NULL&&head->next!=NULL){
            ListNode *cdummy = dummy;
            ListNode *hnext = head->next;
            dummy = hnext;
            head->next = hnext->next;
            hnext->next = cdummy;
        }
        return dummy;
    }

};

力扣389,找不同,s串中出现就减,t串中出现就加。哈希表
理解一下s[i]-‘a’, char z=i+‘a’;

class Solution {
public:
    char findTheDifference(string s, string t) {
        int ls=s.length(),lt=t.length();
        int n[26]={0},i;
        for(i=0;i<ls;i++){
            n[s[i]-'a']--;
        }
        for(i=0;i<lt;i++){
            n[t[i]-'a']++;
        }
        for(i=0;i<26;i++){
            if(n[i]!=0){
                char z=i+'a';
			    return z;
            }
        }
        return ' ';
    }
};

力扣496,找下一个最大值,数据结构,栈加哈希表(值得背一背)
在这里插入图片描述

class Solution {
public:
    vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
        stack<int> a;
        map<int,int> b;
        int l1=nums1.size(),l2=nums2.size(),i;
        for(i=0;i<l2;i++){
            while(a.size()!=0&&nums2[i]>a.top()){
                int t=a.top();
                b[t]=nums2[i];
                a.pop();
            }
            a.push(nums2[i]);
        }
        while(a.size()!=0){
            int t=a.top();
            b[t]=-1;
            a.pop();
        }
        vector<int> ans(l1,-1);
        if(l1==0) return ans;
        for(i=0;i<l1;i++){
            ans[i]=b[nums1[i]];
        }
        return ans;
    }
};

力扣141,快慢指针判断循环链表。如果慢指针追上了快指针,就说明是循环链表。
在这里插入图片描述

/**
*Definition for singly-linked list.
*struct ListNode{
*	  int val;
*	  ListNode *next;
*	  ListNode(int x):val(x),next(NULL){}
*};*/
class Solution{
public:
	bool hasCycle(ListNode *head){
		ListNode *s=head,*q=head;
		if(haed==NULL) return false;
		//只需要判断快指针,因为快指针存在,慢指针也会存在
		while(q!=NULL&&q->next!=>NULL&&q->next->next!=NULL){//这三个指针必须同时都存在,否则会越界
			s=s->next;
			q=q->next->next;
			if(s==q) return true;
		}
		return false;
	}
}

力扣704,二分法。。。啥也不说了,背哇
关键:high=nums.size()-1; (low<=high) high=mid-1; low=mid+1;

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int mid,low=0,high=nums.size()-1;
        if(nums.size()==1) {
            if(nums[0]==target) return 0;
            else return -1;
        }
        while(low<=high){
            mid=(high+low)/2;
            if(nums[mid]==target){
                return mid;
            }else if(nums[mid] > target){
                high = mid-1;
            }else if(nums[mid] < target){
                low = mid+1;
            }
            
        }
        return -1;
    }
};

力扣1456,定长子串中元音的最大数目,滑动窗口

class Solution {
public:
    int maxVowels(string s, int k) {
        set<char> yy;
        yy.insert('a');
        yy.insert('e');
        yy.insert('i');
        yy.insert('o');
        yy.insert('u');
        int i,l=s.length();
        int coust=0,ans=0;
        for(i=0; i<k; i++){
            if(yy.find(s[i])!=yy.end()){
                coust++;
            }
            ans=max(ans,coust);
        }
        for(i=k; i<=l; i++){
            if(yy.find(s[i]) != yy.end() ){
                coust++;
            }
            if(yy.find(s[i-k]) != yy.end() ){
                coust--;
            }
            if(coust<=k){
                ans=max(ans,coust);
            }
        }
        return ans;
    }
};

力扣22,括号生成,回溯法

class Solution {
public:
    
    vector<string> generateParenthesis(int n) {
        vector<string> result;
        hishu(result,0,0,n,"");
        return result;
    }
    void hishu(vector<string>& result,int left,int rigth,int n, string str){
        if(left==rigth&&rigth==n){
            result.push_back(str);
            return;
        }
        if(left<rigth){
            return;
        }
        if(left<n) {
            hishu(result,left+1,rigth,n,str+"(");
        }
        if(left>rigth){
            hishu(result,left,rigth+1,n,str+")");
        } 

    }
};

力扣78

class Solution {
public:
    vector<vector<int>> ans;
    vector<int> tmp;
    vector<vector<int>> subsets(vector<int>& nums){
        dfs(nums,0);
        return ans;
    }
    void dfs(vector<int>& nums,int num){
        if(num==nums.size()){
            ans.push_back(tmp);
            return;
        }
        tmp.push_back(nums[num]);

        dfs(nums,num+1);
        tmp.pop_back();
        dfs(nums,num+1);
    }
};

力扣200 岛屿数量(dfs)

class Solution {
public:
    int numIslands(vector<vector<char>>& grid) {
        int hang=grid.size(),lie=grid[0].size();
        int i,j,ans=0;
        for(i=0;i<hang;i++){
            for(j=0;j<lie;j++){
                if(grid[i][j]=='1'){
                    ans++;
                   dfs(grid,i,j,hang,lie); 
                }
            }
        }
        return ans;
    }
    void dfs(vector<vector<char>>& grid,int nhang,int nlie,int hang,int lie){
        if(nhang<0||nhang >= hang||nlie<0||nlie >= lie) return;
        if(grid[nhang][nlie]=='0') return;
        grid[nhang][nlie]='0';
        dfs(grid,nhang+1,nlie,hang,lie);
        dfs(grid,nhang,nlie+1,hang,lie);
        dfs(grid,nhang-1,nlie,hang,lie);
        dfs(grid,nhang,nlie-1,hang,lie);
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

刷leetcode,锻炼编程能力(c++) 的相关文章

随机推荐

  • ROS实践(1)-环境搭建

    一 介绍 ROS官网 xff1a http www ros org ROS中文社区 xff1a http www robotos net forum php ROS版本 xff1a ROS的版本名称是按字母顺序E F G H I J排列的
  • ROS实践(6)-自建示例

    一 单topic 1 初始化环境 创建路径 dev mytest xff0c 并加入环境变量 xff1a root 64 yangkai04 Inspiron 3650 dev pwd root dev vim bashrc export
  • Python Django之密码的加密和解密

    通过django自带的类库 xff0c 来加密解密很方便 xff0c 下面来简单介绍下 xff1b 导入包 xff1a code class sourceCode python hljs span class im span class h
  • KCU105 XDMA 测试

    rdf0307 kcu105 trd03 2017 3 kcu105 axis dataplane hardware vivado scripts ug920 kcu105 pcie streaming data plane trd pdf
  • Ubuntu 配置 boa 服务器

    原文 xff1a http www linuxidc com Linux 2011 08 39780p3 htm Ubuntu上编译使用boa服务器的教程文章 xff0c 已经有很多了 xff0c 博客上也有很多人写了 xff0c 我就不赘
  • 阿里云docker方式搭建CAS服务端-最新版

    现在网上查到的CAS服务端搭建方式都比较老 xff0c 坑也很多 docker镜像直接使用官方的 xff0c 便于今后无缝升级 cas现时点最新版本为6 3 1 创建工作目录 mkdir home cas 以下操作都在该目录下执行 2 生成
  • 0、清华大学开源软件镜像站linux系统镜像下载地址

    https mirrors tuna tsinghua edu cn
  • 使用SSH公钥(id_dsa.pub)实现免密码登录

    使用SSH公钥 id dsa pub 实现免密码登录 博客分类 xff1a linux shell ssh 免密码 公钥 首先 xff0c 在本地机器上产生公钥 xff1a Java代码 root 64 localhost ssh ssh
  • 6.1、startx命令怎么不能进入图形界面

    命令行界面输入startx命令怎么不能进入图形界面 复制链接 发表于 2010 1 29 12 55 来自 51CTO网页 只看他 楼主 我在虚拟机 xff08 vmware xff09 上新安装的red hat linux 9 0在命令行
  • 7.1、mysql mha 主从自动切换 高可用

    是这个博主写的 xff0c 但是找不到地址了 写了他的另一个MHA地址 感谢原创的贡献 mysql mha 主从自动切换 高可用 mha xff08 Master High Availability xff09 目前在MySQL多服务器 x
  • 7.3、mysql主主循环备份数据库

    绿色部分是我根据需要自己写的 mysql 主主互备 双机热备的概念简单说一下 xff0c 就是要保持两个数据库的状态自动同步 对任何一个数据库的操作都自动应用到另外一个数据库 xff0c 始终保持两个数据库数据一致 这样做的好处多 1 可以
  • 7.4、Slave_SQL_Running: No mysql同步故障解决方法

    Slave SQL Running No mysql同步故障解决方法 2010 02 21 16 31 30 标签 xff1a mysql 数据库 同步 双机 休闲 原创作品 xff0c 允许转载 xff0c 转载时请务必以超链接形式标明文
  • 7.5、mysql破解密码

    找不到原创了 xff0c 百度了一下 xff0c 这个比较像 感谢原创的贡献 vi etc my cnf 在配置文件中加入 s kip grant tables mysqld safe skip grant tables amp 最佳答案
  • Scrum实践系列之三--敏捷教练的修炼之路

    敏捷教练与项目经理 在被奉为 项目管理圣经 的PMBOK中 xff0c 对项目经理在各阶段的职责有着清晰的界定 xff0c 比如项目经理制定规则 安排进度 监控执行中的各项风险并实时汇报状态 xff0c 等等 然而在敏捷的世界里 xff0c
  • 知识图谱_概述:课程PPT+个人理解

    2019 05 08 一 概念 xff08 是什么 xff09 1 知识 xff1a 有不同的解释 xff0c 可以是 不变的真理 经验 背景 解释 交工的信息 xff08 1 xff09 分类 陈述性知识 gt 描述客观事物的性状和关系等
  • chatgpt

    transformer GitHub Topics GitHub
  • Apollo:source cyber/setup.bash的作用

    source cyber setup bash 是在使用Apollo开发过程中 xff0c 用于加载Apollo软件的配置以及环境变量的脚本 Apollo是一款自动驾驶开发平台 xff0c cyber是其中的一个核心模块 xff0c 提供了
  • 什么样的人当不好程序员?

    什么样的人当不好程序员 xff1f 2016 01 21 程序员之家 来源 xff1a 36Kr 译文 xff1a http 36kr com p 5042433 html 原文 xff1a https goo gl jLfUFq 软件蚕食
  • java基础语法(顺便回顾cpp语法并比较与java的异同)

    变量 标识符 关键字与数据类型 1 标识符命名风格约定 xff1a 不能以数字开头 xff0c 也不能有 等符号 可以有 和 但不用作开头 方法名 变量名首单词小写 xff0c 其余单词首字母大写 如anyVariableName 类名 接
  • 刷leetcode,锻炼编程能力(c++)

    力扣20 xff0c 有效的括号 xff0c 栈 span class token macro property span class token directive keyword include span span class toke