【Day13】LeetCode力扣刷题[面试题 17.19. 消失的两个数字][70.爬楼梯][746. 使用最小花费爬楼梯]

简介: 了解[面试题 17.19. 消失的两个数字][70.爬楼梯][746. 使用最小花费爬楼梯]。

刷题打卡,第十三天


题目一、面试题 17.19. 消失的两个数字

题目二、70.爬楼梯

题目三、746. 使用最小花费爬楼梯


题目一、面试题 17.19. 消失的两个数字


原题链接:面试题 17.19. 消失的两个数字


题目描述:


给定一个数组,包含从 1 到 N 所有的整数,但其中缺了两个数字。你能在 O(N) 时间内只用 O(1) 的空间找到它们吗?

以任意顺序返回这两个数字均可。

/

示例 1:

输入: [1]

输出: [2,3]

/

示例 2:

输入: [2,3]

输出: [1,4]

/

提示:


nums.length <= 30000

解题思路:

利用异或运算符解答:

0 ^ a = a;

当一个数重复异或会抵消:

a ^ b ^ a = b;

那么我们将1-N个数异或,再将nums[]中的数异或,就得到了消失的两个数的异或值。

之后将出现的数分为 二进制表示的第 1 位为 0 的数,和 二进制表示的第 1位为 1 的数。

将他们异或,消除重复,就分别得到了两个消失的数。


提交代码:

class Solution {
    public int[] missingTwo(int[] nums) {
        int n = nums.length+2;           //nums[]长度+2才是1到N的个数
        int diff = 0;                    //准备获取消失两个数的异或值
       //先对1-N进行异或处理
        for(int i = 1;i <= n; ++i)  diff ^= i;
        //再对消失了两个数的nums[]进行异或处理
        //被异或过的数再次异或会抵消,即a^a^b = b
        //还有0^a = a,所以diff初始值为0;
        //这么一来,现在的diff相当于疑惑了两个消失的数:a^b
        for(int num : nums) diff ^= num;
        int lsb = (diff & -diff);//取出diff的二进制表示中最低位那个1
        int T1 = 0,T2 = 0;
        //利用lsb将1-N中出现的数分为两类,出现两次的一类,出现一次的(消失的数)一类
        //再将它们全部异或起来,抵消出现两次的,剩下消失的两个数
        for(int i = 1;i <= n;++i){
            if((i & lsb) != 0){
                T1 ^= i;
            }else{
                T2 ^= i;
            }
        }
        for(int num : nums){
            if((num & lsb) != 0){
                T1 ^= num;
            }else{
                T2 ^= num;
            }
        }
        retur
        n new int[]{T1,T2};
    }
}

提交结果:

微信图片_20221030154828.png


题目二、70.爬楼梯


原题链接:70.爬楼梯


题目描述:


假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

示例 1:

输入:n = 2

输出:2

解释:有两种方法可以爬到楼顶。

①1 阶 + 1 阶

② 2 阶

/

示例 2:

输入:n = 3

输出:3

解释:有三种方法可以爬到楼顶。

①1 阶 + 1 阶 + 1 阶

② 1 阶 + 2 阶

③ 2 阶 + 1 阶

提示:

1 <= n <= 45


解题思路:

动态规划:

每多一阶台阶,上台阶的方法都是前两阶上台阶方法数量的和;


提交代码:

class Solution {
    public int climbStairs(int n) {
        int a = 0,b = 0,sum = 1;
        for(int i = 0;i < n;++i){
            a = b;
            b = sum;
            sum = a+b;
        }
        return sum;
    }
}

提交结果:

微信图片_20221030154840.png

题目三、746. 使用最小花费爬楼梯


原题链接:746. 使用最小花费爬楼梯


题目描述:


给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。

你可以选择从下标为0或下标为1的台阶开始爬楼梯。

请你计算并返回达到楼梯顶部的最低花费。

/

示例 1:

输入:cost = [10,15,20]

输出:15

解释:你将从下标为 1 的台阶开始。


支付 15 ,向上爬两个台阶,到达楼梯顶部。

总花费为 15 。

/

示例 2:

输入:cost = [1,100,1,1,1,100,1,1,100,1]

输出:6

解释:你将从下标为 0 的台阶开始。


支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。


支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。


支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。


支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。


支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。


支付 1 ,向上爬一个台阶,到达楼梯顶部。

总花费为 6 。


解题思路:

与上一道爬楼梯的解题思路一致,只是不需要记录爬楼梯的方法,而是记录前两阶价格中,更优惠的方案


提交代码:

class Solution {
    public int minCostClimbingStairs(int[] cost) {
        int a = 0,b = 0,curr = 0;
        //依旧是动态规划
        //与爬楼梯问题几乎一样,只不过是方式换成了最低消费
        for(int i = 2;i <= cost.length;++i){
            //至于前两阶相关,选价格较低的方案
            curr = Math.min(a+cost[i-2],b+cost[i-1]);
            a = b;
            b = curr;
        }
        return curr;
    }
}

提交结果:

微信图片_20221030154848.png

⚽求关注⚽ 作者🥇 .29. 🥇 的✔博客主页✔

⚽来刷题⚽ 记录每日LeetCode✔刷题专栏✔

您的点赞,收藏以及关注是对作者最大的鼓励喔 ~~


贵在坚持:

微信图片_20221029111446.jpg

目录
相关文章
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
8天前
|
机器学习/深度学习 人工智能 自然语言处理
280页PDF,全方位评估OpenAI o1,Leetcode刷题准确率竟这么高
【10月更文挑战第24天】近年来,OpenAI的o1模型在大型语言模型(LLMs)中脱颖而出,展现出卓越的推理能力和知识整合能力。基于Transformer架构,o1模型采用了链式思维和强化学习等先进技术,显著提升了其在编程竞赛、医学影像报告生成、数学问题解决、自然语言推理和芯片设计等领域的表现。本文将全面评估o1模型的性能及其对AI研究和应用的潜在影响。
10 1
|
2月前
|
数据采集 负载均衡 安全
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
|
26天前
|
程序员 C语言
【C语言】LeetCode(力扣)上经典题目
【C语言】LeetCode(力扣)上经典题目
|
29天前
|
索引
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
72 0
|
29天前
力扣(LeetCode)数据结构练习题(2)
力扣(LeetCode)数据结构练习题(2)
28 0
|
29天前
|
存储
力扣(LeetCode)数据结构练习题
力扣(LeetCode)数据结构练习题
50 0
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
54 6
|
3月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
107 2
|
3月前
|
索引 Python
【Leetcode刷题Python】从列表list中创建一颗二叉树
本文介绍了如何使用Python递归函数从列表中创建二叉树,其中每个节点的左右子节点索引分别是当前节点索引的2倍加1和2倍加2。
54 7