leetcode数据结构题解(Java实现,第一天和第二天)

news2025/2/12 16:16:40

文章目录

    • 第一天
      • 217. 存在重复元素
      • 53.最大子数组和
    • 第二天
      • 1. 两数之和
      • 88. 合并两个有序数组

第一天

217. 存在重复元素

在这里插入图片描述

题解思路:首先题目需要的是判断数组中是否存在相同的数字,存在返回true,不存在就返回false。
那么显然可以这样做,先进行排序(从小到大或从大到小均可),之后进行遍历,如果相邻两个的数值相等的话就是返回true,说明有相等的数值,否则全部遍历完之后没有相等就返回false。我们知道Java中有Arrays.sort()可以对数组进行排序,默认如果是数字的话就是从小到大,如果是字符的话就是按照字典序的顺序进行排序。

代码(力扣模板模式)

class Solution {
    public boolean containsDuplicate(int[] nums) {
       Arrays.sort(nums);//从小到大排序
       for(int i=0;i<nums.length-1;i++){
           if(nums[i]==nums[i+1]){//进行比较
               return true;
           }
       }
       return false; 
    }
}

代码(竞赛模式)

import java.util.Arrays;
import java.util.Scanner;

public class sorf_217_tijie {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String str = sc.nextLine();//先输入一个字符串,以逗号分割
		String[] strArr = str.split(",");//以逗号分割成字符串数组
		int[] int_str = new int[strArr.length];
		for(int i=0;i<strArr.length;i++) {
			int_str[i] = Integer.parseInt(strArr[i]);//遍历将字符串数组转化为整型数组
		}
		Arrays.sort(int_str);//排序
		int j=0;
		for(;j<strArr.length-1;j++) {
			if(int_str[j]==int_str[j+1]) {
				System.out.println("true");
				break;
			}
		}
		if(j==strArr.length-1) {
			System.out.println("false");
		}
	}
}

53.最大子数组和

在这里插入图片描述

解题思路:
首先引用一句话:遍历一个子串或者子序列有三种遍历方式:
1.以某个节点为头的所有子序列,如数组[a,b,c,e],以a为头的字串为【a】,【a,b】,【a,b,c】,【a,b,c,d】;以b为头的字串为【b】,【b,c】,【b,c,d】……进行遍历
2.以长度为轴进行遍历,如先遍历长度为1的字串,再遍历长度为2的字串……
3.以某个节点为尾的所有字串,如数组[a,b,c,e],以a为尾的字串为【a】;以b为尾的字串为【a,b】,【b】……进行遍历
其次本题采用第三种遍历方式:即以某个节点为尾的所有字串进行遍历和,假设有数组nums,且dp[i],表示以第i个数为尾的子串和,则dp[i]=dp[i-1]+nums[i],而要使得dp[i]是最大的子串的话,就要分在遍历的过程中,如果dp[i-1]为负数,则以第i个数为结尾的字串和即为本身,因为nums[i]加上一个负数都会使得整体值小于nums[i];dp[i-1]为正数时,此时以第i个数为结尾的字串和最大为dp[i]=dp[i-1]+nums[i]

代码(力扣模板模式)

class Solution {
    public int maxSubArray(int[] nums) {
		int[] dp = new int[nums.length];//dp[i]表示以i为尾的子串数组最大和
		dp[0]=nums[0];
		for(int i=1;i<nums.length;i++) {
			if(dp[i-1]>0) {
				dp[i]=dp[i-1]+nums[i];
			}else {
				dp[i]=nums[i];
			}
		}
		//求出dp数组中的最大值
		Arrays.sort(dp);
		return dp[nums.length-1];
    }
}

代码(竞赛模式)

import java.util.Arrays;
import java.util.Scanner;

