【第四天】剑指offer,每日一刷

这几天题目逐渐难了起来

1.剑指 Offer 39. 数组中出现次数超过一半的数字

func majorityElement(nums []int) int {
	if len(nums) == 1 {
		return nums[0]
	}
	sort.Ints(nums)
	return nums[len(nums)>>1]
}

脑筋急转弯,非空数组,又超过一半,那排序后的中间值就是

2.剑指 Offer 50. 第一个只出现一次的字符

func firstUniqChar(s string) byte {
	// 这一题难了,非得用map去写
	if s == "" {
		return byte(' ')
	}
	res := ' '
	myMap := make(map[rune]int)
	for _, item := range s {
		_, ok := myMap[item]
		if !ok {
			myMap[item] = 1
		} else {
			myMap[item]++
		}
	}
	fmt.Println(myMap)
	for _, item := range s {
		if myMap[item] == 1 {
			fmt.Println(myMap[item], "222")
			res = item
			break
		}
	}
	return byte(res)
}

虽然写的垃圾,但是好歹过了,还行,问题很多啊,string的range遍历是个rune,range遍历map似乎是无序的

3.剑指 Offer 61. 扑克牌中的顺子

func isStraight(nums []int) bool {

	sort.Ints(nums)
	nums1 := []int{}
	for i := 0; i < 5; i++ {
		if nums[i] != 0 {
			nums1 = append(nums1, nums[i])
		}
	}
	fmt.Println(nums1)
	if len(nums1) == 0 || len(nums1) == 1 {
		return true
	}
	for i := 0; i < len(nums1)-1; i++ {
		if nums1[i] == nums1[i+1] {
			return false
		}
	}
	return nums1[len(nums1)-1]-nums1[0] <= 4
}

写了三个小时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值