leetcode数据结构题解(Java实现)(存在重复元素、最大子数组和、两数之和、合并两个有序数组)

news2024/12/23 10:51:53

文章目录

    • 第一天
      • 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/790874.html

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

相关文章

全光谱护眼灯怎么选择?护眼灯全光谱和自然光谱的区别

一、全光谱护眼台灯的挑选技巧 全光谱&#xff1a;想要护眼台灯能有自然光的效果&#xff0c;选择台灯时建议选择全光谱台灯&#xff0c;并且显色指数大于Ra95以上的&#xff0c;显色指数越高越还原色彩&#xff0c;并且选择RGO豁免蓝光才是真的不会伤害眼睛的。 照射面积&…

Python(四十)for-in练习题——100到999之间的水仙花数

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

2023年发布的25个开源大型语言模型总结

大型语言模型(llm)是一种人工智能(AI)&#xff0c;在大量文本和代码数据集上进行训练。它们可以用于各种任务&#xff0c;包括生成文本、翻译语言和编写不同类型的创意内容。 今年开始&#xff0c;人们对开源LLM越来越感兴趣。这些模型是在开源许可下发布的&#xff0c;这意味…

Redis Stream 流的深度解析与实现高级消息队列【一万字】

详细介绍了 Redis 5.0 版本新增加的数据结构Stream的使用方式以及原理&#xff0c;如何实现更加可靠的消息队列。 文章目录 Stream 概述2 Stream基本结构3 存储数据3.1 Entry ID3.2 数量限制 4 获取数据4.1 范围查询4.2 独立消费消息4.2.1 非阻塞使用4.2.2 阻塞的使用 4.3 消费…

【Spring定时器】SpringBoot整合Quartz

SpringBoot整合Quartz 简单介绍 简单操作 导入相关pom依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId></dependency>创建继承类MyQuartz package com.ustc.quartz; …

C语言假期作业 DAY 01

题目 1.选择题 1、执行下面程序&#xff0c;正确的输出是&#xff08; &#xff09; int x5,y7; void swap() { int z; zx; xy; yz; } int main() { int x3,y8; swap(); printf("%d,%d\n"&#xff0c;x, y)…

Docker 单机/集群 部署 Nacos2.2.0

单机部署 1- 拉取镜像 docker pull nacos/nacos-server:v2.2.02- 准备挂载的配置文件目录和日志目录 日志目录(空目录)&#xff1a;./nacos/logs配置文件&#xff1a;./nacos/conf/application.properties 从官网下载 nacos 压缩包&#xff1a;Release 2.2.0 (Dec 14, 2022…

基于SpringBoot+vue的医院信管系统设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

TypeScript -- 基础类型

文章目录 TypeScript -- 基础类型let 和 const基本类型写法布尔类型 -- boolean数字类型 -- number字符串类型 -- string数组类型元组类型枚举类型 -- enum任意类型 -- any空值 -- voidNull 和 Undefined不存在的类型 -- never对象 -- object类型断言 TypeScript – 基础类型 1…

关于 ivanti Access Client软件配置问题

最近需要使用ivanti工具连接校园网&#xff0c;但是经常出现ivanti连接后&#xff0c;WIFI或有线网络就显示无互联网连接的情况。 为此&#xff0c;我检查了一下网络的配置状态&#xff0c;发现ivanti连接的时候回临时创建一个网络adapter&#xff0c;该adapter有 一个身份验证…

Java训练二

一、斐波那契数列 1、1、2、3、5、8、13、21、34、...是一组典型的斐波那契数列&#xff0c;前两个数相加等于第三个数。那么请问这组数中的第n个数的值是多少&#xff1f; package haha; import java.util.Scanner; public class helloworld{public static void main(String…

Python基础语法第四章之函数

目录 一、函数 1.1函数是什么 1.2语法格式 1.3函数参数 1.4函数返回值 1.5变量作用域 1.5.1变量只能在所在的函数内部生效. 1.5.2 在不同的作用域中, 允许存在同名的变量 1.5.3如果函数内部尝试访问的变量在局部不存在, 就会尝试去全局作用域中查找 1.5.4如果是想在函数…

头戴式玩具外贸出口EN71检测报告需要什么资料?

EN71是欧盟市场玩具类产品的规范标准。儿童是全社会最关心和爱护的群体&#xff0c;儿童普遍喜爱的玩具市场发展迅猛&#xff0c;同时各类玩具由于各方面质量问题给儿童带来的伤害也时有发生&#xff0c;因此世界各国对本国市场上的玩具的要求正日益变得严格。许多国家都就这些…

【C语言day06】

逻辑或运算如果前表达式为真&#xff0c;后表达式不计算&#xff0c;第一次循环时i为0&#xff0c;执行i&#xff0c;第二次循环时i为1&#xff0c;是个真值&#xff0c;不再执行i&#xff0c;也就死循环了 在C语言中&#xff0c;一个函数如果不写返回值类型&#xff0c;那么就…

2023年深圳杯数学建模B题电子资源版权保护问题

2023年深圳杯数学建模 B题 电子资源版权保护问题 原题再现&#xff1a; 版权又称著作权&#xff0c;包括发表权、署名权、修改权、保护作品完整权、复制权、发行权、出租权、展览权、表演权、放映权、广播权、信息网络传播权、摄制权、改编权、翻译权、汇编权及应当由著作权人…

【Element-ui】学习与使用

网站快速成型工具Element&#xff0c;一套为开发者、设计师和产品经理准备的基于vue2.0的桌面端组件库 安装 npm i element-ui -S 在项目中安装element-ui&#xff0c;安装了以后查看package.json中的依赖中有没有element-ui的版本&#xff0c;如果有&#xff0c;则说明安装成功…

通过STM32内部ADC将烟雾传感器发送的信号值显示在OLED上

一.CubeMX配置 首先我们在CubeMX配置ADC1, 设置一个定时器TIM2定时1s采样一次以及刷新一次OLED&#xff0c; 打开IIC用于驱动OLED显示屏。 二.程序 在Keil5中添加好oled的显示库&#xff0c;以及用来显示的函数、初始化函数、清屏函数等。在主程序中初始化oled,并将其清屏。…

轻松学会 React 钩子:以 useEffect() 为例

一、React 的两套 API 以前&#xff0c;React API 只有一套&#xff0c;现在有两套&#xff1a;类&#xff08;class&#xff09;API 和基于函数的钩子&#xff08;hooks&#xff09; API。 任何一个组件&#xff0c;可以用类来写&#xff0c;也可以用钩子来写。下面是类的写法…

解密智能汽车云控基础平台网络架构

全球汽车产业正经历深度转型期&#xff0c;电动化、智能化、网联化成为该行业的主流趋势。随着技术的进步和人们对便利、智能出行的需求不断增加&#xff0c;智能汽车的市场前景广阔。 欲要了解智能汽车车联网&#xff0c;必先了解汽车智能化和网联化的管控中枢- 云控基础平台…