LeetCode第一期和第二期编程题

本文介绍了LeetCode的第一期和第二期编程题,包括判断2的幂次方、两数之和、平方根等。通过思路解析和代码演示,详细展示了每个问题的解决方法,并附带了示例测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一期编程题(3道)

1、给定一个整数,编写一个函数来判断它是否是 2 的幂次方

示例 1:
输入: 1
输出: true
解释: 20 = 1
示例 2:
输入: 16
输出: true
解释: 24 = 16
示例 3:
输入: 218
输出: false

思路:

一、观察2的幂的整数,看它们的二进制位表示 (假设用8位二进制表示)。
1、不用管负指数。指数为负结果就是小数而不是整数。
2、不用管负数。指数为正,结果一定是正整数。
在这里插入图片描述二、可以发现,2的幂的整数的二进制位表示只有一个1.
三、那么对于一个整数,我们遍历一次它的二进制位,统计其中1的个数即可判断它是否为2的幂。

代码演示:

在这里插入图片描述

2、两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]
示例 3:
输入:nums = [3,3], target = 6
输出:[0,1]
提示:
2 <= nums.length <= 103
-109 <= nums[i] <= 109
-109 <= target <= 109
只会存在一个有效答案

思路:

整体思路:两层for循环,外部for循环逐次修改target值为原target减去nums数组中各个元素值,
内部for循环与当前target作比较,相等则获取内外for循环中循环变量值

代码演示:

在这里插入图片描述

示例测试:

在这里插入图片描述在这里插入图片描述在这里插入图片描述

3、x的平方根

实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2

示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。

思路:

1、题目要求 x 的平方根,相当于 y = √x,由于这个函数是单调递增(有序)的,所以可以用二分法进行求解。
2、比较 mid * mid 跟 x 的大小,相等则直接返回 mid,否则就去以 mid 为分割点的左右区间去查找,直到不满足循环循环条件(left > right 或者 left == right 究竟是哪一个请看后面的分析)就退出。
3、x (x ≠ 0) 的平方根一定是落在 [1, x/2 + 1] 区间,所以左右边界分别取 left = 1, right = x/2 + 1,而不分别取 0 和 x,这样可缩小查找范围。
4、还要考虑溢出问题。

代码演示:

在这里插入图片描述

示例测试:

在这里插入图片描述
在这里插入图片描述

第二期编程作业(3道)

4、第三大的数

给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。
示例 1:
输入:[3, 2, 1]
输出:1
解释:第三大的数是 1 。

示例 2:
输入:[1, 2]
输出:2
解释:第三大的数不存在, 所以返回最大的数 2 。

示例 3:
输入:[2, 2, 3, 1]
输出:1
解释:注意,要求返回第三大的数,是指第三大且唯一出现的数。
存在两个值为2的数,它们都排第二。

提示:
1 <= nums.length <= 104
-231 <= nums[i] <= 231 - 1

思路:

遍历一次,遍历数组依次求第一、第二、第三大的值,用 Integer.MIN_VALUE - 1 表示当前数有没有被赋值,最后判断 a3 有没有被赋值,从而返回相应的值。

代码演示:

在这里插入图片描述

示例测试:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5、整数的反转

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
示例 1:
输入:x = 123
输出:321

示例 2:
输入:x = -123
输出:-321

示例 3:
输入:x = 120
输出:21

示例 4:
输入:x = 0
输出:0
提示:
-231 <= x <= 231 - 1

思路:

依次取出当前数字的最后一位数,累加。
关键在于如何判断整数溢出:将每次操作后的数字用临时变量存储,对该变量“反操作”,若与操作前的结果不等,则发生溢出,直接返回0

代码演示:

在这里插入图片描述

示例测试:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6、杨辉三角

在这里插入图片描述

思路:

递归方法总而言之就是抓住三点:
1、找整个递归的终止条件
2、找返回值
3、一次递归需要如何操作
递归到numRows = 0 时或者numRows = 1时都可以终止,因为第一行比较特殊,只有一个1,所以我们可以将其当成整个递归的终止条件,当numRows = 1时,我们就可以终止递归向下返回值了。

代码演示:

在这里插入图片描述

示例测试:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值