力扣爆刷第114天之CodeTop100五连刷56-60

力扣爆刷第114天之CodeTop100五连刷56-60

文章目录

      • 力扣爆刷第114天之CodeTop100五连刷56-60
      • 一、78. 子集
      • 二、105. 从前序与中序遍历序列构造二叉树
      • 三、43. 字符串相乘
      • 四、155. 最小栈
      • 五、151. 反转字符串中的单词

一、78. 子集

题目链接:https://leetcode.cn/problems/subsets/description/
思路:求组合,元素无重,求全部子集,那么每一个节点都搜集,且组合需要起始位置,结束。

class Solution {
    List<Integer> list = new ArrayList<>();
    List<List<Integer>> resList = new ArrayList<>();
    public List<List<Integer>> subsets(int[] nums) {
        backTracking(nums, 0);
        return resList;
    }
    
    void backTracking(int[] nums, int start) {
        resList.add(new ArrayList(list));

        for(int i = start; i < nums.length; i++) {
            list.add(nums[i]);
            backTracking(nums, i+1);
            list.remove(list.size()-1);
        }
    }
}

二、105. 从前序与中序遍历序列构造二叉树

题目链接:https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal/description/
思路:很典型的题目,递归构造二叉树,为了节省时间,先用一个map记录下来根节点在中序的索引,通过这个索引,可以确定左右子树各有多少元素,由此可以敲定边界条件,把握住这个思路就可以。


class Solution {
    Map<Integer, Integer> map = new HashMap<>();
    public TreeNode buildTree(int[] preorder, int[] inorder) {
        for(int i = 0; i < inorder.length; i++) {
            map.put(inorder[i], i);
        }
        return createTree(preorder, inorder, 0, preorder.length-1, 0, inorder.length-1);
    }
    
    TreeNode createTree(int[] preorder, int[] inorder, int lp, int rp, int li, int ri) {
        if(lp > rp) return null;
        int mid = preorder[lp];
        int in = map.get(mid);
        TreeNode root = new TreeNode(mid);
        root.left = createTree(preorder, inorder, lp+1, lp+in-li, li, in-1);
        root.right = createTree(preorder, inorder, lp+in-li+1, rp, in+1, ri);
        return root;
    }
}

三、43. 字符串相乘

题目链接 :https://leetcode.cn/problems/multiply-strings/description/
思路:两数相乘的结果要存入的位置分别为i+j和i+j+1,把握住这个然后控制好边界条件即可。
在这里插入图片描述

class Solution {
    public String multiply(String num1, String num2) {
        int m = num1.length(), n = num2.length();
        int[] nums = new int[m+n];
        for(int i = m-1; i >= 0; i--) {
            for(int j = n-1; j >= 0; j--) {
                int x = (num1.charAt(i) - '0') * (num2.charAt(j) - '0');
                int p1 = i+j, p2 = i+j+1;
                int sum = x + nums[p2];
                
                nums[p2] = sum % 10;
                nums[p1] += sum / 10;
            }
        }
        int i = 0;
        while(i < nums.length) {
            if(nums[i] != 0) break;
            i++;
        }
        StringBuilder builder = new StringBuilder();
        while(i < nums.length) {
            builder.append(nums[i++]);
        }
        String s = builder.toString();
        return s.length() == 0 ? "0" : s;
    }
}

四、155. 最小栈

题目链接:https://leetcode.cn/problems/min-stack/description/
思路:使用两个栈,一个栈正常当栈用,另一个栈,只有元素小于栈顶元素才放入,否则重复放入栈顶元素,这样可以简化pop操作。

class MinStack {
    LinkedList<Integer> stack1 = new LinkedList<>();
    LinkedList<Integer> stack2 = new LinkedList<>();
    public MinStack() {
        
    }
    
    public void push(int val) {
        stack1.push(val);
        stack2.push(Math.min(val, stack2.isEmpty() ? val : stack2.peek()));
    }
    
    public void pop() {
        stack1.pop();
        stack2.pop();
    }
    
    public int top(){
        return stack1.peek();
    }
    
    public int getMin() {
        return stack2.peek();
    }
}


