LeetCode算法,每日一题,冲击阿里巴巴,day4

java 二个数组的交集,算法 java 二个数组的交集,算法 java 二个数组的交集,算法 立即下载

1、LeetCode 344.反转字符串

题目

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形> 式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。

小编菜解

public static void reverseString(char[] s) {
    int n = s.length;
    int middle = 0;
    if (n%2 != 0){
        //如果是奇数,则第0个和n-1个交换,第1个和n-2个交换,一直交换到(n-1)/2-1个
        middle = (n-1)/2;
    }else{
        //如果是偶数,则第0个和n-1个交换,第1个和n-2个交换,一直交换到n/2-1个
        middle = n/2;
    }
    int left = 0;
    while (left < middle){
        char temp = s[left];
        s[left] = s[n-1-left];
        s[n-1-left] = temp;
        left++;
    }
}

越来越得心应手了,还得刷啊。

大佬指点江山

public static void reverseString(char[] s) {
    int n = s.length;
    for (int left = 0,right = n-1;left<right;left++,right--){
        char temp = s[left];
        s[left] = s[right];
        s[right] = temp;
    }
}

2、LeetCode 345.反转字符串中的元音字母

题目

给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。

元音字母包括 ‘a’、‘e’、‘i’、‘o’、‘u’,且可能以大小写两种形式出现。

小编菜解

public static String reverseVowels(String s) {
    List<Character> list = new ArrayList<Character>() {{
        add('a');
        add('e');
        add('i');
        add('o');
        add('u');
    }};
    char[] chars = s.toCharArray();
    int lg = s.length();
    int right = s.length();
    //遍历字符串前半段,如果是元音,则寻找右半段的最后一个元音,然后交换。
    //如果不是则不做处理。
    for (int left = 0; left < lg / 2; left++) {
        char e = 0;
        if (list.contains(chars[left])) {
            //寻找右半段的最后一个元音
            for (int j = right - 1; j >= 0; j--) {
                e = chars[j];
                if (list.contains(e)) {
                    right = j;
                    break;
                }
            }
            //交换最左元音和最右元音
            char temp = chars[left];
            chars[left] = e;
            chars[right] = temp;
        }
    }
    return new String(chars);
}

感觉list这块有点麻烦。

小编菜解改进版

public static String reverseVowels(String s) {
    String const_A_U = "aeiouAEIOU";
    char[] chars = s.toCharArray();
    int lg = s.length();
    int right = s.length();
    //遍历字符串前半段,如果是元音,则寻找右半段的最后一个元音,然后交换。
    //如果不是则不做处理。
    for (int left = 0; left < lg / 2; left++) {
        char e = 0;
        if (const_A_U.indexOf(chars[left])>=0) {
            //寻找右半段的最后一个元音
            for (int j = right - 1; j >= 0; j--) {
                e = chars[j];
                if (const_A_U.indexOf(e)>=0) {
                    right = j;
                    break;
                }
            }
            //交换最左元音和最右元音
            char temp = chars[left];
            chars[left] = e;
            chars[right] = temp;
        }
    }
    return new String(chars);
}

虽然有点麻烦,但好赖思路清晰,感觉可以提交了,但是提示错误。Why?
在这里插入图片描述

大佬指点江山

public static String reverseVowels(String s) {
    String const_AE = "aeiouAEIOU";
    char[] chars = s.toCharArray();
    int lg = s.length();
    int left = 0;
    int right = lg - 1;
    //遍历字符串前半段,如果是元音,则寻找右半段的最后一个元音,然后交换。
    //如果不是则不做处理。
    while (left < right) {
        //如果不是元音
        while (left < lg && const_AE.indexOf(chars[left]) < 0) {
            ++left;
        }
        //如果不是元音
        while (right > 0 && const_AE.indexOf(chars[right]) < 0) {
            --right;
        }
        if (left < right) {
            char temp = chars[left];
            chars[left] = chars[right];
            chars[right] = temp;
            ++left;
            --right;
        }
    }
    return new String(chars);
}

