代码随想录复习 151反转字符串中的单词242 有效的字母异位词 0-1背包问题

news/2024/9/5 19:30:06 标签: c++, 数据结构, 算法

代码如下 

func reverseWords(s string) string {

         b := []byte(s)   

         slowindex,fastindex := 0,0  //设置两个指着,快慢指针

         for len(b) > 0 && fastindex < len(b) && b[fastindex] == ' '{

             fastindex++    //这里是取出开头的空格,逻辑是如果当前指针遍历的是一个空格,那么就继续向后遍历,直到遍历到不是空格的地方,跳出循环

         }

         for ; fastindex < len(b) ; fastindex++ {  // 这个循环的目的是去除中间的空格,逻辑是如果前一个元素和当前元素相等,且为空格,那么就跳过当前元素。否则赋值给慢指针,慢指针记录的是需要的元素 

             if fastindex-1 > 0 && b[fastindex-1] == b[fastindex] && b[fastindex] == ' '{

                 continue 

             }

             b[slowindex] = b[fastindex] 

             slowindex++       //注意的是这里的慢指针会指向最后一个元素的后一个位置

         }

         if slowindex-1 > 0 && b[slowindex-1] == ' '{  //这里是去除最后末尾的空格,有两种情况第一种是最后的元素是空格,第二种情况是最后的元素不是空格 。

             b = b[:slowindex-1]   //如果慢指针的前一个元素是空格,那么就要去掉那个空格

         }else {

             b = b[:slowindex] //如果慢指针的前一个元素不是空格,则直接取到慢指针之前一个元素即可 

         }

         reverse(&b,0,len(b)-1)  //先反转一次字符串

         i := 0  //i表示的是单词的起始位置

         for i < len(b) { //遍历字符串

             j := i  //j表示的是单词的终止位置

             for ; j < len(b)&& b[j] != ' ' ; j++ { //j只要不是空格就向后移动,如果遇到了空格,那么就跳出循环,此时j指向的就是单词结束后的空格 

             }

             reverse(&b,i,j-1) //反转单词

             i = j   

             i++ 

         }

         return string(b)

}

func reverse(b *[]byte,left,right int){

    for left < right {

        (*b)[left],(*b)[right] = (*b)[right],(*b)[left]

        left++

        right--

    }

}

242 有效的字母异位词

代码如下 

func isAnagram(s string, t string) bool {

          record := [26]int{}        //思路如下 每个字母与'a'进行相减,得到ASCII码的差值,而 record[s[i]-'a']代表每个不同的字母,并记录每个字母的个数 

          for i := 0 ; i < len(s) ; i++ {

              record[s[i]-'a']++

          }

          for i := 0 ; i <len(t) ; i++ {  //遍历另一个字符串,如果字母个数相同则返回TRUE

              record[t[i]-'a']--

          }

          if record ==  [26]int{}{

              return true 

          }else {

              return false 

          }

0-1 背包问题 

代码如下

package main

import "fmt"

func main() {

    weight := []int{1, 3, 4}  //设置每个物品的重量,物品的数量等于weight数组的长度

    value := []int{15, 20, 30}

    bagweight := 4

    dp := make([][]int, len(weight))  //数组大小为物品数量

    for i := 0; i < len(dp); i++ { //建立一个物品与背包重量的二维数组

        dp[i] = make([]int, bagweight+1)

    }

    for j := weight[0]; j <= bagweight; j++ {  //初始化,从背包等于物品0的重量,到总的背包重量

        dp[0][j] = value[0]

    }

    for i := 1; i < len(weight); i++ {

        for j := 0; j <= bagweight; j++ {

            if j < weight[i] {   //如果背包重量小于当前物品重量,则不放入该物品

                dp[i][j] = dp[i-1][j]

            } else {

                dp[i][j] = max(dp[i-1][j], dp[i-1][j-weight[i]]+value[i]) //否则,则是在不放与放之间取一个最大值,且如果要放这个物品,那么之前背包的最大值应该是当前背包容量减去该物品的容量,在这个容量之下,i-1个物品的最大价值

            }

        }

    }

    fmt.Println(dp[len(weight)-1][bagweight])

}

func max(a, b int) int {

    if a > b {

        return a

    } else {

        return b

    }

}


http://www.niftyadmin.cn/n/311794.html

相关文章

华为OD机试真题 Java 实现【微服务的集成测试】【2023Q1 100分】

一、题目描述 现在有n个容器服务&#xff0c;服务的启动可能有一定的依赖性&#xff08;有些服务启动没有依赖&#xff09;&#xff0c;其次服务自身启动加载会消耗一些时间。 给你一个 nxn 的二维矩阵 useTime&#xff0c;其中 useTime[i][i]10 表示服务 i 自身启动加载需要消…

网站电脑商城项目笔记

目录 注册 3.1规划需要执行的SQL语句 3.2设计接口和抽象方法 3.3编写映射 4.注册-业务层 4.1规划异常 4.2设计接口和抽象方法 5.注册控制层 5.1创建响应 5.2设计请求 5.3处理请求 5.4控制层优化设计 6.注册-前端页面 注册 持久层&#xff1a;通过Mybatis来操作数据…

Grafana 系列-统一展示-3-Prometheus 仪表板

系列文章 Grafana 系列文章 知识储备 Prometheus Template Variables 你可以使用变量来代替硬编码的细节&#xff0c;如 server、app 和 pod_name 在 metric 查询中。Grafana 在仪表盘顶部的下拉选择框中列出这些变量&#xff0c;帮助你改变仪表盘中显示的数据。Grafana 将…

模型微调的预处理

一.简历文本标注数据的准备 目标&#xff1a;把原始数据集转换为PaddleNLP支持的文本/文档抽取标注格式&#xff0c;为后续的模型微调做好准备。 工具&#xff1a;Label Studio 使用手册&#xff1a; applications/information_extraction/label_studio_text.md PaddlePad…

如何选择合适的智能氮气柜?

随着电子产品的普及&#xff0c;IC、半导体、精密元件、检测仪器之类的物品对湿度要求越来越高&#xff0c;潮湿、霉菌和金属氧化所造成的损害&#xff0c;随时在发生。人们对于物品的存放环境要求逐渐提高&#xff0c;利用防潮设备如智能氮气柜、电子防潮柜来存储产品也越来越…

使用rsync和inotify实时备份CentOS服务器数据(详解)

简介 在日常运维中&#xff0c;确保服务器上的数据安全是至关重要的。数据丢失或损坏可能会导致灾难性后果&#xff0c;因此定期备份数据是一个明智的做法。本文LZ将向您展示如何使用 rsync 和 inotify-tools 工具在 CentOS 系统上设置实时备份&#xff0c;以确保您的数据始终…

QT + OpenGL + FFmpeg写的一个全景视频播放器

临时被分配了一个任务 写一个C版本的全景视频播放器 网上搜了搜 基于前辈的基础上 写的差不多了 测试视频源是用ffmpeg拉RTSP的流 最终是要嵌入到别的一个视频播放器模块 所以解码这块我不用太关注 只要实现渲染就可以了 效果如下 左边的窗口用于输入视频源 以及显示…

web网络安全

在学习网络安全之前&#xff0c;必须要先知道一个组织——OWASP。 OWASP是一个开源的、非盈利的全球性安全组织&#xff0c;致力于应用软件的安全研究。我们基于该组织公布的技术文档来学习相关网络攻击原理和预防措施&#xff0c;web安全的核心是——永远不要相信用户传过来的…