Go:基础入门练习001 - 010

package main

import (
  "fmt"
  "strings"
)

//001. 执行操作后的变量值
//存在一种仅支持 4 种操作和 1 个变量 X 的编程语言:
//++X 和 X++ 使变量 X 的值 加 1
//--X 和 X-- 使变量 X 的值 减 1
//最初,X 的值是 0
//给你一个字符串数组 operations ,这是由操作组成的一个列表,返回执行所有操作后, X 的 最终值 。
//
//示例 1:
//输入:operations = ["--X","X++","X++"]
//输出:1
//解释:操作按下述步骤执行:
//最初,X = 0
//--X:X 减 1 ,X =  0 - 1 = -1
//X++:X 加 1 ,X = -1 + 1 =  0
//X++:X 加 1 ,X =  0 + 1 =  1
//
//示例 2:
//输入:operations = ["++X","++X","X++"]
//输出:3
//解释:操作按下述步骤执行:
//最初,X = 0
//++X:X 加 1 ,X = 0 + 1 = 1
//++X:X 加 1 ,X = 1 + 1 = 2
//X++:X 加 1 ,X = 2 + 1 = 3
//
//示例 3:
//输入:operations = ["X++","++X","--X","X--"]
//输出:0
//解释:操作按下述步骤执行:
//最初,X = 0
//X++:X 加 1 ,X = 0 + 1 = 1
//++X:X 加 1 ,X = 1 + 1 = 2
//--X:X 减 1 ,X = 2 - 1 = 1
//X--:X 减 1 ,X = 1 - 1 = 0

func finalValueAfterOperations(operations []string) int {
  result := 0
  for _, v := range operations {
    if v == "++X" || v == "X++" {
      result += 1
    } else {
      result -= 1
    }
  }
  return result
}

//002. 剑指 Offer 58 - II. 左旋转字符串
//字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。
//请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,
//该函数将返回左旋转两位得到的结果"cdefgab"。
//示例 1:
//输入: s = "abcdefg", k = 2
//输出: "cdefgab"
//示例 2:
//输入: s = "lrloseumgh", k = 6
//输出: "umghlrlose"

func reverseLeftWords(s string, n int) string {
  // s 分成左右两半。
  // 遍历左,遍历右边
  // 拼接
  result := s[n:] + s[:n]
  var words string
  for _, v := range result {
    words += string(v)
  }
  return words
}

//003. 句子中的最多单词数
///一个 句子 由一些 单词 以及它们之间的单个空格组成,句子的开头和结尾不会有多余空格。
//给你一个字符串数组 sentences ,其中 sentences[i] 表示单个 句子 。
//请你返回单个句子里 单词的最多数目 。
//示例 1:
//输入:sentences = ["alice and bob love leetcode", "i think so too", "this is great thanks very much"]
//输出:6
//解释:
//- 第一个句子 "alice and bob love leetcode" 总共有 5 个单词。
//- 第二个句子 "i think so too" 总共有 4 个单词。
//- 第三个句子 "this is great thanks very much" 总共有 6 个单词。
//所以,单个句子中有最多单词数的是第三个句子,总共有 6 个单词。
//
//示例 2:
//输入:sentences = ["please wait", "continue to fight", "continue to win"]
//输出:3
//解释:可能有多个句子有相同单词数。
//这个例子中,第二个句子和第三个句子(加粗斜体)有相同数目的单词数。

func mostWordsFound(sentences []string) int {
  maxCount := 0
  var counts = make([]int, 100)
  for i, v := range sentences {
    res := strings.Split(v, " ")
    counts[i] = len(res)
  }

  for _, v := range counts {
    if v > maxCount {
      maxCount = v
    }
  }
  return maxCount
}

//004. 两整数相加
//给你两个整数 num1 和 num2,返回这两个整数的和。
//示例 1:
//输入:num1 = 12, num2 = 5
//输出:17
//解释:num1 是 12,num2 是 5 ,它们的和是 12 + 5 = 17 ,因此返回 17 。
//示例 2:
//输入:num1 = -10, num2 = 4
//输出:-6
//解释:num1 + num2 = -6 ,因此返回 -6 。

func sum(num1 int, num2 int) int {
  return num1 + num2
}

//005. 剑指 Offer 65. 不用加减乘除做加法
//写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
//示例:
//输入: a = 1, b = 1
//输出: 2

func add(a int, b int) int {
  return a + b
}

//006. 剑指 Offer 03. 数组中重复的数字
//找出数组中重复的数字。
//在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,
//但不知道有几个数字重复了,
//也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
//示例 1:
//输入:
//[2, 3, 1, 0, 2, 5, 3]
//输出:2 或 3

func findRepeatNumber(nums []int) int {
  count := 0
  temp := 0
  m1 := map[int]int{}
  for _, v := range nums {
    count += 1
    if m1[v] > 0 {
      m1[v] += 1
      temp = v
      break
    } else {
      m1[v] = 1
    }
  }
  return temp
}

//007. 按奇偶排序数组
//给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。
//返回满足此条件的 任一数组 作为答案。
//示例 1:
//输入:nums = [3,1,2,4]
//输出:[2,4,3,1]
//解释:[4,2,3,1]、[2,4,1,3] 和 [4,2,1,3] 也会被视作正确答案。
//示例 2:
//输入:nums = [0]
//输出:[0]