大佬的思路和我的是一样的,但是利用双指针进行操作明显比我的前半段后半段,更加直观简洁。

3、LeetCode 349.两个数组的交集

题目

给定两个数组,编写一个函数来计算它们的交集。

小编菜解

public static int[] intersection(int[] nums1, int[] nums2) {
    Set<Integer> set = new HashSet<>();
    for (int i = 0; i < nums1.length; i++) {
        for (int j = 0; j < nums2.length; j++) {
            if (nums1[i] == nums2[j]){
                set.add(nums1[i]);
            }
        }
    }
    int[] arr = new int[set.size()];
    int i = 0;
    for (int s : set) {
        arr[i] = s;
        i++;
    }
    return arr;
}

虽然解决了问题,提交成功了,但是总感觉,菜的令人发指,不是很满意。

小编菜解的时间复杂度是O(mn),也就是传统意义上的暴力算法,不建议采用。

思想及算法

如果使用哈希集合存储元素,则可以在 O(1)O(1) 的时间内判断一个元素是否在集合中,从而降低时间复杂度。
首先使用两个集合分别存储两个数组中的元素,然后遍历较小的集合,判断其中的每个元素是否在另一个集合中,如果元素也在另一个集合中,则将该元素添加到返回值。该方法的时间复杂度可以降低到 O(m+n)O(m+n)。

大佬指点江山

public static int[] intersection(int[] nums1, int[] nums2) {
    Set<Integer> set1 = new HashSet<>();
    Set<Integer> set2 = new HashSet<>();
    for (int i = 0; i < nums1.length; i++) {
        set1.add(nums1[i]);
    }
 
    for (int i = 0; i < nums2.length; i++) {
        set2.add(nums2[i]);
    }
 
    return getIntersection(set1, set2);
}
 
public static int[] getIntersection(Set<Integer> set1, Set<Integer> set2) {
    if (set1.size()>set2.size()){
        return getIntersection(set2,set1);
    }
    Set<Integer> set = new HashSet<>();
    for (Integer x : set1){
        if (set2.contains(x)){
            set.add(x);
        }
    }
 
    int[] ret = new int[set.size()];
    int i = 0;
    for (Integer x : set){
        ret[i++] = x;
    }
    return ret;
}

代码貌似更繁琐了,但重要的是这个思想,尽量避免多重for循环。

时间复杂度不一样,执行用时提升显著。

在这里插入图片描述

4、关注公众号哪吒编程,回复1024,获取Java学习资料,还有不定期的送书活动

  • 一步到位!Java程序设计
  • 极简Java
  • Node+MongoDB+react项目实战开发
  • JavaScript从入门到精通

在这里插入图片描述

在这里插入图片描述

Flutter for web 首次加载过慢问题优化 Flutter web 加载慢优化 阅读详情

相关推荐

HAL库:中断处理函数 及 weak弱声明中断回调函数 详解

HAL库中断处理函数 及 weak弱声明中断回调函数

L_Z_J_I的博客 5160

反转字符串、反转字符串中的元音字母、两个数组的交集,springboot工作原理面试

