剑指offer-3-10

news2024/11/20 13:37:46

文章目录

  • 3.数组中的重复数字
  • 4.二维数组中的查找
  • 5.替换空格
  • 6.从尾到头打印链表
  • 7.重建二叉树(⭐)
  • 8.用两个栈实现队列
  • 10.青蛙跳台阶

3.数组中的重复数字

在这里插入图片描述
1.用set

 HashSet set1=new HashSet();
       for(int i=0;i<array.length;i++){
           if(set1.contains(array[i])){
               System.out.println(array[i]);
               break;
           }else{
               set1.add(array[i]);
           }

       }

2.用一个数组代替哈希表

	   int []array={2,3,1,0,2,5,3};
       int []hasharray=new int[array.length];
       for(int i=0;i<array.length;i++){
           if(hasharray[array[i]]>0){
               System.out.println(array[i]);
               break;
           }else{
               hasharray[array[i]]++; }
       }

4.二维数组中的查找

在这里插入图片描述
1.从右上角查找
2.查找的范围是从左下角到目前节点的小矩形,注意边界问题

public class LC04 {
    public static void main(String[] args) {
        int matrix[][]={{1, 4, 7, 11, 15},{2,5,8,12,19},
                {3,6,9,16,22},{10,13,14,17,24},{18,21,23,26,30}};
        boolean ans= findNumberIn2DArray(matrix,50);
        System.out.println(ans);
    }
    public static boolean findNumberIn2DArray(int[][] matrix, int target) {
        int row=matrix.length;
        int column=matrix[0].length;
        int temp=matrix[0][column-1];  //右上角的元素
        int i=0,j=column-1;
        while(i<row&&j>=0){  //判断不越界
            if(matrix[i][j]==target){
                return true;
            }
            if(matrix[i][j]>target){
                j--;
                
            }else{
                i++;
            }
        }
        return false;
    }
}

5.替换空格

在这里插入图片描述

public class Solution {
    public static String replaceSpace(String s) {
        StringBuilder sb=new StringBuilder();
        for(int i=0;i<s.length();i++){
            char c1=s.charAt(i);
            //if(" ".equals(c1)){
            if(c1==' '){
                sb.append("%20");
            }else{
                sb.append(s.charAt(i));
            }
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        //String s1=replaceSpace("We are happy.");
        String s1="We are happy";
        String s2=s1.replace(" ","%20");
        System.out.println(s2);
    }
}

针对于" “.equals(c1)判定失败的问题:
System.out.println(” “.equals(” “)); //true
System.out.println(” ".equals(’ ')); //false
因为c1是字符,所以不行。

replace和replaceAll是JAVA中常用的替换字符的方法

public String replace(char oldChar, char newChar) 在字符串中用newChar字符替代oldChar字符,返回一个新的字符串
public String replaceAll(String regex,String replacement)使用给定的 replacement 字符串替换此字符串匹配给定的正则表达式的每个子字符串。
区别:

1)replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSequence即字符串序列的意思,说白了也就是字符串);

2)replaceAll的参数是regex,即基于正则表达式的替换,比如,可以通过replaceAll(“\d”, “*”)把一个字符串所有的数字字符都换成星号;

相同点:

都是全部替换,即把源字符串中的某一字符或字符串全部换成指定的字符或字符串,如果只想替换第一次出现的,可以使用replaceFirst(),这个方法也是基于规则表达式的替换,但与replaceAll()不同的是,只替换第一次出现的字符串;

另外,如果replaceAll()和replaceFirst()所用的参数据不是基于规则表达式的,则与replace()替换字符串的效果是一样的,即这两者也支持字符串的操作;

还有一点注意::执行了替换操作后,源字符串的内容是没有发生改变的。

6.从尾到头打印链表

在这里插入图片描述
因为是反向的输出,所以用栈。递归也可以