func sortArrayByParity(nums []int) []int {
  // 取模如果==1 ,alist  否则blist
  alist := []int{}
  blist := []int{}
  for _, v := range nums {
    if v%2 == 1 {
      alist = append(alist, v)
    } else {
      blist = append(blist, v)
    }
  }
  c := append(blist, alist...)
  return c
}

//008. 按奇偶排序数组 II
//给定一个非负整数数组 nums,  nums 中一半整数是 奇数 ,一半整数是 偶数 。
//对数组进行排序,以便当 nums[i] 为奇数时,i 也是 奇数 ;当 nums[i] 为偶数时, i 也是 偶数 。
//你可以返回 任何满足上述条件的数组作为答案 。
//示例 1:
//输入:nums = [4,2,5,7]
//输出:[4,5,2,7]
//解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。
//示例 2:
//输入:nums = [2,3]
//输出:[2,3]

func sortArrayByParityII(nums []int) []int {
  zList := []int{}
  oList := []int{}
  for _, v := range nums {
    if v%2 == 0 {
      zList = append(zList, v)
    } else {
      oList = append(oList, v)
    }
  }
  temp := []int{}
  for i := 0; i < len(zList); i++ {
    temp = append(temp, zList[i])
    temp = append(temp, oList[i])
  }
  return temp
}

//009. 最富有客户的资产总量
//给你一个 m x n 的整数网格 accounts ,其中 accounts[i][j] 是第 i 位客户在第 j 家银行托管的资产数量。
//返回最富有客户所拥有的 资产总量 。
//客户的 资产总量 就是他们在各家银行托管的资产数量之和。最富有客户就是 资产总量 最大的客户。
//示例 1:
//输入:accounts = [[1,2,3],[3,2,1]]
//输出:6
//解释:
//第 1 位客户的资产总量 = 1 + 2 + 3 = 6
//第 2 位客户的资产总量 = 3 + 2 + 1 = 6
//两位客户都是最富有的,资产总量都是 6 ,所以返回 6 。
//示例 2:
//输入:accounts = [[1,5],[7,3],[3,5]]
//输出:10
//解释:
//第 1 位客户的资产总量 = 6
//第 2 位客户的资产总量 = 10
//第 3 位客户的资产总量 = 8
//第 2 位客户是最富有的,资产总量是 10
//示例 3:
//输入:accounts = [[2,8,7],[7,1,3],[1,9,5]]
//输出:17

func maximumWealth(accounts [][]int) int {
  result := 0
  for _, v1 := range accounts {
    temp2 := 0
    for _, v2 := range v1 {
      temp2 += v2
    }
    if temp2 > result {
      result = temp2
    }
  }
  return result
}

//010. 基于排列构建数组
//给你一个 从 0 开始的排列 nums(下标也从 0 开始)。请你构建一个 同样长度 的数组 ans ,其中,
//对于每个 i(0 <= i < nums.length),都满足 ans[i] = nums[nums[i]] 。返回构建好的数组 ans 。
//从 0 开始的排列 nums 是一个由 0 到 nums.length - 1(0 和 nums.length - 1 也包含在内)的不同整数组成的数组。
//示例 1:
//输入:nums = [0,2,1,5,3,4]
//输出:[0,1,2,4,5,3]
//解释:数组 ans 构建如下:
//ans = [nums[nums[0]], nums[nums[1]], nums[nums[2]], nums[nums[3]], nums[nums[4]], nums[nums[5]]]
//= [nums[0], nums[2], nums[1], nums[5], nums[3], nums[4]]
//= [0,1,2,4,5,3]
//示例 2:
//
//输入:nums = [5,0,1,2,3,4]
//输出:[4,5,0,1,2,3]
//解释:数组 ans 构建如下:
//ans = [nums[nums[0]], nums[nums[1]], nums[nums[2]], nums[nums[3]], nums[nums[4]], nums[nums[5]]]
//= [nums[5], nums[0], nums[1], nums[2], nums[3], nums[4]]
//= [4,5,0,1,2,3]

func buildArray(nums []int) []int {
  // 遍历
  ans := make([]int, len(nums))
  for i, v1 := range nums {
    ans[i] = nums[v1]
  }
  return ans
}
func main() {
  r001 := finalValueAfterOperations([]string{"X++", "++X", "--X"})
  fmt.Println("r001:", r001) // r001: 1

  r002 := reverseLeftWords("abcdefg", 2)
  fmt.Println("r002:", r002) // r002: cdefgab

  r003 := mostWordsFound([]string{"please wait", "continue to fight", "continue to win"})
  fmt.Println("r003:", r003) // r003: 3

  r004 := sum(8, 6)
  fmt.Println("r004:", r004) // r004: 14

  r005 := add(8, 8)
  fmt.Println("r005:", r005) // r005: 16

  r006 := findRepeatNumber([]int{2, 3, 1, 0, 2, 5, 3})
  fmt.Println("r006:", r006) // r006: 2

  r007 := sortArrayByParity([]int{2, 3, 1, 0, 5, 3})
  fmt.Println("r007:", r007) // r007: [2 0 3 1 5 3]

  r008 := sortArrayByParityII([]int{2, 1, 0, 5})
  fmt.Println("r008:", r008) // r008: [2 1 0 5]

  r009 := maximumWealth([][]int{{1, 5}, {7, 3}, {3, 5}})
  fmt.Println("r009:", r009) // r009: 10

  r010 := buildArray([]int{5, 0, 1, 2, 3, 4})
  fmt.Println("r010:", r010) // r010: [4 5 0 1 2 3]
}

微信公众号:玩转测试开发
欢迎关注,共同进步,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值