leetcode 228.汇总区间

汇总区间(让博主饱受折磨的普通题)

题目

给定一个无重复元素的有序整数数组nums
要求返回恰好覆盖数组中所有数字最小有序区间范围列表
即:nums中的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于nums的数字x【用我的理解就是要求“刚刚好,不多也不少,skr~”】
列表中的每个区间范围[a,b]应该按如下格式输出:

  • “a->b”,如果a!=b
  • “a”,如果a==b
    示例
输入:nums = [0,1,2,4,5,7]
输出:["0->2","4->5","7"]

注:nums按升序排列

博主解题遇到的九九八十一难

int类型变量值频频溢出

这题的测试样例中有**[-2147483648,-2147483647,2147483647]**这样的狠角色,并且我的代码中还存在

nums[i] - nums[i-1] > 1

这样的减法,对于以上测试用例,nums[2]-nums[1]妥妥溢出
解决方法
法一:我一开始很简单粗暴,想着转换成long long类型就不怕了,结果语法错了,debug蹉跎了半小时
错误写法:【你以为是在定义变量吗?】

long long(nums[i] - nums[i-1]) > 1

正确写法:【把上面反过来就对了】

(long long)nums[i] - nums[i-1] > 1

法二:参考了一下官方解法,发现完全用不到long long
只需要一点小改动

nums[i] > nums[i-1] + 1

泪洒黄河,完全没有溢出的担忧了

如何将整数转换成字符串

博主对于字符型数组的使用弱得一批,函数一个都没记住,临时百度想要使用itoa()结果发现leetcode不能用这个函数,瞬间滑跪。
在参考了官方答案后,学到了sprintf函数
用法一:将字符串赋值给字符串数组

char temp[25];
sprintf(temp,"HelloWorld");

用法二:将整数转换成字符串赋值给字符串数组

char temp[25];
int a = -37;
sprintf(temp,"%d",a);

用法三:如果想要将整数和字符串组合起来赋值给字符串数组

char temp[25];
int age = 37;
sprintf(temp,"I'm ");
sprintf(temp+strlen(temp),"%d",age);
sprintf(temp+strlen(temp)," years old");

记录一下今天coding遇到一些细碎知识点

python 字典添加/修改键值对

我百度后选择使用dict.setdefault()
用法:

temp = dict()
...
a = temp.setdefault(key,None)
//如果key-value存在,则 a=value,键值对没有任何改变
//反之,a=None,temp字典添加key-None键值对

python 寻找列表中最大值的下标

a = [-2,7,11,5,0]
maxpos = a.index(max(a))

本人菜鸡一只
如有错误,欢迎指正,卑微鞠躬

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值