• 【C语言刷题——Leetcode12道题】带你起飞,飞进垃圾堆


    ✨作者:@平凡的人1

    ✨专栏:《小菜鸟爱刷题》

    ✨一句话:凡是过往,皆为序章

    ✨说明: 过去无可挽回, 未来可以改变


    🌹感谢您的点赞与关注,同时欢迎各位有空来访我的🍁平凡舍


    刷题之——Leetcode12道简单题,通过这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即可得出。

    下面,看看我们的代码:

    image-20220623215907950

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

    下面进行提交运行:

    image-20220624104350747

    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)

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

    image-20220624105250947

    image-20220624105324401

    ==本菜鸟的就是这种做法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)

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

    image-20220624105626164

    image-20220624105638090

    976. 三角形的最大周长

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

    示例 1:

    输入:nums = [2,1,2]
    输出:5
    示例 2:

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

    来源:力扣(LeetCode)

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

    image-20220624105831642

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

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

    请你找到并返回这个整数

    示例:

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

    来源:力扣(LeetCode)

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

    image-20220624110134298

    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)

    遍历走你😄

    image-20220624110314701

    1903. 字符串中的最大奇数

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

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

    示例 1:

    输入:num = “52”
    输出:“5”
    解释:非空子字符串仅有 “5”、“2” 和 “52” 。“5” 是其中唯一的奇数。
    示例 2:

    输入:num = “4206”
    输出:“”
    解释:在 “4206” 中不存在奇数。
    示例 3:

    输入:num = “35427”
    输出:“35427”
    解释:“35427” 本身就是一个奇数。

    来源:力扣(LeetCode)

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

    image-20220624110638527

    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)

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

    image-20220624110907792

    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 按 非递减 顺序排序后,这句话说明了需要我们先去排序,数组本来是无序的,后面进行遍历查找即可:

    image-20220624111329201

    提交运行:

    image-20220624111345072

    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的下标,直接去比较即可

    image-20220624111626591

    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)

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

    image-20220624111832673

    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)

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

    image-20220624111948945

    总结

    博主能力有限。可能一些题有更优的做法,不过目前博主是个菜鸟,能做出来就ok了。同时,我们也应该多去总结一下,方便自己的复习的同时,也分享自己的学习过程,这样也挺不错的呀。这次就先到这里结束了,感谢游览🌹

  • 相关阅读:
    连小白都在用的电子期刊制作网站
    【神器】MarkDown-沉浸写作的利器
    猿创征文|工具百宝箱-数据库连接工具-接口调试与测试工具-抓包工具
    ORACLE11g Dataguard物理Standby-日常巡检操作手册
    【从零开始学习 UVM】2.3、UVM 基础功能 —— UVM Object Print
    【自动化测试】——robotframework实战(三)编写测试用例
    ubuntu18安装常用软件命令
    云借阅图书管理系统[基于SSM框架的项目]
    nodejs下载指定版本
    STM32——SPI通信实验
  • 原文地址:https://blog.csdn.net/weixin_60478154/article/details/125441263