当前位置: 首页 > news >正文

Golang每日一练(leetDay0065) 位1的个数、词频统计

目录

191. 位1的个数 Nnumber of 1-bits  🌟

192. 统计词频 Word Frequency  🌟🌟

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


191. 位1的个数 Nnumber of 1-bits

编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量)​。

提示:

  • 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。
  • 在 Java 中,编译器使​用二进制补码记法​来表示有符号整数。因此,在 示例 3 中,输入表示有符号整数 -3

示例 1:

输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。

示例 2:

输入:00000000000000000000000010000000
输出:1
解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 '1'。

示例 3:

输入:11111111111111111111111111111101
输出:31
解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 '1'。

提示:

  • 输入必须是长度为 32 的 二进制串 。

进阶

  • 如果多次调用这个函数,你将如何优化你的算法?

代码:

package mainimport ("fmt""math/bits"
)func hammingWeight1(num int) int {sum := 0for i := 0; i < 32; i++ {if (num>>i)&1 == 1 {sum++}}return sum
}func hammingWeight2(num int) int {sum := 0for num != 0 {num &= num - 1sum++}return sum
}func hammingWeight3(num int) int {return bits.OnesCount32(uint32(num))
}func main() {n := 0b00000000000000000000000000001011a := hammingWeight1(n)b := hammingWeight2(n)c := hammingWeight3(n)fmt.Println(a, b, c)n = 0b00000000000000000000000010000000a = hammingWeight1(n)b = hammingWeight2(n)c = hammingWeight3(n)fmt.Println(a, b, c)n = 0b11111111111111111111111111111101a = hammingWeight1(n)b = hammingWeight2(n)c = hammingWeight3(n)fmt.Println(a, b, c)
}

输出:

3 3 3
1 1 1
31 31 31


192. 统计词频 Word Frequency

写一个 bash 脚本以统计一个文本文件 words.txt 中每个单词出现的频率。

为了简单起见,你可以假设:

  • words.txt只包括小写字母和 ' ' 。
  • 每个单词只由小写字母组成。
  • 单词间由一个或多个空格字符分隔。

示例:

假设 words.txt 内容如下:

the day is sunny the the
the sunny is is

你的脚本应当输出(以词频降序排列):

the 4
is 3
sunny 2
day 1

说明:

  • 不要担心词频相同的单词的排序问题,每个单词出现的频率都是唯一的。
  • 你可以使用一行​ Unix pipes ​实现吗?

代码:

package mainimport ("bufio""fmt""os""sort""strings"
)func main() {words := make(map[string]int)file, err := os.Open("words.txt")if err != nil {fmt.Println(err)}defer file.Close()scanner := bufio.NewScanner(file)scanner.Split(bufio.ScanWords)for scanner.Scan() {word := scanner.Text()words[word]++}if err := scanner.Err(); err != nil {fmt.Println(err)}type kv struct {Key   stringValue int}var ss []kvfor k, v := range words {ss = append(ss, kv{k, v})}sort.Slice(ss, func(i, j int) bool {return ss[i].Value > ss[j].Value})for _, kv := range ss {fmt.Printf("%s %d\n", kv.Key, kv.Value)}
}

调用pipes命令:

package mainimport ("fmt""os/exec""strings"
)func main() {cmd := exec.Command("bash", "-c", "cat words.txt | awk '{for(i=1; i<=NF; i++) count[$i]++} END {for (w in count) print w, count[w]}'")out, err := cmd.Output()if err != nil {fmt.Println(err)}lines := strings.Split(string(out), "\n")for _, line := range lines {if line != "" {words := strings.Split(line, " ")fmt.Printf("%s %s\n", words[1], words[0])}}
}

🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

 主页:https://hannyang.blog.csdn.net/ 

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏

http://www.lryc.cn/news/67555.html

相关文章:

  • 前端技术搭建井字游戏(内含源码)
  • 视频截取gif方法分享,利用gif制作工具在线制作动图
  • VRRP高级特性——管理VRRP
  • FreeRTOS内核:详解Task各状态(GPT4帮写)
  • 基于粒子群优化算法的最佳方式优化无线传感器节点的位置(Matlab代码实现)
  • 第一章 Andorid系统移植与驱动开发概述 - 读书笔记
  • vi编辑器的三种模式及其对应模式下常用指令
  • webpack: 5 报错,错误
  • MyBatis的缓存
  • c语言-位段
  • Servlet3.0 新特性全解
  • PAT A1045 Favorite Color Stripe
  • 真实业务场景使用-门面模式(外观)设计模式
  • 基于多动作深度强化学习的柔性车间调度研究(Matlab代码实现)
  • 出口亚马逊平衡车CE/UKCA认证注意事项
  • 云原生环境下的安全实践:保护应用程序和数据的关键策略
  • vue 改变数据后,数据变化页面不刷新
  • 【Qt编程之Widgets模块】-006:QSortFilterProxyModel代理的使用方法
  • 上林赋 汉 司马相如
  • 7.对象模型
  • 机器学习——基本概念
  • Qt---感觉挺重要的部分
  • springboot+vue家乡特色推荐系统(源码+文档)
  • 在Shell脚本中通过ssh从脚本运行函数
  • 简单学习一下 MyBatis 动态SQL使用及原理
  • WhatsApp如何让客户参与变得更简单?
  • 记一次 MySQL 主从同步异常的排查记录,百转千回
  • Cpython的多线程技术之痛
  • NDK OpenGL离屏渲染与工程代码整合
  • Python基础入门编程代码练习(二)