public class 最大子数组和_53 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String str1 = sc.next();
		String[] str = str1.split(",");
		int[] nums = new int[str.length];
		for(int i=0;i<nums.length;i++) {
			nums[i]=Integer.parseInt(str[i]);
		}
		System.out.println(maxSubArray(nums));
	}
	
	public static int maxSubArray(int[] nums) {
		int[] dp = new int[nums.length];//dp[i]表示以i为尾的子串数组最大和
		dp[0]=nums[0];
		for(int i=1;i<nums.length;i++) {
			if(dp[i-1]>0) {
				dp[i]=dp[i-1]+nums[i];
			}else {
				dp[i]=nums[i];
			}
		}
		//求出dp数组中的最大值
		Arrays.sort(dp);
		return dp[nums.length-1];
	}
}

第二天

1. 两数之和

在这里插入图片描述

解题思路:
可以使用暴力解法,即两个数,对应两层for循坏进行遍历,判断nums[i]+nums[j]==target即可

代码(力扣模板模式)

class Solution {
    public int[] twoSum(int[] nums, int target) {
        //定义一个返回值的数组作为存储下标
		int[] res = new int[2];
		for(int i=0;i<nums.length;i++) {
			for(int j=i+1;j<nums.length;j++) {
				if(nums[i]+nums[j]==target) {
					res[0]=i;
					res[1]=j;
					return res;
				}
			}
		}
		return res;
    }
}

代码(竞赛模式)

import java.util.Scanner;

public class 两数之和_1 {
	public static void main(String[] args) {
		Scanner sc= new Scanner(System.in);
		String str1 = sc.next();
		String[] str = str1.split(",");
		int[] nums = new int[str.length];
		for(int i=0;i<str.length;i++) {
			nums[i] = Integer.parseInt(str[i]); 
		}
		int target=sc.nextInt();
		int[] res = twoSum(nums,target);
		System.out.println(res[0]+","+res[1]);
	}
	
	public static int[] twoSum(int[] nums, int target) {
		//定义一个返回值的数组作为存储下标
		int[] res = new int[2];
		for(int i=0;i<nums.length;i++) {
			for(int j=i+1;j<nums.length;j++) {
				if(nums[i]+nums[j]==target) {
					res[0]=i;
					res[1]=j;
					return res;
				}
			}
		}
		return res;
		
	}
}

88. 合并两个有序数组

在这里插入图片描述

解题思路:直接采用暴力解法,即将第二个数组的元素先拼接进第一个数组的尾部,之后进行排序即可

代码(力扣模板模式)

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
    	int j = 0;
    	for(int i=m;i<m+n;i++) {
    		nums1[i]=nums2[j++];
    	}
    	Arrays.sort(nums1);
    }
}

代码(竞赛模式)

import java.util.Arrays;
import java.util.Scanner;

public class 合并两个有序数组_88 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		//准备两个数组
		String str1 = sc.next();
		String[] arrStr1 = str1.split(",");
		int m = arrStr1.length;//输入作为第一个数组的长度
		String str2 = sc.next();
		String[] arrStr2 = str2.split(",");
		int n = arrStr2.length;//输入作为第一个数组的长度
		//进行加长度操作
		int[] nums1 = new int[m+n];
		int[] nums2 = new int[n];
		for(int i=0;i<arrStr1.length;i++) {
			nums1[i]=Integer.parseInt(arrStr1[i]);
			nums2[i]=Integer.parseInt(arrStr2[i]);
		}
		merge(nums1,m,nums2,n);
	}
	
    public static void merge(int[] nums1, int m, int[] nums2, int n) {
    	int j = 0;
    	for(int i=m;i<m+n;i++) {
    		nums1[i]=nums2[j++];
    	}
    	Arrays.sort(nums1);
    	for(int i=0;i<m+n;i++) {
    		System.out.print(nums1[i]+" ");
    	}
    }
}

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

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

相关文章

内网IM即时通讯软件WorkPlus,快速连接工作的沟通利器

