Golang每日一练(leetDay0059) 两数之和II、Excel表列名称

简介: Golang每日一练(leetDay0059) 两数之和II、Excel表列名称

167. 两数之和 II 输入有序数组 Two-sum-ii-input-array-is-sorted


给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列  ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。


以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1 和 index2。

你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。


你所设计的解决方案必须只使用常量级的额外空间。


示例 1:

输入:numbers = [2,7,11,15], target = 9

输出:[1,2]

解释:2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。


示例 2:

输入:numbers = [2,3,4], target = 6

输出:[1,3]

解释:2 与 4 之和等于目标数 6 。因此 index1 = 1, index2 = 3 。返回 [1, 3] 。


示例 3:

输入:numbers = [-1,0], target = -1

输出:[1,2]

解释:-1 与 0 之和等于目标数 -1 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。


提示:

   2 <= numbers.length <= 3 * 10^4

   -1000 <= numbers[i] <= 1000

   numbers 按 非递减顺序 排列

   -1000 <= target <= 1000

   仅存在一个有效答案


代码1: 双指针

package main
import "fmt"
func twoSum(numbers []int, target int) []int {
  i, j := 0, len(numbers)-1
  for i < j {
    sum := numbers[i] + numbers[j]
    if sum == target {
      return []int{i + 1, j + 1}
    } else if sum < target {
      i++
    } else {
      j--
    }
  }
  return []int{}
}
func main() {
  numbers := []int{2, 7, 11, 15}
  target := 9
  fmt.Println(twoSum(numbers, target))
  numbers = []int{2, 3, 4}
  target = 6
  fmt.Println(twoSum(numbers, target))
  numbers = []int{-1, 0}
  target = -1
  fmt.Println(twoSum(numbers, target))
}


代码2: 二分查找

package main
import "fmt"
func binarySearch(numbers []int, target, left int) int {
  right := len(numbers) - 1
  for left <= right {
    mid := (left + right) / 2
    if numbers[mid] == target {
      return mid
    } else if numbers[mid] > target {
      right = mid - 1
    } else {
      left = mid + 1
    }
  }
  return -1
}
func twoSum(numbers []int, target int) []int {
  for i, x := range numbers {
    j := binarySearch(numbers, target-x, i+1)
    if j != -1 {
      return []int{i + 1, j + 1}
    }
  }
  return []int{}
}
func main() {
  numbers := []int{2, 7, 11, 15}
  target := 9
  fmt.Println(twoSum(numbers, target))
  numbers = []int{2, 3, 4}
  target = 6
  fmt.Println(twoSum(numbers, target))
  numbers = []int{-1, 0}
  target = -1
  fmt.Println(twoSum(numbers, target))
}


代码3: 哈希表

package main
import "fmt"
func twoSum(numbers []int, target int) []int {
  index := make(map[int]int)
  for i, x := range numbers {
    if j, ok := index[target-x]; ok {
      return []int{j + 1, i + 1}
    }
    index[x] = i
  }
  return []int{}
}
func main() {
  numbers := []int{2, 7, 11, 15}
  target := 9
  fmt.Println(twoSum(numbers, target))
  numbers = []int{2, 3, 4}
  target = 6
  fmt.Println(twoSum(numbers, target))
  numbers = []int{-1, 0}
  target = -1
  fmt.Println(twoSum(numbers, target))
}

输出:

[1 2]

[1 3]

[1 2]


168. Excel表列名称 Excel Sheet Column Title


给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。


例如:

A -> 1

B -> 2

C -> 3

...

Z -> 26

AA -> 27

AB -> 28  

...


示例 1:

输入:columnNumber = 1

输出:"A"


示例 2:

输入:columnNumber = 28

输出:"AB"


示例 3:

输入:columnNumber = 701

输出:"ZY"


示例 4:

输入:columnNumber = 2147483647

输出:"FXSHRXW"


提示:

   1 <= columnNumber <= 2^31 - 1

