消失的数字

简介: 消失的数字

一、消失的数字
数组 nums 包含从 0 到 n 的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。在 O(n)时间内完成

1.异或运算:

public int missingNumber(int[] nums) {

    int[] arr = new int[nums.length + 1];
    int sum = 0;
    for (int i = 0; i < arr.length; i++) {
        sum ^= i;
    }
    for (int i = 0; i < nums.length ; i++) {
        sum ^= nums[i];
    }
    return sum;
}

1
2
3
4
5
6
7
8
9
10
11
2.空间换时间:

public int missingNumber1(int[] nums) {

    int[] arr = new int[nums.length+1];
    for (int i = 0; i < nums.length; i++) {
        arr[nums[i]] = 1;
    }
    for (int i = 0; i < arr.length; i++) {
        if(arr[i] != 1) {
            return i;
        }
    }
    return -1;
}

1
2
3
4
5
6
7
8
9
10
11
12
二、轮转数组
给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数

这是之前写过一篇专门是旋转数组的:旋转数组三种方式
上面的思路是针对于左旋数组,对右旋数组只需要稍加修改即可

public static void reverse(int[] arr,int left,int right) {

    while(left < right) {
        int ret = arr[left];
        arr[left] = arr[right];
        arr[right] = ret;
        left++;
        right--;
    }
}
public static void rotate(int[] nums, int k) {
    k = k % nums.length;
    reverse(nums,0,nums.length-1);
    reverse(nums,0,k-1);
    reverse(nums,k,nums.length-1);

    System.out.println(Arrays.toString(nums));
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
三、存在重复元素
给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false

public boolean containsDuplicate(int[] nums) {

    HashMap<Integer,Integer> map = new HashMap<>();
    for (int i = 0; i < nums.length; i++) {
        if(map.containsKey(nums[i])) {
            return true;
        }
        map.put(nums[i],i);
    }
    return false;
}

1
2
3
4
5
6
7
8
9
10
四、寻找峰值
给定一个长度为n的数组nums,请你找到峰值并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个所在位置即可。
1.峰值元素是指其值严格大于左右相邻值的元素。严格大于即不能有等于
2.假设 nums[-1] = nums[n] = -\infty−∞
3.对于所有有效的 i 都有 nums[i] != nums[i + 1]
4.你可以使用O(logN)的时间复杂度实现此问题吗?

public static int findPeakElement (int[] nums) {

    if(nums == null || nums.length == 0) {
        return -1;
    }
    if(nums.length == 1) {
        return 0;
    }
    if(nums[0] > nums[1]) {
        return 0;
    }
    if(nums[nums.length-1] > nums[nums.length-2]) {
        return nums.length - 1;
    }
    int left = 0;
    int right = nums.length - 1;
    while(left < right) {
        int mid = (left + right) / 2;
        if(nums[mid] < nums[mid+1]) {
            left = mid + 1;
        }else {
            right = mid;
        }
    }
    return left;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
五、珠玑妙算游戏
计算机有4个槽,每个槽放一个球,颜色可能是红色(R)、黄色(Y)、绿色(G)或蓝色(B)。例如,计算机可能有RGGB 4种(槽1为红色,槽2、3为绿色,槽4为蓝色)。作为用户,你试图猜出颜色组合。打个比方,你可能会猜YRGB。要是猜对某个槽的颜色,则算一次“猜中”;要是只猜对颜色但槽位猜错了,则算一次“伪猜中”。注意,“猜中”不能算入“伪猜中”。
给定一种颜色组合solution和一个猜测guess,编写一个方法,返回猜中和伪猜中的次数answer,其中answer[0]为猜中的次数,answer[1]为伪猜中的次数。

public static int[] masterMind(String solution, String guess) {

    int[] arr = new int[2];
    char[] ch = solution.toCharArray();
    char[] c = guess.toCharArray();
    for (int i = 0; i < c.length; i++) {
        if(c[i] == ch[i]) {
            arr[0]++;
            ch[i] = 0;
            c[i] = 1;
        }
        }
    for (int i = 0; i < c.length; i++) {
        for (int j = 0; j < guess.length(); j++) {
            if(c[i] == ch[j]) {
                ch[j] = 0;
                arr[1]++;
相关文章
|
存储 自然语言处理 搜索推荐
Machine Learning机器学习之文本分析的知识图谱(详细讲解)
Machine Learning机器学习之文本分析的知识图谱(详细讲解)
|
网络安全 开发者 iOS开发
iOS技术博客:App备案指南
本文介绍了移动应用程序(App)备案的重要性和流程。备案是规范App开发和运营的必要手段,有助于保护用户权益、维护网络安全和社会秩序。为了帮助开发者更好地了解备案流程,本文提供了一份最新、最全、最详的备案指南,包括备案目的、好处、对象、时间、流程、条件和注意事项等内容。
iOS技术博客:App备案指南
|
11月前
|
JavaScript NoSQL Java
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
531 96
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
|
10月前
|
存储 物联网 数据处理
什么数据中心最好?盘点全球十大数据中心!
在数字时代,数据中心作为关键基础设施,支撑着商业和社会的高效运转。从AWS、谷歌、微软到阿里云、苹果等巨头的数据中心,它们各具特色,涵盖高性能计算、液冷技术、绿色节能和高安全性等领域。这些“超级堡垒”不仅保障了在线交易、远程教育、智慧医疗等服务的稳定运行,还推动了云计算、大数据和物联网的发展,极大提升了社会效率和生活质量。每个数据中心根据自身优势,在不同应用场景中发挥着不可替代的作用,共同构建了数字化世界的基石。
1201 1
|
IDE 程序员 开发工具
Python编程入门:打造你的第一个程序
迈出编程的第一步,就像在未知的海洋中航行。本文是你启航的指南针,带你了解Python这门语言的魅力所在,并手把手教你构建第一个属于自己的程序。从安装环境到编写代码,我们将一步步走过这段旅程。准备好了吗?让我们开始吧!
|
人工智能 监控 物联网
数字孪生与智慧城市:构建未来城市模型
在信息化和智能化时代,数字孪生技术融合大数据、云计算、物联网和AI,成为推动智慧城市建设的关键力量。本文探讨其在城市规划、管理、交通、环保及公共服务中的应用,展现其如何优化城市运行,助力构建未来的理想城市模型。
|
运维 监控 关系型数据库
PostgreSQL运维核心技能之掌握并行查询
PostgreSQL运维核心技能之掌握并行查询
408 9
|
中间件
eggjs 怎么使用 egg-jwt 实现登录验证中间件?
eggjs 怎么使用 egg-jwt 实现登录验证中间件?
805 104
eggjs 怎么使用 egg-jwt 实现登录验证中间件?
|
消息中间件 人工智能 Kafka
Apache Kafka + 向量数据库 + LLM = 实时 GenAI
生成式AI(GenAI)革新了企业架构,催生新数据集成模式与最佳实践。借助Apache Kafka与Apache Flink,企业能高效处理大规模实时数据,连接各类数据库与分析平台。Kafka作为核心组件,支持GenAI应用如服务台自动化、聊天机器人及内容审核。结合大型语言模型(LLM)、检索增强生成(RAG)与向量数据库,Kafka与Flink共同打造强大数据流处理能力,克服GenAI挑战,如昂贵训练成本、数据时效性与准确性。通过语义搜索与RAG设计模式,确保LLM生成内容可靠无误。
592 0
|
算法 Java 测试技术
深入解析白盒测试:提升软件质量与效率的关键
【4月更文挑战第22天】 在软件开发的复杂多变的世界中,保证代码质量和功能的正确性是至关重要的。白盒测试作为一种重要的软件测试方法,提供了一种透视软件内部逻辑结构的途径。本文将详细探讨白盒测试的概念、技术手段和实际应用,旨在帮助读者理解如何通过这种测试提高软件系统的稳定性和性能。文章还将讨论白盒测试中面临的挑战以及应对策略,以期为软件质量保证提供实用的指导。
716 2

热门文章

最新文章