public class LC06 {
    public static class ListNode {
        int val;
        ListNode next;
        ListNode(int x) {
            val = x;
        }
    }
    public static int[] reversePrint(ListNode head) {
        LinkedList<Integer> stack=new LinkedList<Integer>();
        while(head!=null){
            stack.addLast(head.val);
            stack.add(head.val);
            head=head.next;
        }
        int []ans=new int[stack.size()];
        for(int i=0;i<ans.length;i++){
            ans[i]=stack.removeLast();
        }
        return ans;
    }
    public static void main(String[] args) {
        ListNode node1=new ListNode(1);
        ListNode node2=new ListNode(2);
        ListNode node3=new ListNode(3);
        node1.next=node2;
        node2.next=node3;
        int[] a=reversePrint(node1);
        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i]);
        }
    }
}

7.重建二叉树(⭐)

在这里插入图片描述

         ~~~~~~~~          1
     ~~~~      2      ~~~~      3
4    ~~    5    ~~    6    ~~    7
前序 1 2 4 5 3 6 7
中序 4 2 5 1 6 3 7

public class LC07 {
    public static class TreeNode{
        int val;
        TreeNode leftNode;
        TreeNode rightNode;
        TreeNode(int val){
            this.val=val;
        }
    }
    static HashMap<Integer, Integer>  map = new HashMap<>();//标记中序遍历
    static int []preorder;

    public static TreeNode buildTree(int[] preorder, int[] inorder) {
        LC07.preorder =preorder;
        for (int i = 0; i < inorder.length; i++) {
        //中序数组的值  -> 值在中序数组中的位置
            map.put(inorder[i], i);
        }
        //三个索引分别为
        //当前根的的索引
        //递归树的左边界,即数组左边界
        //递归树的右边界,即数组右边界
        return recur(0,0,preorder.length-1);
    }
    
    static TreeNode recur(int pre_root, int in_left, int in_right){
        if(in_left > in_right) return null;// 相等的话就是自己
        TreeNode root = new TreeNode(preorder[pre_root]);//获取root节点
        int idx = map.get(preorder[pre_root]); //获取在中序遍历中根节点所在索引,以方便获取左子树的数量
        root.leftNode=recur(pre_root+1,in_left,idx-1);
        //右子树的根的索引为先序中的 当前根位置 + 左子树的数量 + 1
        root.rightNode=recur(pre_root+idx-in_left+1,idx+1,in_right);
        return root;
    }

    public static void main(String[] args) {
        int[] preorder={3,9,20,15,7};
        int[] inorder={9,3,15,20,7};
        TreeNode node1=buildTree(preorder,inorder);
        bfs(node1);
    }
    public static void bfs(TreeNode node){
        if(node!=null){
            System.out.println(node.val);
            bfs(node.leftNode);
            bfs(node.rightNode);
        }
    }
    
}

8.用两个栈实现队列

在这里插入图片描述
如果出队列里有值,直接出值。出队列里没值了,再把入队列里的东西全塞进出队列里。

public class LC09 {
    static class CQueue {
        Stack<Integer> A,B;

        public CQueue() {
            A=new Stack<>();
            B=new Stack<>();
        }

        public void appendTail(int value) {
            A.add(value);

        }

        public int deleteHead() {
            if(!B.isEmpty()){
                return B.pop();
            }
            if(A.isEmpty()) return -1;
            while(!A.isEmpty()){
                B.push(A.pop());
            }
            return B.pop();

        }
    }

    public static void main(String[] args) {
        CQueue q1=new CQueue();
        q1.appendTail(3);
        System.out.println(q1.deleteHead());
        System.out.println(q1.deleteHead());
        System.out.println(q1.deleteHead());
    }
}

10.青蛙跳台阶

在这里插入图片描述

