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

文章目录

    • 第一天
      • 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.mfbz.cn/a/47484.html

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

相关文章

[Tools: Camera Conventions] NeRF中的相机矩阵估计

参考&#xff1a;NeRF代码解读-相机参数与坐标系变换 - 知乎 在NeRF中&#xff0c;一个重要的步骤是确定射线&#xff08;rays&#xff09;的初始点和方向。根据射线的初始点和方向&#xff0c;和设定射线深度和采样点数量&#xff0c;可以估计该射线成像的像素值。估计得到的…

AcWing 3708. 求矩阵的鞍点

输入样例&#xff1a; 3 4 1 2 3 4 1 2 3 4 1 2 3 4输出样例&#xff1a; 1 4 4 2 4 4 3 4 4 #include<bits/stdc.h> using namespace std; const int N1010; int n,m,a[N][N],x[N],y[N],flag1; int main(){scanf("%d%d",&n,&m);for(int i1;i<n;i…

Pure Admin 图标篇

1. 官方图标讲解地址 B站搜索&#xff1a;vue-pre-admin之图标篇&#xff0c;作者“乐于分享的程序员小铭” 2. 实操 1. iconify官网 Icon Sets • Iconify 2. 在build->optimize.ts 中&#xff0c;配置所用的Iconify icon包 如&#xff1a; "iconify-icons/ep&quo…

Mysql- 存储引擎

目录 1.Mysql体系结构 2.存储引擎简介 3.存储引擎特点 InnoDB MyISAM Memory 4.存储引擎选择 1.Mysql体系结构 MySQL整体的逻辑结构可以分为4层&#xff1a; 连接层&#xff1a;进行相关的连接处理、权限控制、安全处理等操作 服务层&#xff1a;服务层负责与客户层进行…

云原生架构的定义

前言&#xff1a; 从技术的角度&#xff0c;云原生架构是基于云原生技术的一组架构原则和设计模式的集合&#xff0c;旨在将云应用中非业务代码的部分进行最大化的剥离&#xff0c;从而让云设施接管应用中原有的大量非功能特性&#xff08;如弹性、韧性、安全、可观测性、灰度…

C++OpenCV(6):图像阈值操作

&#x1f506; 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 &#x1f506; OpenCV项目地址及源代码&#xff1a;点击这里 文章目录 图像阈值化 图像阈值化 阈值又叫临界值&#xff0c;是指一个效应能够产生的最低值或最高值。 例如我们选择的阈值为125&#xff0c;则…

jQueryAPI

文章目录 1.jQuery 选择器1.1 jQuery 基础选择器1.2 jQuery 层级选择器1.3 隐式迭代1.4 jQuery 筛选选择器1.5 jQuery 筛选方法1.6 jQuery 里面的排他思想1.7 链式编程 2.jQuery 样式操作2.1 操作 css 方法2.2 设置类样式方法2.3 类操作与className区别 3.jQuery 效果3.1 显示隐…

你们公司的【前端项目】是如何做测试的?字节10年测试经验的我这样做的...

前端项目也叫web端项目&#xff08;通俗讲就是网页上的功能&#xff09;是我们能够在屏幕上看到并产生交互的体验。 前端项目如何做测试&#xff1f; 要讲清楚这个问题&#xff0c;先需要你对测试流程现有一个全局的了解&#xff0c;先上一张测试流程图&#xff1a; 测试流程…

1374218-86-6,BHQ10 COOH,具有良好的荧光性能

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ BHQ-10 acid&#xff0c;BHQ-10 COOH&#xff0c;BHQ-10 羧酸 PART1----​产品结构式&#xff1a; PART2----​产品规格&#xff1a; 1.CAS号&#xff1a;1374218-86-6 2.分子式&#xff1a;C23H23N5Na2O8S2 3.分子量&…

Ceph入门到精通- Linux 磁盘管理(block 与 inode)

1 硬盘 block 与 inode 详解 1.1 Sector&#xff08;扇区&#xff09;与 Block&#xff08;块&#xff09; 1&#xff09; 硬盘的最小存储单位&#xff1a;sector&#xff08;扇区&#xff09;&#xff0c;每个扇区储存 512 字节&#xff1b;操作系统会一次性连续读取多个…

