每日编程(34)--leetcode128周竞赛

没错我又参加了第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

题目:总持续时间课被60整除的歌曲

题目描述:
在歌曲列表中,第 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

题目:在 D 天内送达包裹的能力

题目描述:
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
分析:数据太大,暴力肯定超时,有没有大佬知道好算法

你可能感兴趣的:(每日编程)