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

目录
相关文章
|
13天前
【力扣】168. Excel表列名称、171. Excel 表列序号
【力扣】168. Excel表列名称、171. Excel 表列序号
|
13天前
|
Java
|
13天前
|
Shell Linux 算法
Shell编程——弱数据类型的脚本语言快速入门指南
Shell编程——弱数据类型的脚本语言快速入门指南
58 0
Shell编程——弱数据类型的脚本语言快速入门指南
|
13天前
|
Go Linux Shell
Linux 终端命令之文件浏览(2) more
Linux 终端命令之文件浏览(2) more
34 0
Linux 终端命令之文件浏览(2) more
|
13天前
|
Shell 机器学习/深度学习 Linux
Linux 终端操作命令(2)内部命令
Linux 终端操作命令(2)内部命令
26 0
Linux 终端操作命令(2)内部命令
|
13天前
|
C++ 算法 存储
力扣 C++|一题多解之动态规划专题(2)
力扣 C++|一题多解之动态规划专题(2)
41 0
力扣 C++|一题多解之动态规划专题(2)
|
13天前
|
Python 索引
Python Numpy入门基础(一)创建数组
Python Numpy入门基础(一)创建数组
42 0
Python Numpy入门基础(一)创建数组
|
8天前
|
前端开发 Java
基于Java爬取微博数据(二) 正文长文本+导出数据Excel
【5月更文挑战第12天】基于Java爬取微博数据,正文长文本+导出数据Excel
|
13天前
|
Java
java导出复杂excel
java导出复杂excel
|
2天前
|
文字识别
分享:如何ocr识别身份证复印件并导出至excel表格 ? 图片批量识别导出excel表格应用,图片批量识别转excel表格的方法
该软件是一款OCR身份证识别工具,能批量处理图片,自动提取身份证信息并导出为Excel。支持百度网盘和腾讯云盘下载。用户界面直观,操作简单,适合新手。识别过程包括:打开图片、一键识别、导出结果。特别注意,此程序仅适用于身份证识别,不适用于其他类型的图片识别。
分享:如何ocr识别身份证复印件并导出至excel表格 ? 图片批量识别导出excel表格应用,图片批量识别转excel表格的方法