uniapp 中 的progress加载进度条 的使用,在 页面显示数据加载的进度条,使用户的使用体验效果更好

学习目标&#xff1a; 学习目标如下&#xff1a; 例如&#xff1a; uniapp 中 的progress加载进度条 的使用&#xff0c;在 页面显示数据加载的进度条&#xff0c;使用户的使用体验效果更好 学习内容&#xff1a; 学习内容如下所示&#xff1a; 相关属性的说明 进度条的显…

k8s安装prometheus

安装 在目标集群上&#xff0c;执行如下命令&#xff1a; kubectl apply -f https://gitee.com/i512team/dhorse/raw/main/conf/kubernetes-prometheus.yml使用 1.在浏览器访问地址&#xff1a;http://master_ip:30000&#xff0c;如下图所示&#xff1a; 2.查看k8s自带的…

Maven项目的两种打包方式-spring-boot-mavne-plugin/maven-jar-plugin

Maven项目的两种打包方式-spring-boot-mavne-plugin/maven-jar-plugin 1. 前言Maven的两种打包方式 2. 流程图3. spring-boor-maven-plugin打包4. maven-jar-plugin/maven-dependency-plugin打包 1. 前言 Maven的两种打包方式 spring-boot-maven-plugin springboot默认打包方…

数据结构 | 基本数据结构——栈

目录 一、线性数据结构 二、栈 2.1 何谓栈 2.2 栈抽象数据类型 2.3 用Python实现栈 2.4 匹配括号 2.5 普通情况&#xff1a;匹配符号 2.6 将十进制数转换成二进制数 3.7 前序、中序和后序表达式 3.7.1 从中序到后序的通用转换法 3.7.2 计算后序表达式 一、线性数据结…

GAMS---典型优化模型和算法介绍、GAMS安装和介绍、GAMS程序编写、GAMS程序调试、实际应用算例演示与经验分享

优化分析是很多领域中都要面临的一个重要问题&#xff0c;求解优化问题的一般做法是&#xff1a;建立模型、编写算法、求解计算。常见的问题类型有线性规划、非线性规划、混合整数规划、混合整数非线性规划、二次规划等&#xff0c;优化算法包括人工智能算法和内点法等数学类优…

第一百一十四天学习记录:C++提高:类模板案例(黑马教学视频)

类模板案例 main.cpp代码&#xff1a; #include "myarray.hpp"void printIntArray(MyArray <int>& arr) {for (int i 0; i < arr.getSize(); i){cout << arr[i] << " ";}cout << endl; }void test01() {MyArray <int&…

图为科技T501赋能工业机器人 革新传统工业流程

工业机器人已成为一个国家制造技术与科技水平的重要衡量标准&#xff0c;在2019年&#xff0c;中国工业机器人的组装量与产量均位居了全球首位。 当前&#xff0c;工业机器人被广泛用于电子、物流、化工等多个领域之中&#xff0c;是一种通过电子科技和机械关节制作出来的智能机…

超详细推导逻辑回归公式与代码实现(二分类与多分类)

目录 概述逻辑回归理论数学推导二类分类多分类 代码实现备注 概述 本文使用梯度下降法对逻辑回归进行训练&#xff0c;使用类似于神经网络的方法进行前向传播与反向更新&#xff0c;使用数学公式详细推导前向传播与反向求导过程&#xff0c;包括二分类和多分类问题&#xff0c…

OS1_进程与线程的管理

序言 1.OS以进程、线程的方式在CPU中执行静态保存在外存(内存)中的程序&#xff0c;进程的构成与状态转化&#xff0c;特别是进程的切换&#xff1b; 2.当有多个进程处于就绪态&#xff0c;有哪些常见的挑选以执行方式&#xff1b; 3.并发执行(乱序发射)的进程&#xff0c;共享…

c# Outlook检索设定问题

基于c# 设定outlook约会予定&#xff0c;时间格式是YYYY-MM-DD HH:mm 的情报。 问题发生&#xff1a; 根据开始时间&#xff08;2023/01/01 7:00&#xff09;条件查询该时间是否存在outlook信息时&#xff0c;明明存在一条数据&#xff0c;就是查询不出来数据 c#代码 Strin…
最新文章