leetcode刷题(一) --- 双指针(go实现)

leetcode刷题整理系列

leetcode刷题(一) — 双指针思想
leetcode刷题(二) — 排序思想
leetcode刷题(三) — 二分查找思想
leetcode刷题(四) — 贪心思想

 

leetcode刷题类型(一)— 双指针类型

在排好序的数组或是链表中,两个指针朝着左右方向移动(双指针分为同向双指针和异向双指针),找一些组合满足某种限制条件。

经典题目
167 有序数组的两数和

给定一个已按照 非递减顺序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target

func twoSum(numbers []int, target int) []int {
	i := 0
	j := len(numbers) - 1
	a := make([]int, 2)
	for i < j {
		if numbers[i]+numbers[j] == target {
			a[0] = i + 1
			a[1] = j + 1
			break
		} else {
			if numbers[i]+numbers[j] > target {  //和大于目标值时,说明右值应该减小
				j--
			} else {
				i++
			}
		}
	}
	return a
}
633 平方数之和

给定一个非负整数 c ,你要判断是否存在两个整数 ab,使得 a2 + b2 = c

func judgeSquareSum(c int) bool {
	i := 0
	j := (int)(math.Sqrt(float64(c)))  //0^2+j^2=c,所以j最大是c的平方根,剪枝降低时间复杂度
	for i <= j {
		m := i*i + j*j
		if m == c {
			return true
		} else {
			if m < c {
				i++
			} else {
				j--
			}
		}
	}
	return false
}

345 反转字符串中的元音字母

给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。

func reverseVowels(s string) string {
	//将所有元音字母加入map
	dict := make(map[uint8]int)
	dict['a'] = 1
	dict['e'] = 1
	dict['o'] = 1
	dict['u'] = 1
	dict['i'] = 1
	dict['A'] = 1
	dict['E'] = 1
	dict['O'] = 1
	dict['U'] = 1
	dict['I'] = 1
	//将字符串转为byte数组
	arr := []byte(s)
	length := len(arr)
	i := 0
	j := length - 1
	for true {
		for i < length {
			if _, ok := dict[arr[i]]; ok {  //左指针找到元音字母
				break
			}
			i++
		}
		for j > 0 {
			if _, ok := dict[arr[j]]; ok {  //右指针找到元音字母
				break
			}
			j--
		}
		if i >= j {   //左右指针相遇后交换结束
			break
		}
		//交换左右指针的元音字母
		tmp := arr[i]
		arr[i] = arr[j]
		arr[j] = tmp
		i++
		j--
	}
	return string(arr)
}

还有经典的快速排序~

如有不对,烦请指出~

参考自:
http://www.cyc2018.xyz/
https://leetcode-cn.com/problems

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值