public class LC10 {
    public static int numWays(int n) {
         if(n==0 || n==1) return 1;
         int a=1,b=2;
         int temp=2;
         int ans1=b;
         while(temp<n){
             ans1=(a+b)%1000000007;
             a=b;
             b=ans1;
             temp++;
         }
         return ans1;
    }
    public static void main(String[] args) {
        System.out.println(numWays(7));
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Anaconda】虚拟环境离线迁移

【Anaconda】虚拟环境离线迁移 项目中常常遇到需要在离线环境中下为anaconda安装有关深度学习的虚拟环境的问题&#xff0c;服务器设备不能连接互联网的环境。 文章目录 【Anaconda】虚拟环境离线迁移前言环境信息导出虚拟环境离线恢复虚拟环境总结 前言 为了实现Anaconda虚拟…

并行for循环,简单的改动让python飞起来

概要 Python在处理大的数据集的时候总是速度感人。代码一旦开始运行&#xff0c;剩下的时间只好满心愧疚地刷手机。 MPI&#xff08;Message Passing Interface&#xff09;是在并行计算中&#xff0c;在不同进程间传递信息的标准解决方案。mpi4py是它的python版本。 网上有大…

OpenUSD联盟:塑造元宇宙的3D未来

一、引言 近日&#xff0c;美国3D内容行业的五家主要公司苹果、英伟达、皮克斯、Adobe和Autodesk联合成立了OpenUSD联盟&#xff08;AOUSD&#xff09;。这一联盟的成立标志着元宇宙领域的一次重要合作&#xff0c;旨在制定元宇宙的3D图形标准。本文将深入探讨OpenUSD联盟的目…

配置NFS,遇到的问题总结(电脑连接WiFi,开发板和电脑直连)

我使用的正点原子的方法&#xff0c;仅展示遇到的问题。 1. 这一步&#xff0c;需要先将Ubuntu关掉&#xff0c;再进行设置。 如果设置了不显示&#xff0c;需要移出网络&#xff0c;再次添加。 先设置Windows的网络&#xff0c;再设置&#xff0c;虚拟机的网络&#xff0c;即…

idea运行web老项目

idea打开老项目 首先你要用idea打开老项目&#xff0c;这里看我之前发的文章就可以啦 运行web项目 1. 编辑配置 2. 添加tomcat项目 3. 设置tomcat参数 选择本地tomcat&#xff0c;注意有的tomcat版本&#xff0c;不然运行不了设置-Dfile.encodingUTF-8 启动&#xff0c;注意…

[openCV]基于拟合中线的智能车巡线方案V3

import cv2 as cv import os import numpy as np# 遍历文件夹函数 def getFileList(dir, Filelist, extNone):"""获取文件夹及其子文件夹中文件列表输入 dir&#xff1a;文件夹根目录输入 ext: 扩展名返回&#xff1a; 文件路径列表"""newDir d…

kafka 理论知识

1 首先要了解kafka是什么 Kafka是一个分布式的消息订阅系统 1.1 kafka存储消息的过程 消息被持久化到一个topic中&#xff0c;topic是按照“主题名-分区”存储的&#xff0c;一个topic可以分为多个partition&#xff0c;在parition(分区)内的每条消息都有一个有序的id号&am…

【基础类】—三栏页面布局的方案和优缺点

一、假设高度已知&#xff0c;中间宽度自适应&#xff0c;三栏&#xff08;列&#xff09;布局的方案有哪些&#xff1f; float浮动、absolute绝对定位、flex弹性盒子、table表格布局、grid网格布局 浮动 float <style>* {margin: 0;padding: 0;}.container {width: 1…

Stable Diffusion 硬核生存指南:WebUI 中的 CodeFormer

本篇文章聊聊 Stable Diffusion WebUI 中的核心组件&#xff0c;强壮的人脸图像面部画面修复模型 CodeFormer 相关的事情。 写在前面 在 Stable Diffusion WebUI 项目中&#xff0c;源码 modules 目录中&#xff0c;有一个有趣的目录叫做 CodeFormer&#xff0c;它就是本文的…

Vue2 第十六节 $nextTick 和 动画与过渡效果

1. $nextTick 2.过渡与动画 一. $nextTick ① 语法&#xff1a;this.$nextTick(回调函数) ② 作用&#xff1a;在下一次DOM更新结束后执行其指定的回调 nextTick所指定的回调会在DOM节点更新后执行 ③ 使用场景&#xff1a;当改变数据后&#xff0c;要基于更新后的新 DOM …

ClickHouse(十):Clickhouse表引擎 - Special系列表引擎

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术&#xff0c;IT贫道_Apache Doris,Kerberos安全认证,大数据OLAP体系技术栈-CSDN博客 &…

ad+硬件每日学习十个知识点(19)23.7.30 (LDO参数介绍)

文章目录 1.LDO的压差dropout2.线性调整率&#xff08;输入变化对输出的影响&#xff09;3.负载调整率&#xff08;负载变化对输出电压的影响&#xff09;4.纹波抑制比PSRR&#xff08;电源抑制比&#xff09;5.哪些元器件对PSRR影响大&#xff1f;&#xff08;右下角图&#x…

算法通过村——Hash和队列问题解析

算法的备胎Hash和找靠山的队列 备胎Hash Hash&#xff0c;不管是算法&#xff0c;还是在工程中都会大量使用。很多复杂的算法问题都用Hash能够轻松解决&#xff0c;也正是如此&#xff0c;在算法例就显得没什么思维含量&#xff0c;所以Hash是应用里的扛把子&#xff0c;但在算…

Flink State 和 Fault Tolerance详解

有状态操作或者操作算子在处理DataStream的元素或者事件的时候需要存储计算的中间状态&#xff0c;这就使得状态在整个Flink的精细化计算中有着非常重要的地位&#xff1a; 记录数据从某一个过去时间点到当前时间的状态信息。以每分钟/小时/天汇总事件时&#xff0c;状态将保留…

录屏功能怎么录声音?这些方法都能很好的录制

在现代社交媒体的时代&#xff0c;录制视频已成为了人们记录生活和分享经验的重要方式之一。而在录制视频的过程中&#xff0c;声音也是至关重要的一个方面。因此&#xff0c;在手机上使用录屏功能时&#xff0c;如何录制声音成为了一个常见的问题。本文将介绍如何在手机上使用…

Maven可选依赖和排除依赖简单使用

可选依赖 可选依赖指对外隐藏当前所依赖的资源 在maven_04_dao的pom.xml,在引入maven_03_pojo的时候&#xff0c;添加optional <dependency><groupId>com.rqz</groupId><artifactId>maven_03_pojo</artifactId><version>1.0-SNAPSHOT&…

python-Excel数据模型文档转为MySQL数据库建表语句(需要连接数据库)-工作小记

将指定Excel文档转为create table 建表语句。该脚本适用于单一且简单的建表语句 呈现效果 代码 # -*- coding:utf-8 -*- # Time : 2023/8/2 17:50 # Author: 水兵没月 # File : excel_2_mysql建表语句.py import reimport pandas as pd import mysql.connectordb 库名mydb m…

Excel·VBA表格横向、纵向相互转换

如图&#xff1a;对图中区域 A1:M6 横向表格&#xff0c;转换成区域 A1:C20 纵向表格&#xff0c;即 B:M 列转换成每2列一组按行写入&#xff0c;并删除空行。同理&#xff0c;反向操作就是纵向表格转换成横向表格 目录 横向转纵向实现方法1转换结果 实现方法2转换结果 纵向转横…

Socket层代码重构

src/utils新建socket.js import {io} from "socket.io-client"class Socket{constructor(){this.socket io("http://127.0.0.1:5000");}// 连接socketconnect(){this.socket.connect()}login(username,callback){// emit发送this.socket.emit(login,{&quo…

list交并补差集合

list交并补差集合 工具类依赖 <dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.8.1</version> </dependency><dependency><groupId>commons-collections&…