C语言刷12道题

简介: 到了这里,我们对于leetcode那可是有一定了解了


下面,直接进入我们的题目。👇

文章目录

260.只出现一次的数字III(难度:中等)

给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。

进阶:你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?

示例 1:

输入:nums = [1,2,1,3,2,5]

输出:[3,5]

解释:[5, 3] 也是有效的答案。

示例 2:

输入:nums = [-1,0]

输出:[-1,0]

示例 3:

输入:nums = [0,1]

输出:[1,0]

来源:力扣(LeetCode)

这道题Leetcode难度归类为中等,但是我感觉我们撑一撑应该还是能做得出来的(bushi):

这里的变量为了方便说明就使用我做题过程中命名的名字了🌹

解题思路:首先,我们定义一个变量(eor)初始化为0去遍历按位异或数组中的所有元素,此时得到的是只出现一次的两个元素的二进制异或结果。然后去对二进制的结果进行处理:对于两个不同的数字,异或出来的二进制结果中为1的话说明了:在该二进制位上的数字是不同的(我们可以定义一个变量rightone去找出此时二进制结果中最右边位1的位置,至于怎么找等下直接看代码即可,这里不展开说明了)。基于此,我们在把数组的元素分为两类:一类是在该二进制位相同的元素,另一类是在该二进制位不同的元素。然后在遍历一次数组,&按位与rightone找出其中的一个数onlyone,至于另外一个数直接根据第一次两数异或的结果eor在异或上onlyone即可得出。

下面,看看我们的代码:

(温馨提示:这里的变量如果定义为int类型的话,会出现溢出的错误,不要问我为什么知道,因为一开始自己的就是int类型,所以改为long类型较为合适)😶

下面进行提交运行:

728.自除数

自除数 是指可以被它包含的每一位数整除的数。

例如,128 是一个 自除数 ,因为 128 % 1 == 0,128 % 2 == 0,128 % 8 == 0。

自除数 不允许包含 0 。

给定两个整数 left 和 right ,返回一个列表,列表的元素是范围 [left, right] 内所有的 自除数 。

示例 1:

输入:left = 1, right = 22

输出:[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22]

示例 2:

输入:left = 47, right = 85

输出:[48,55,66,77]

来源:力扣(LeetCode)

这道题怎么说呢,关键在于把一个数中的每一位找出来,看看是否整除即可。为了方便,可以封装一个函数来进行处理:

==本菜鸟的就是这种做法emm,至于大佬==的我就不知道了

922.按奇偶排序数组 II

给定一个非负整数数组 nums, nums 中一半整数是 奇数 ,一半整数是 偶数 。

对数组进行排序,以便当 nums[i] 为奇数时,i 也是 奇数 ;当 nums[i] 为偶数时, i 也是 偶数 。

你可以返回 任何满足上述条件的数组作为答案 。

示例 1:

输入:nums = [4,2,5,7]

输出:[4,5,2,7]

解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。

示例 2:

输入:nums = [2,3]

输出:[2,3]

来源:力扣(LeetCode)

把数组中一半的奇数找出来,另一半的偶数找出来,下标稍微处理一下即可解决问题:

976. 三角形的最大周长

给定由一些正数(代表长度)组成的数组 nums ,返回 由其中三个长度组成的、面积不为零的三角形的最大周长 。如果不能形成任何面积不为零的三角形,返回 0。

示例 1:

输入:nums = [2,1,2]

输出:5

示例 2:

输入:nums = [1,2,1]

输出:0

来源:力扣(LeetCode)

解题思路:把数组排个序,找出3个最大的元素,判断是否能够构成三角形即可

1287. 有序数组中出现次数超过25%的元素

给你一个非递减的 有序 整数数组,已知这个数组中恰好有一个整数,它的出现次数超过数组元素总数的 25%。

请你找到并返回这个整数

示例:

输入:arr = [1,2,2,6,6,6,6,7,10]

输出:6

来源:力扣(LeetCode)

字面意思,直接做题即可:

1351. 统计有序矩阵中的负数

给你一个 m * n 的矩阵 grid,矩阵中的元素无论是按行还是按列,都以非递增顺序排列。 请你统计并返回 grid 中 负数 的数目。

示例 1:

输入:grid = [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]]

输出:8

解释:矩阵中共有 8 个负数。

示例 2:

输入:grid = [[3,2],[1,0]]

输出:0

来源:力扣(LeetCode)

遍历走你😄

1903. 字符串中的最大奇数

给你一个字符串 num ,表示一个大整数。请你在字符串 num 的所有 非空子字符串 中找出 值最大的奇数 ,并以字符串形式返回。如果不存在奇数,则返回一个空字符串 “” 。

子字符串 是字符串中的一个连续的字符序列。

示例 1:

输入:num = “52”

输出:“5”

解释:非空子字符串仅有 “5”、“2” 和 “52” 。“5” 是其中唯一的奇数。

示例 2:

输入:num = “4206”

输出:“”

解释:在 “4206” 中不存在奇数。

示例 3:

输入:num = “35427”

输出:“35427”

解释:“35427” 本身就是一个奇数。

来源:力扣(LeetCode)

从后往前遍历更加方便,只要最后的一位(相对而言,当前的最后一位)出现奇数说明这个数就是奇数了>,下面直接上手代码:

1979. 找出数组的最大公约数

给你一个整数数组 nums ,返回数组中最大数和最小数的 最大公约数 。

两个数的 最大公约数 是能够被两个数整除的最大正整数。

示例 1:

输入:nums = [2,5,6,9,10]

输出:2

解释:

nums 中最小的数是 2

nums 中最大的数是 10

2 和 10 的最大公约数是 2

示例 2:

输入:nums = [7,5,6,8,3]

输出:1