小编菜解 public static String reverseVowels(String s) { List list = new ArrayList() {{ add(‘a’); add(‘e’); add(‘i’); add(‘o’); add(‘u’); }}; char[] chars = s.toCharArray(); int lg = s.length(); int right = s.length(); //遍历字符串前半段,如果是元音,则寻找右半段的最后一个元音,然后交换。 //如果不

m0_64867896的博客 334

从Oracle到腾讯TDSQL数据库升级技术分享

腾讯TDSQL(Tencent Distributed SQL)是一款兼具关系数据库和NoSQL数据库优点的新型数据库,文章主要分享oracle升级为TDSQl数据库技术经验。

u012372850的专栏 2613

java string数组求交集_Java 实例

Java 实例 - 数组交集以下实例演示了如何使用 removeAll () 方法来删除包含在另外一个数组中的数组元素:/*author by w3cschool.cn文件名:Main.java*/import java.util.ArrayList;public class Main {public static void main(String[] args) {ArrayList obj...

weixin_30040925的博客 231

热膨胀系数(CTE)的不同处理方法对于封装翘曲仿真的影响

随着技术的不断发展,芯片封装的集成度越来越高,尺寸也越来越大,随之而来的封装翘曲问题也越来越引起关注。影响芯片封装翘曲最主要的原因就是封装中不同材料热膨胀系数(CTE)的失配性,因此在进行封装翘曲仿真的过程中,如何使用材料的CTE值就变得尤为重要,会对仿真精度产生较大的影响。本文将对比不同CTE的处理方法给仿真结果带来的影响。

wangyubo1的博客 6854

奇迹mu服务端DATA文件解析:从基础配置到高级玩法

本文深入解析奇迹MU服务端DATA文件的核心配置与高级玩法,涵盖基础设置、怪物AI系统、技能战斗机制、副本事件管理及物品商城定制。通过详细示例和实用技巧,帮助开发者掌握从经验倍率调整到动态事件触发的全方位配置方法,实现个性化的私服搭建与运营。

weixin_29254673的博客 528

spring boot 入门_Spring Boot 2 快速教程:WebFlux 快速入门(二)

摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢!02:WebFlux 快速入门实践文章工程:JDK 1.8Maven 3.5.2Spring Boot 2.1.3.RELEASE工程名:springboot-webflux-1-quickstart工程地址:见文末一、Spring Boot 2.0http://...

weixin_39609503的博客 162

实战拆解:RAG vs Agent在金融风控中的性能对比

2024年上半年我帮某华东地区城商行做零售交易反欺诈系统升级时,技术团队曾发生过一次激烈争论:一派认为应该优先上RAG(检索增强生成)方案,成本低、落地快、合规性好;另一派坚持要上Agent(智能体)方案,推理能力强、能应对复杂新型欺诈。最终我们做了完整的AB测试,结论是两者没有绝对的优劣,只有场景适配的差异:RAG适合高并发、低时延的实时风控场景,Agent适合低并发、高准确率要求的事后核查/大额审批场景,两者结合的 hybrid 方案能覆盖95%以上的风控需求。本文我会结合真实项目的测试数据,从核心概念

AI天才研究院 250

java比较两个string数组_java对两个字符串数组取交集、并集和差集

import java.util.*;public class StringArrayUtil {//求两个字符串数组的并集,利用set的元素唯一性public static String[] union(String[] arr1, String[] arr2) {Set set = new HashSet<>();Collections.addAll(set, arr1);Coll...

weixin_31461433的博客 1179

AI影像组学在结直肠癌诊疗中的应用:从特征提取到临床决策

影像组学通过高通量计算从医学影像中提取定量特征,揭示肿瘤内部的微观生物学行为,这些特征反映了纹理异质性、形状不规则度等影像表型。其核心原理在于将图像数据转化为可分析的数字特征,结合机器学习算法进行模式识别,从而实现对疾病状态的精准预测。这一技术的价值在于能够无创、定量地评估肿瘤特性,为精准医疗提供关键支持。在临床实践中,AI驱动的影像组学模型广泛应用于结直肠癌的诊疗全链条,包括肿瘤良恶性鉴别、基因突变预测、治疗反应评估和预后分析等场景。通过整合影像组学特征与临床数据,可以构建预测模型,辅助医生进行更准确的诊

weixin_28295799的博客 408

【水下小目标检测】SWIPENet与样本重加权:应对模糊与噪声的深度学习策略

本文深入探讨了水下小目标检测的挑战与解决方案,重点介绍了SWIPENet网络架构与IMA样本重加权算法。通过空洞卷积模块、特征金字塔重构和多尺度预测机制,SWIPENet有效提升了模糊目标的检测精度。结合Invert Multi-Class Adaboost算法,系统性地解决了水下环境中的样本不均衡问题,在URPC数据集上实现了48.8%的mAP,特别适合海洋生物检测等应用场景。

weixin_29057163的博客 341

LeetCode算法,每日一题,冲击阿里巴巴,day3

大连跨海大桥夜景 算法是进阶架构师的基础,基础不牢,地动山摇,2021-8-14起开始刷题,目标100天,300道LeetCode算法题,分享是学习的最好方式,加油,嗨起来。 1、LeetCode 268.丢失的数字 题目 给定一个包含 [0, n]中n个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。 进阶: 你能否实现线性时间复杂度、仅使用额外常数空间的算法解决此问题? 小编菜解 private static int test01(int[]...

学Java,找哪吒 4369

微信公众号 - 解决报错 “err_msg“:“system:access_denied“,微信环境浏览器真机使用微信支付、微信授权登录、分享朋友圈转发好友报错system:access_denied

微信公众号,微信网页,手机h5网页,微信报错,system:access_denied,微信支付,提示报错,微信登录授权报错,微信朋友圈分享,微信转发,WeixinJSBridge,微信环境下,微信内置浏览器,微信公众号项目报错system:access_denied,如何解决,invoke(),API调用后出现报错,微信内部H5 WeixinJSBridge.invoke system:access_denied,使用微信jssdk时报access_denied错误,还是报错,真机运行,真机调试api返回

🏆 前端领域优质创作者 1万+

LeetCode算法,每日一题,冲击阿里巴巴,day2

大家好,我是哪吒,一个热爱编码的Java工程师,本着“欲速则不达,欲达则欲速”的学习态度,在程序猿这条不归路上不断成长,所谓成长,不过是用时间慢慢擦亮你的眼睛,少时看重的,年长后却视若鸿毛,少时看轻的,年长后却视若泰山,成长之路,亦是渐渐放下执念,内心归于平静的旅程。 也许,我们永远都不会知道自己能走到何方,遇见何人,最后会变成什么样的人,但一定要记住,能让自己登高的,永远不是别人的肩膀,而是挑灯夜战的自己,人生的道路刚刚启程,当你累了倦了也不要迷茫,回头看一看,你早已不再是那个年少轻狂的少年。 .

学Java,找哪吒 6023

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

LeetCode算法,每日一题,冲击阿里巴巴

大家好,我是哪吒,一个热爱编码的Java工程师,本着“欲速则不达,欲达则欲速”的学习态度,在程序猿这条不归路上不断成长,所谓成长,不过是用时间慢慢擦亮你的眼睛,少时看重的,年长后却视若鸿毛,少时看轻的,年长后却视若泰山,成长之路,亦是渐渐放下执念,内心归于平静的旅程。 也许,我们永远都不会知道自己能走到何方,遇见何人,最后会变成什么样的人,但一定要记住,能让自己登高的,永远不是别人的肩膀,而是挑灯夜战的自己,人生的道路刚刚启程,当你累了倦了也不要迷茫,回头看一看,你早已不再是那个年少轻狂的少年。 1.

学Java,找哪吒 7278

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LeetCode算法,每日一题,冲击阿里巴巴,day6

目录1、LeetCode 228.汇总区间题目小编菜解大佬指点江山2、LeetCode 231.2的幂题目小编菜解思路分析大佬指点江山3、LeetCode 205.有效的字母异位词题目小编解题思路小编菜解思路分析大佬指点江山 1、LeetCode 228.汇总区间 题目 给定一个无重复元素的有序整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。 输入:nums

学Java,找哪吒 6267

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

LeetCode算法,每日一题,冲击阿里巴巴,day7

目录1、LeetCode 257.二叉树的所有路径题目思路与算法小编菜解2、LeetCode 258.各位相加题目小编解题思路小编菜解思路与算法大佬指点江山3、LeetCode 263.丑数题目小编菜解4、报名方式```为什么80%的码农做不了架构师?>>>```[Java专栏目录 | 点击这里](https://blog.youkuaiyun.com/guorui_java/article/details/120098618) 1、LeetCode 257.二叉树的所有路径 题目 给定一个二叉树,

学Java,找哪吒 5769

LeetCode算法,每日一题,冲击阿里巴巴,day5

1、LeetCode 35.搜索插入位置 题目 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 小编菜解 /** * 输入: nums = [1,3,5,6], target = 5 * 输出: 2 * * 输入: nums = [1,3,5,6], target = 2 * 输出: 1 */ public static int searchInsert(int[]

学Java,找哪吒 4788

LeetCode算法,每日一题,冲击阿里巴巴,day3_每个箱子上有一个数字,阿里巴巴念出一个数字k,找出连续k个宝箱数字和的最大值

这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移。因此每次交换,都是将左指针的零与右指针的非零数交换,且非零数的相对顺序并未改变。使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。左指针左边均为非零数;

2401_89284489的博客 300

连个集合之间的差集并集交集操作

【代码】连个集合之间的差集并集交集操作。

m0_46570170的博客 440

取两个数组的交集

题目 给你两个整数数组nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。 思路解析: 由于同一个数字在两个数组中都可能出现多次,因此需要用哈希表存储每个数字出现的次数。对于一个数字,其在交集中出现的次数等于该数字在两个数组中出现次数的最小值。 首先遍历第一个数组,并在哈希表中记录第一个数组中的每个数字以及对应出现的次数,然后遍历第二个数组,对于第二个数组中.

xiyuanda的博客 1831

2021-11-12

A - Three Piles of Candies

weixin_46008309的博客 765

LeetCode刷题-反转字符串中的元音字母

前言说明 算法学习,日常刷题记录。 题目连接 反转字符串中的元音字母 题目内容 给你一个字符串s,仅反转字符串中的所有元音字母,并返回结果字符串。 元音字母包括’a’、‘e’、‘i’、‘o’、‘u’,且可能以大小写两种形式出现。 示例1: 输入:s = “hello” 输出:“holle” 示例2: 输入:s = “leetcode” 输出:“leotcede” 提示: 1 <= s.length <= 3 * 10^5 s由可打印的ASCII字符组成 方法1 使用双指针法,从字符串

纯洁的博客 840

LeetCode:345(Python)—— 反转字符串中的元音字母(简单)

概述:给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。元音字母包括 'a'、'e'、'i'、'o'、'u',且可能以大小写两种形式出现。

m0_61661179的博客 3万+

LeetCode 345.反转字符串中的元音字母

反转字符串中的元音字母-力扣345 问题描述 给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。 元音字母包括 ‘a’、‘e’、‘i’、‘o’、‘u’,且可能以大小写两种形式出现。 示例1 输入:s = “hello” 输出:“holle” 示例2 输入:s = “leetcode” 输出:“leotcede” 提示 1 <= s.length <= 3 * 105 s 由 可打印的 ASCII 字符组成 思路分析 采取从两边向中间搜索的策略 p,q分别记录从前搜索和从后

Pretend的博客 322

【算法千题案例】每日LeetCode打卡——68.反转字符串中的元音字母

算法题打卡:反转字符串中的元音字母。没有特别幸运,那么请先特别努力,别因为懒惰而失败,还矫情地将原因归于自己倒霉。所以说,树倒了,没有一片雪花是无辜的

努力前行,总会成为自己心中的那道光 5万+
上一篇: Redis是干什么的,Redis常用语法每日一练 | Spring Boot 33
下一篇: 常见的八大排序算法
哪 吒
哪 吒 2022年度博客之星TOP 1 2022年度博客之星TOP 1 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 59万+粉丝 2933原创
评论 17
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哪 吒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值