消失的数字

简介: 消失的数字

一、消失的数字
数组 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]++;
相关文章
|
前端开发 JavaScript 开发者
React 按钮组件 Button
本文介绍了 React 中按钮组件的基础概念,包括基本的 `&lt;button&gt;` 元素和自定义组件。详细探讨了事件处理、参数传递、状态管理、样式设置和可访问性优化等常见问题及其解决方案,并提供了代码示例。帮助开发者避免易错点,提升按钮组件的使用体验。
604 77
|
人工智能 安全 算法
CAMEL AI 上海黑客松重磅来袭!快来尝试搭建你的第一个多智能体系统吧!
掌握多智能体系统,🐫 CAMEL-AI Workshop & 黑客马拉松即将启航!
340 4
CAMEL AI 上海黑客松重磅来袭!快来尝试搭建你的第一个多智能体系统吧!
|
12月前
|
消息中间件 存储 监控
说说MQ在你项目中的应用(一)
本文总结了消息队列(MQ)在项目中的应用,主要围绕异步处理、系统解耦和流量削峰三大功能展开。通过分析短信通知和业务日志两个典型场景,介绍了MQ的实现方式及其优势。短信通知中,MQ用于异步发送短信并处理状态更新;业务日志中,Kafka作为高吞吐量的消息系统,负责收集和传输系统及用户行为日志,确保数据的可靠性和高效处理。MQ不仅提高了系统的灵活性和响应速度,还提供了重试机制和状态追踪等功能,保障了业务的稳定运行。
377 7
|
XML JSON 缓存
Java实现根据关键词搜索抖音视频数据方法
Java实现根据关键词搜索抖音视频数据方法
1232 1
|
传感器 芯片 智能硬件
RTC原理
RTC原理
|
运维 供应链 监控
综合竞争力第一!阿里云入选沙利文中国专有云市场领导者象限
国际知名咨询机构沙利文日前发布了《2022年中国专有云市场报告》,阿里云稳居领导者象限,并在增长指数和创新指数两大维度上均获最高分。
771 0
综合竞争力第一!阿里云入选沙利文中国专有云市场领导者象限
西门子S7-1200 CPU型号及模块类型有哪些
上篇文章我们介绍了西门子S7-1200功能特点及应用范围有哪些,今天我为大家简单介绍一下西门子S7-1200的CPU型号及模块类型。西门子S7-1200作为紧凑型自动化产品的新成员,目前有三款CPU,分别是CPU1211C、CPU1212C和CPU1214C。根据电源和输入输出信号的不同,每款CPU各有三种不同的型号,不同型号的CPU,本机自带输入输出数字量的点数有所差异。CPU1211C不支持信号扩展模块,而CPU1212C支持两个,CPU1214C最多支持八个。
西门子S7-1200 CPU型号及模块类型有哪些
|
弹性计算 数据库 黑灰产治理
阿里云服务器免费试用活动可试用配置、参与条件及规则汇总
本文介绍了阿里云服务器免费试用活动及可申请试用的云服务器实例规格、配置及试用时长、参与条件等信息
1103 0
阿里云服务器免费试用活动可试用配置、参与条件及规则汇总
|
前端开发 安全 搜索推荐
DingTalk「开发者说」- 酷应用开发之群扩展基础开发
本篇主要讲解钉钉酷应用在群内的功能,群内酷应用的接入、开发演示和最佳实践。
DingTalk「开发者说」- 酷应用开发之群扩展基础开发