解释:

nums 中最小的数是 3

nums 中最大的数是 8

3 和 8 的最大公约数是 1

示例 3:

输入:nums = [3,3]

输出:3

解释:

nums 中最小的数是 3

nums 中最大的数是 3

3 和 3 的最大公约数是 3

来源:力扣(LeetCode)

解题思路:将数组排完序之后,第一位就是最小元素,最后一维就是最大元素,接下来就是求最大公约数了(直接辗转相除法即可)

2089. 找出数组排序后的目标下标

给你一个下标从 0 开始的整数数组 nums 以及一个目标元素 target 。

目标下标 是一个满足 nums[i] == target 的下标 i 。

将 nums 按 非递减 顺序排序后,返回由 nums 中目标下标组成的列表。如果不存在目标下标,返回一个 空 列表。返回的列表必须按 递增 顺序排列。

示例 1:

输入:nums = [1,2,5,2,3], target = 2

输出:[1,2]

解释:排序后,nums 变为 [1,2,2,3,5] 。

满足 nums[i] == 2 的下标是 1 和 2 。

示例 2:

输入:nums = [1,2,5,2,3], target = 3

输出:[3]

解释:排序后,nums 变为 [1,2,2,3,5] 。

满足 nums[i] == 3 的下标是 3 。

示例 3:

输入:nums = [1,2,5,2,3], target = 5

输出:[4]

解释:排序后,nums 变为 [1,2,2,3,5] 。

满足 nums[i] == 5 的下标是 4 。

示例 4:

输入:nums = [1,2,5,2,3], target = 4

输出:[]

解释:nums 中不含值为 4 的元素。

来源:力扣(LeetCode)

将 nums 按 非递减 顺序排序后,这句话说明了需要我们先去排序,数组本来是无序的,后面进行遍历查找即可:

提交运行:

2124. 检查是否所有 A 都在 B 之前

给你一个 仅 由字符 ‘a’ 和 ‘b’ 组成的字符串 s 。如果字符串中 每个 ‘a’ 都出现在 每个 ‘b’ 之前,返回 true ;否则,返回 false 。

示例 1:

输入:s = “aaabbb”

输出:true

解释:

‘a’ 位于下标 0、1 和 2 ;而 ‘b’ 位于下标 3、4 和 5 。

因此,每个 ‘a’ 都出现在每个 ‘b’ 之前,所以返回 true 。

示例 2:

输入:s = “abab”

输出:false

解释:

存在一个 ‘a’ 位于下标 2 ,而一个 ‘b’ 位于下标 1 。

因此,不能满足每个 ‘a’ 都出现在每个 ‘b’ 之前,所以返回 false 。

示例 3:

输入:s = “bbb”

输出:true

解释:

不存在 ‘a’ ,因此可以视作每个 ‘a’ 都出现在每个 ‘b’ 之前,所以返回 true 。

来源:力扣(LeetCode)

解题思路:a是否都在b之前,所以我们定义两个变量,一个为0作为判断b的下标,另一个为1作为判断a的下标,直接去比较即可

2180. 统计各位数字之和为偶数的整数个数

给你一个正整数 num ,请你统计并返回 小于或等于 num 且各位数字之和为 偶数 的正整数的数目。

正整数的 各位数字之和 是其所有位上的对应数字相加的结果。

示例 1:

输入:num = 4

输出:2

解释:

只有 2 和 4 满足小于等于 4 且各位数字之和为偶数。

示例 2:

输入:num = 30

输出:14

解释:

只有 14 个整数满足小于等于 30 且各位数字之和为偶数,分别是:

2、4、6、8、11、13、15、17、19、20、22、24、26 和 28 。

来源:力扣(LeetCode)

找出各位数字之和为 偶数 的正整数即可,封装成一个函数方便操作:

2278. 字母在字符串中的百分比

给你一个字符串 s 和一个字符 letter ,返回在 s 中等于 letter 字符所占的 百分比 ,向下取整到最接近的百分比。

示例 1:

输入:s = “foobar”, letter = “o”

输出:33

解释:

等于字母 ‘o’ 的字符在 s 中占到的百分比是 2 / 6 * 100% = 33% ,向下取整,所以返回 33 。

示例 2:

输入:s = “jjjj”, letter = “k”

输出:0

解释:

等于字母 ‘k’ 的字符在 s 中占到的百分比是 0% ,所以返回 0 。

来源:力扣(LeetCode)

没啥好说的,遍历就完事了



相关文章
|
C语言
【C语言刷题】青蛙跳台阶
【C语言刷题】青蛙跳台阶
137 1
|
C语言
非正式纳新题解(C语言)1
非正式纳新题解(C语言)1
150 0
|
5月前
|
存储 C语言 C++
PTA—C语言期末复习(选择题)
PTA—C语言期末复习(选择题)
|
5月前
|
C语言
PTA—C语言期末复习(判断题)
PTA—C语言期末复习(判断题)
109 0
|
搜索推荐 C语言 索引
ACAT2021纳新题目(C语言)
ACAT2021纳新题目(C语言)
63 0
|
C语言
非正式纳新题目(C语言)1
非正式纳新题目(C语言)1
100 0
|
搜索推荐 C语言
ACAT2021纳新题解(C语言)2
ACAT2021纳新题解(C语言)2
59 0
|
搜索推荐 C语言
非正式纳新题解(C语言)2
非正式纳新题解(C语言)2
90 0
|
C语言 C++
C语言刷题系列——7.(洛谷)上学迟到
C语言刷题系列——7.(洛谷)上学迟到
294 0
|
人工智能 算法 机器人
迷宫问题(C语言实现)(牛客网百度笔试真题)
迷宫问题(C语言实现)(牛客网百度笔试真题)
303 0