五、151. 反转字符串中的单词

题目链接:https://leetcode.cn/problems/reverse-words-in-a-string/description/
思路:经典题目,先逐个翻转单词,然后再整体翻转。

class Solution {
    public String reverseWords(String s) {
        char[] clist = s.toCharArray();
        StringBuilder b1 = new StringBuilder();
        StringBuilder b2 = new StringBuilder();
        for(int i = 0; i < clist.length; i++) {
            if(clist[i] != ' ') {
                b2.append(clist[i]);
            }else if(b2.length() != 0) {
                b1.append(b2.reverse()).append(' ');
                b2 = new StringBuilder();
            }
        }
        if(clist[clist.length-1] != ' ') b1.append(b2.reverse());
        if(b1.charAt(b1.length()-1) == ' ') b1.deleteCharAt(b1.length()-1);
        return b1.reverse().toString();
    }
   
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/525035.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一文了解RAID技术基本概念

RAID是数据存储技术&#xff0c;旨在提高磁盘的IO吞吐以及提供更为可靠的数据安全。在实际工作中经常听到RAID相关名称&#xff0c;那么RAID技术的基本概念是什么、不同RAID级别有什么特性&#xff0c;本文将简单介绍&#xff0c;以了解。 1、RAID技术基本概念 1.1 RAID基本概…

uniapp中uni.navigateTo传递变量

效果展示&#xff1a; 核心代码&#xff1a; uniapp中uni.navigateTo传递变量 methods: {changePages(item) {setDatas("maintenanceFunName", JSON.stringify(item)).then((res) > {uni.navigateTo({url: /pages/PMS/maintenance/maintenanceTypes/maintenanceT…

python开发poc2,爆破脚本

#本课知识点和目的&#xff1a; ---协议模块使用&#xff0c;Request 爬虫技术&#xff0c;简易多线程技术&#xff0c;编码技术&#xff0c;Bypass 后门技术 下载ftp服务器模拟器 https://lcba.lanzouy.com/iAMePxl378h 随便创建一个账户&#xff0c;然后登录进去把ip改成…

从头开发一个RISC-V的操作系统(四)嵌入式开发介绍

文章目录 前提嵌入式开发交叉编译GDB调试&#xff0c;QEMU&#xff0c;MAKEFILE练习 目标&#xff1a;通过这一个系列课程的学习&#xff0c;开发出一个简易的在RISC-V指令集架构上运行的操作系统。 前提 这个系列的大部分文章和知识来自于&#xff1a;[完结] 循序渐进&#x…

五一假期来临,各地景区云旅游、慢直播方案设计与平台搭建

一、行业背景 经文化和旅游部数据中心测算&#xff0c;今年清明节假期3天全国国内旅游出游1.19亿人次&#xff0c;按可比口径较2019年同期增长11.5%&#xff1b;国内游客出游花费539.5亿元&#xff0c;较2019年同期增长12.7%。踏青赏花和户外徒步成为假期的热门出游主题。随着…

Matlab 修改图例顺序

对于使用 .m 文件绘制的图片&#xff0c;可以修改程序中图例的顺序来改变图片的图例。如果图片所对应的 .fig 文件已经存在&#xff0c;而且不便修改源程序&#xff0c;则可以通过如下方式来修改图例&#xff1a; step 1: 打开fig文件&#xff0c;然后点击绘图浏览器 step 2&…

STC89C51学习笔记(五)

STC89C51学习笔记&#xff08;五&#xff09; 综述&#xff1a;文本讲述了代码中速写模板的创建、如何将矩阵键盘的按键与数字一一对应以及如何创建一个矩阵键盘密码锁。 一、速写模板 点击“templates”&#xff0c;再鼠标右键选择配置&#xff0c;按照以下方式即可修改一些…

【WEEK6】 【DAY7】MD5 Encryption Transactions【English Version】

2024.4.7 Sunday Following the previous article 【WEEK6】 【DAY3】MySQL Functions【English Version】 Contents 5.3. MD5 Encryption5.3.1. Introduction5.3.2. Testing MD5 Encryption5.3.2.1. Plain Text Passwords5.3.2.2. Implementing Data Encryption5.3.2.3. Encry…

位域与联合体巧妙使用

在编写dbc报文的协议解析时&#xff0c;使用位域运算和联合体的组合&#xff0c;能够巧妙解决字段解析问题&#xff0c;代码看起来整洁又健壮。 #include <algorithm> #include <iostream> #include <vector>using namespace std;typedef union tagCoreCalib…

Python爬虫:为什么你爬取不到网页数据

目录 前言 一、网络请求被拒绝 二、数据是通过JavaScript加载的 三、需要进行登录 四、网站反爬虫策略 五、网站结构变更 总结 前言 作为一名开发者&#xff0c;使用Python编写爬虫程序是一项常见的任务。爬虫程序的目的是收集互联网上的数据&#xff0c;并将其保存或使…

【漏洞复现】用友畅捷通TPlus GetStoreWarehouseByStore .net反序列化漏洞

0x01 阅读须知 “如棠安全的技术文章仅供参考&#xff0c;此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供…

【Lavavel框架】——各目录作用的介绍

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

C++ 之 【类与对象】从入门到精通一条龙服务 入门篇

不要觉的自己很没用&#xff0c;其实你还可以给家人带来温暖&#xff0c;比如爸妈看到你就来火 目录&#xff1a; 一、面向过程和面向对象初步认识 二、类的引入 三、类的定义 四、类的访问限定符及封装 1.访问限定符 2.封装 五、类的作用域 六、类的实例化 七、类的…

亚马逊云配置深度学习环境

开发环境 对于MacOS来说没无法cuda&#xff0c;所以用的是mps后端计算&#xff0c;所以也无法打印GPU数量和型号。 torch.backends.mps.is_available()如果使用PopOS的话&#xff0c;可以选择自带英伟达驱动的镜像&#xff0c;这样就可以免去复杂的驱动安装流程。 EC2 (自己…

RabbitMQ的交换机与队列

一、流程 首先先介绍一个简单的一个消息推送到接收的流程&#xff0c;提供一个简单的图 黄色的圈圈就是我们的消息推送服务&#xff0c;将消息推送到 中间方框里面也就是 rabbitMq的服务器&#xff0c;然后经过服务器里面的交换机、队列等各种关系&#xff08;后面会详细讲&am…

计算机毕业设计PHP+vue+mysql外卖订餐配送系统

本系统的设计与实现共包含17个表:分别是关于我们信息表&#xff0c;菜品分类信息表&#xff0c;菜品信息信息表&#xff0c;配置文件信息表&#xff0c;订单信息信息表&#xff0c;菜品信息评论表信息 表&#xff0c;留言反馈信息表&#xff0c;美食资讯信息表&#xff0c;配送…

白色磨砂质感html5页源码

白色磨砂质感html5页源码&#xff0c;简约的基础上加上了团队成员&#xff0c;自动打字特效音乐播放器存活时间 源码下载 https://www.qqmu.com/2980.html

牛客NC93 设计LRU缓存结构【hard 链表,Map Java】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/5dfded165916435d9defb053c63f1e84 思路 双向链表map最新的数据放头结点&#xff0c;尾节点放最老的数据&#xff0c;没次移除尾巴节点本地考察链表的新增&#xff0c;删除&#xff0c;移动节点参考答案Java im…

K8s学习四(资源调度_1)

资源调度 发现对Pod操作不方便&#xff0c;不能直接操作&#xff0c;而且不能直接编辑&#xff0c;需要对原来的配置文件进行操作&#xff0c;而且需要删除之后再创建Pod&#xff0c;不方便&#xff0c;更多是通过控制器来操作。 Label和Selector 通过设置标签和选择器来确定…

python 06实验

实验目的 &#xff08;1&#xff09;掌握Python流程控制语句&#xff0c;合理使用循环进行程序设计 &#xff08;2&#xff09;掌握Python数据结构&#xff0c;能熟练运用进行程序设计 &#xff08;3&#xff09;掌握Python的文件读写&#xff0c;能编写读取数据集的程序 1…