在当今信息高度发达的时代&#xff0c;企业内部沟通的重要性不言而喻。随着企业团队的扩大和分布式办公的兴起&#xff0c;即时通讯软件成为了一种必不可少的工具。通过即时通讯软件&#xff0c;团队成员可以实时交流和协作&#xff0c;快速解决问题&#xff0c;加快决策过程。…

Echarts的地图实现拖拽缩放同步功能(解决多层geo缩放、拖动卡顿问题)

项目场景&#xff1a; 大屏项目显示云南省3D的地图&#xff0c;可拖拽缩放、地图打点、点击图标弹框等等功能 问题描述 多图层拖拽时会上下层会分离&#xff0c;延迟卡顿 原因分析&#xff1a; 1、拖拽时不同图层的中心坐标没有保持一致&#xff0c; 2、卡顿是数据更新动画时…

玩业余无线电时,突然听到有人呼救,该怎么办?

不管是在玩业余无线电还是在其他活动当中&#xff0c;突然遇到有人求救&#xff0c;都是一件非常重要的事情&#xff0c;因为救援行动的效率快慢和是否及时&#xff0c;都有可能影响到别人的生命安全。 下面是河南宝蓝小编给出的一些思考和建议&#xff0c;希望对大家会有一些帮…

软件测试-测试用例

目录 测试用例的四个要素 测试用例设计方法 基于需求进行测试用例的设计 等价类 边界值 判定表 正交表 通过allpirs画正交表 场景设计法 错误猜测法 面试题 如何模拟弱网 接口如何测试 zip命令测试 测试用例万能公式 水杯测试用例 微信发朋友圈 测试用例的四个…

Java实现的五子棋游戏 ~java.awtjava.swing

文章目录 Java实现的五子棋游戏1.实现效果2.实现源码2.1运行主函数main.java2.2 棋盘布局Chessboard.java3.Algorithm算法 点击下载链接&#xff1a;Java实现的五子棋游戏源码下载 Java实现的五子棋游戏 作业要求&#xff1a; &#xff08;1&#xff09;课题代号&#xff1a; …

老Mac电脑安装macOS Ventura实战

前提说明&#xff1a;此实战适用于老旧Mac电脑&#xff08;2015年之前的&#xff0c;无法在系统设置中升级macOS Ventura系统的电脑&#xff09;安装macOS Ventura系统&#xff01; 软件&#xff1a;OpenCore-Patcher-GUI.app.zip 工具&#xff1a;16G U盘、或者移动硬盘&a…

Spring MVC拦截器Interceptor使用(判断用户登录)

文章目录 一 概念二 3步使用三 HandlerInterceptor接口四 代码实现 一 概念 Spring MVC中的拦截器&#xff08;Interceptor&#xff09;类似于Servlet中的过滤器&#xff08;Filter&#xff09;&#xff0c;它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验…

superset链接本地数据库

打开图中 选择database 先解释SQLlite的格式 如下 SQLALCHEMY_DATABASE_URI mysql://username:password127.0.0.1:3306/gmall_report’ 请将 username 和 password 替换为实际的 MySQL 数据库的用户名和密码。 mysql则为如下

我有过密接的9个博士

我有过密接的9个博士 是我人生中留下的印迹和谈资 其中一个是中科大少年班的学神 趣讲大白话&#xff1a;多点谈资 【趣讲信息科技196期】 **************************** 我密接过的哪些博士们&#xff1a; 1、科大少年班刘雪峰博士。1998年&#xff0c;创智公司&#xff08;当…

Banana Pi BPI-R3 Mini:2.5GbE 嵌入式路由器板,MTK7986方案

香蕉派 BPI-R3 Mini Banana Pi BPI-R3 Mini 是一款功能强大的 SBC 路由器板&#xff0c;专为需要高速网络功能的个人和企业而设计。这款路由器是广受欢迎的 Banana Pi R3 路由器板的小兄弟&#xff0c;配备了先进的功能&#xff0c;旨在提供可靠的性能&#xff0c;是需要可靠网…

元宇宙游戏:新瓶换新酒

