没错我又参加了第128场竞赛,这次也是三道题,最后一题总是超时,暴力不能解决问题了
题目描述:
每个非负整数 N 都有其二进制表示。例如, 5 可以被表示为二进制 “101”,11 可以用二进制 “1011” 表示,依此类推。注意,除 N = 0 外,任何二进制表示中都不含前导零。
二进制的补码表示是将每个 1 改为 0 且每个 0 变为 1。例如,二进制数 “101” 的二进制补码为 “010”。
给定十进制数 N,返回其二进制表示的补码所对应的十进制整数。
示例 1:
输入:5
输出:2
解释:5 的二进制表示为 “101”,其二进制补码为 “010”,也就是十进制中的 2 。
示例 2:
输入:7
输出:0
解释:7 的二进制表示为 “111”,其二进制补码为 “000”,也就是十进制中的 0 。
示例 3:
输入:10
输出:5
解释:10 的二进制表示为 “1010”,其二进制补码为 “0101”,也就是十进制中的 5 。
分析:这是最简单的一道题了,一开始我还在想有没有直接转化的方法之类的,没想出来,还是得老实做,先把数转化成二进制存放在数组中,(注意此时是倒序),然后换成补码,最后转换成十进制
代码:
func bitwiseComplement(N int) int {
if N==0{
return 1
}
if N==1{
return 0
}
nums:=[]int{}
for N/2!=0{
nums=append(nums,N%2)
N/=2
}
nums=append(nums,N)
n:=len(nums)
for i:=0;i=0;i--{
if nums[i]!=0{
tmp:=1
for k:=0;k
题目描述:
在歌曲列表中,第 i 首歌曲的持续时间为 time[i] 秒。
返回其总持续时间(以秒为单位)可被 60 整除的歌曲对的数量。形式上,我们希望索引的数字 i < j 且有 (time[i] + time[j]) % 60 == 0。
示例 1:
输入:[30,20,150,100,40]
输出:3
解释:这三对的总持续时间可被 60 整数:
(time[0] = 30, time[2] = 150): 总持续时间 180
(time[1] = 20, time[3] = 100): 总持续时间 120
(time[1] = 20, time[4] = 40): 总持续时间 60
示例 2:
输入:[60,60,60]
输出:3
解释:所有三对的总持续时间都是 120,可以被 60 整数。
分析:没什么难度,遍历就完了
代码:
func numPairsDivisibleBy60(time []int) int {
n:=len(time)
if n<=1{
return 0
}
count:=0
for i:=0;i
题目描述:
1014. 在 D 天内送达包裹的能力 显示英文描述
用户通过次数 0
用户尝试次数 0
通过次数 0
提交次数 0
题目难度 Medium
传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。
传送带上的第 i 个包裹的重量为 weights[i]。每一天,我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。
返回能在 D 天内将传送带上的所有包裹送达的船的最低运载能力。
示例 1:
输入:weights = [1,2,3,4,5,6,7,8,9,10], D = 5
输出:15
解释:
船舶最低载重 15 就能够在 5 天内送达所有包裹,如下所示:
第 1 天:1, 2, 3, 4, 5
第 2 天:6, 7
第 3 天:8
第 4 天:9
第 5 天:10
请注意,货物必须按照给定的顺序装运,因此使用载重能力为 14 的船舶并将包装分成 (2, 3, 4, 5), (1, 6, 7), (8), (9), (10) 是不允许的。
示例 2:
输入:weights = [3,2,2,4,1,4], D = 3
输出:6
解释:
船舶最低载重 6 就能够在 3 天内送达所有包裹,如下所示:
第 1 天:3, 2
第 2 天:2, 4
第 3 天:1, 4
示例 3:
输入:weights = [1,2,3,1,1], D = 4
输出:3
解释:
第 1 天:1
第 2 天:2
第 3 天:3
第 4 天:1, 1
分析:一开始有点蒙,后来捋了捋思绪,大概是,先确定一下最大值,以他为最少载重试一把,不行再往上加,思路就是这样
代码:
func shipWithinDays(weights []int, D int) int {
n:=len(weights)
max:=max(weights)
d:=1 //第几天
i:=0 //第几个货
tmp:=weights[0]
for in{ //天数到了,送完了,可以
break
}else{
d++
tmp=0
}
}
}
return max
}
func max(w []int)int{
n:=len(w)
max:=w[0]
for i:=1;imax{
max=w[i]
}
}
return max
}
给定正整数 N,返回小于等于 N 且具有至少 1 位重复数字的正整数。
示例 1:
输入:20
输出:1
解释:具有至少 1 位重复数字的正数(<= 20)只有 11 。
示例 2:
输入:100
输出:10
解释:具有至少 1 位重复数字的正数(<= 100)有 11,22,33,44,55,66,77,88,99 和 100 。
示例 3:
输入:1000
输出:262
提示:
1 <= N <= 10^9
分析:数据太大,暴力肯定超时,有没有大佬知道好算法