代码1: 递归

package main
import "fmt"
func convertToTitle(columnNumber int) string {
  if columnNumber <= 26 {
    return string('A' + columnNumber - 1)
  }
  mod := (columnNumber - 1) % 26
  return convertToTitle((columnNumber-1)/26) + string('A'+mod)
}
func main() {
  fmt.Println(convertToTitle(1))
  fmt.Println(convertToTitle(28))
  fmt.Println(convertToTitle(701))
  fmt.Println(convertToTitle(2147483647))
}


代码2:迭代

package main
import "fmt"
func convertToTitle(columnNumber int) string {
  ans := ""
  for columnNumber > 0 {
    mod := (columnNumber - 1) % 26
    ans = string('A'+mod) + ans
    columnNumber = (columnNumber - 1) / 26
  }
  return ans
}
func main() {
  fmt.Println(convertToTitle(1))
  fmt.Println(convertToTitle(28))
  fmt.Println(convertToTitle(701))
  fmt.Println(convertToTitle(2147483647))
}


输出:

A

AB

ZY

FXSHRXW

目录
相关文章
|
存储 算法 数据挖掘
深入解析力扣168题:Excel表列名称(进制转换法详解及模拟面试问答)
深入解析力扣168题:Excel表列名称(进制转换法详解及模拟面试问答)
|
算法 数据挖掘 大数据
深入解析力扣171题:Excel表列序号(进制转换法详解及模拟面试问答)
深入解析力扣171题:Excel表列序号(进制转换法详解及模拟面试问答)
【力扣】168. Excel表列名称、171. Excel 表列序号
【力扣】168. Excel表列名称、171. Excel 表列序号
205 1
|
Shell Linux 算法
Shell编程——弱数据类型的脚本语言快速入门指南
Shell编程——弱数据类型的脚本语言快速入门指南
207 0
Shell编程——弱数据类型的脚本语言快速入门指南
|
Go Linux Shell
Linux 终端命令之文件浏览(2) more
Linux 终端命令之文件浏览(2) more
190 0
Linux 终端命令之文件浏览(2) more
|
Java
|
5月前
|
Python
如何根据Excel某列数据为依据分成一个新的工作表
在处理Excel数据时,我们常需要根据列值将数据分到不同的工作表或文件中。本文通过Python和VBA两种方法实现该操作:使用Python的`pandas`库按年级拆分为多个文件,再通过VBA宏按班级生成新的工作表,帮助高效整理复杂数据。
|
5月前
|
数据采集 数据可视化 数据挖掘
用 Excel+Power Query 做电商数据分析:从 “每天加班整理数据” 到 “一键生成报表” 的配置教程
在电商运营中,数据是增长的关键驱动力。然而,传统的手工数据处理方式效率低下,耗费大量时间且易出错。本文介绍如何利用 Excel 中的 Power Query 工具,自动化完成电商数据的采集、清洗与分析,大幅提升数据处理效率。通过某美妆电商的实战案例,详细拆解从多平台数据整合到可视化报表生成的全流程,帮助电商从业者摆脱繁琐操作,聚焦业务增长,实现数据驱动的高效运营。
|
7月前
|
存储 安全 大数据
网安工程师必看!AiPy解决fscan扫描数据整理难题—多种信息快速分拣+Excel结构化存储方案
作为一名安全测试工程师,分析fscan扫描结果曾是繁琐的手动活:从海量日志中提取开放端口、漏洞信息和主机数据,耗时又易错。但现在,借助AiPy开发的GUI解析工具,只需喝杯奶茶的时间,即可将[PORT]、[SERVICE]、[VULN]、[HOST]等关键信息智能分类,并生成三份清晰的Excel报表。告别手动整理,大幅提升效率!在安全行业,工具党正碾压手动党。掌握AiPy,把时间留给真正的攻防实战!官网链接:https://www.aipyaipy.com,解锁更多用法!
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
2182 10

推荐镜像

更多