【leetCode】leetCode刷题Golang版本--搜索插入位置

mb601cf691d1fe2 · · 600 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

 

搜索插入位置

 

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

你可以假设数组中无重复元素。

示例 1:

输入: [1,3,5,6], 5输出: 2

     

示例 2:

输入: [1,3,5,6], 2输出: 1

     

示例 3:

输入: [1,3,5,6], 7输出: 4

     

示例 4:

输入: [1,3,5,6], 0输出: 0

     

 

     

解题过程:

注意:1.nums是一个有序排列(升序)

     

 

思路:

1. target是否在数组中存在

2. target 元素大小比较

func searchInsert(nums []int, target int)int{
	lens := len(nums)
	if lens == 0{
		return 0
	}
	// 确认是否存在数组中
	for k, v := range nums  {
		if v == target{
			return k
		}
	}
	// 确认按循序插入的位置
	cursorIndex := 0
	for i:=0; i< lens ; i++{
		if nums[i] < target{
			cursorIndex = i+1
		}
	}
	return cursorIndex
}

 优化:不需要确认是否存在target,只需要找出第一个大于等于target的元素所在索引值

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

func searchInsert(nums []int, target int) int {
	for i, key := range nums {
		if target <= key {
			return i
		}
	}
	return len(nums)
}

 

深度优化: 目前我们看到的数组,元素个数都比较少,如果存在N个元素,那么循环比较的销量相对下降。

可以使用二分法算法,查找第一个小于等于target的元素。

 

 

 


有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:mb601cf691d1fe2

查看原文:【leetCode】leetCode刷题Golang版本--搜索插入位置

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

600 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传