当你打游戏时&#xff0c;你在打什么&#xff1f; 抛出这个问题&#xff0c;便也抛出了游戏背后的组成——设计、技术、应用。 在元宇宙产业链中最有感知度的&#xff0c;是场景和内容&#xff0c;作为现实世界的模拟与延伸&#xff0c;游戏和社交领域是最先具备实现基础的元…

存储基础知识及相关术语

存储基础知识 前置&#xff1a;存储基本概念 我们现在处于信息时代&#xff0c;每天都在和电脑、手、平板机打交道。我们的工作和生活&#xff0c;已经完全离不开视频、音乐、图片、文本、表格这样的数据文件。 而所有这些数据文件&#xff0c;都需要通过电子设备进行保存&…

Windows控制关机锁屏

原文链接 设置永不关机 新建一个vbs文件&#xff0c;内容如下&#xff1a; Set WshShell WScript.CreateObject("WScript.Shell") do WScript.sleep 60000 WshShell.SendKeys "{ScrollLock}" loop该程序的作用相当于每隔一分钟&#xff08;60000毫秒&a…

了解MVC、MVP、MVVM模式

前言 在Android开发中&#xff0c;当你梳理完需求后&#xff0c;你要做的并不是马上写下你的第一行代码&#xff0c;而是需先设计好整个项目的技术框架今天&#xff0c;我将全面介绍Android开发中主流的技术框架MVC、MVP 与 MVVM模式&#xff0c;并实例讲解MVP模式&#xff0c…

Android启动优化实践

作者&#xff1a;95分技术 启动优化是Android优化老生常谈的问题了。众所周知&#xff0c;android的启动是指用户从点击 icon 到看到首帧可交互的流程。 而启动流程 粗略的可以分为以下几个阶段 fork创建出一个新的进程创建初始化Application类、创建四大组件等 走Applicatio…

uni-app配置Vant Weapp

uni-app配置vant-------浏览器运行环境下不兼容 1.创建uni-app项目2.创建wxcomponents目录3. 安装vant需要的模块包3.1找一个空文件cmd 进入执行3.1.1通过 npm 安装3.1.2通过 npm 安装 3.2.1获取dist文件 4.将dist内容复制到wxcomponents目录下5.1 使用vant5.1使用button按钮5.…

Qt扫盲-QKeyEvent 键盘事件

QKeyEvent 键盘事件 一、概述二、事件传播三、常用属性1. key()2. modifiers()3. isAutoRepeat()4. text() 四、简单组合键代码 一、概述 QKeyEvent 是Qt 里面描述键盘事件的一个属性类&#xff0c;所有的事件本质上来说其实就是一个信息包&#xff0c;而这个包里面就是有这个…

探索Redis内部数据结构

Redis支持多种数据结构&#xff0c;每种数据结构都有其特定的用途。下面对Redis支持的主要数据结构进行详细阐述&#xff1a; 一、字符串&#xff08;String&#xff09; 字符串是Redis最基本的数据结构&#xff0c;可以存储一个字符串或者二进制数据&#xff0c;例如图片、序…

Echarts—词云库(echarts-wordcloud)配置详解和使用(可自定义形状)

词云库的详解 前言安装基本配置详解具体使用步骤&#xff08;Vue为例&#xff09;自定义展示形状 前言 我们经常会看到一些网站或者页面有一堆五颜六色的词汇的聚在一块&#xff0c;有大有小的散落着&#xff0c;看着挺好看的&#xff1b; 也许项目中也会涉及到显示一些关键词…

【Linux脚本篇】Linux循环语句-while

目录 &#x1f341;while的语法格式 &#x1f341;while循环案例 &#x1f343;案例一&#xff1a;输出10-1的降序 &#x1f343;案例二&#xff1a;输出10的升序和降序 &#x1f343;案例三&#xff1a;批量创建用户 &#x1f341;内置跳出循环 &#x1f343;案例一&#xff1…