【算法刷题】Day25

文章目录

  • 1. 粉刷房子
    • 题干:
    • 算法原理:
      • 1. 状态表示:
      • 2. 状态转移方程
      • 3. 初始化
      • 4. 填表顺序
      • 5. 返回值
    • 代码:
  • 2. 判定字符是否唯一
    • 题干:
    • 算法原理:
      • 1. 哈希表
      • 2. 位图思想
    • 代码:
  • 3. 丢失的数字
    • 题干:
    • 算法原理:
      • 1. 哈希表
      • 2. 高斯求和
      • 3. 位运算(异或)
    • 代码:
  • 4. 只出现一次的数字 II
    • 题干:
    • 算法原理:
    • 代码:
  • 5. 消失的两个数字
    • 题干:
    • 算法原理:(位运算)
    • 代码:

1. 粉刷房子

在这里插入图片描述
原题链接


题干:

每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色
花费是以一个 n x 3 的正整数矩阵 costs
costs[0][0] 表示第 0 号房子粉刷成红色的成本花费
在这里插入图片描述


算法原理:

1. 状态表示:

dp[i][0] 表示:粉刷到 i 位置的时候,最后⼀个位置粉刷上「红色」,此时的最小花费

dp[i][1] 表示:粉刷到 i 位置的时候,最后⼀个位置粉刷上「蓝色」,此时的最小花费

dp[i][0] 表示:粉刷到 i 位置的时候,最后⼀个位置粉刷上「绿色」,此时的最小花费

2. 状态转移方程

在这里插入图片描述
dp[i][0] = min(dp[i - 1][1], dp[i- 1][2]) + costs[i - 1][0]
dp[i][1] = min(dp[i - 1][0], dp[i - 1][2]) + costs[i - 1][1]
dp[i][2] = min(dp[i - 1][0], dp[i - 1][1]) + costs[i - 1][2]

3. 初始化

在这里插入图片描述

  1. 辅助结点里面的值要「保证后续填表是正确的」
  2. 「下标的映射关系」

4. 填表顺序

从左往右,三个表⼀起填

5. 返回值

min(dp[n][0], min(dp[n][1], dp[n][2]))


代码:

class Solution {public int minCost(int[][] costs) {int n = costs.length;int[][] dp = new int[n + 1][3];for(int i = 1; i <= n; i++) {dp[i][0] = Math.min(dp[i - 1][1], dp[i - 1][2]) + costs[i - 1][0];dp[i][1] = Math.min(dp[i - 1][0], dp[i - 1][2]) + costs[i - 1][1];dp[i][2] = Math.min(dp[i - 1][0], dp[i - 1][1]) + costs[i - 1][2];}return Math.min(dp[n][0], Math.min(dp[n][1], dp[n][2]));}
}

在这里插入图片描述


2. 判定字符是否唯一

在这里插入图片描述
原题链接


题干:

确定一个字符串 s 的所有字符是否全都不同


算法原理:

1. 哈希表

时间复杂度为 O(n)
空间复杂度为 O(n)
直接创建一个大小为 26 的 hash 表就可以了

2. 位图思想

每⼀个「比特位」代表⼀个「字符」,⼀个 int 类型的变量的 32 位足够表示所有的小写字⺟
比特位里面如果是 0 ,表示这个字符没有出现过
比特位里面的值是 1 ,表示该字符出现过

优化点:
运用“鸽巢原理”
len > 26 说明一定有重复的字符


代码:

class Solution {public boolean isUnique(String astr) {if(astr.length() > 26) {return false;}int map = 0;for(int i = 0; i < astr.length(); i++) {int x = astr.charAt(i) - 'a';if(((map >> x) & 1) == 1) {return false;}map |= (1 << x);}return true;}
}

在这里插入图片描述


3. 丢失的数字

在这里插入图片描述
原题链接


题干:

包含 [0, n] 中 n 个数的数组 nums
找出 [0, n] 这个范围内没有出现在数组中的那个数


算法原理:

1. 哈希表

两次遍历
在这里插入图片描述

2. 高斯求和

在这里插入图片描述

3. 位运算(异或)

在这里插入图片描述


代码:

class Solution {public int missingNumber(int[] nums) {int ret = 0;for(int i = 0; i < nums.length; i++) {ret ^= nums[i];}for(int i = 0; i <= nums.length; i++) {ret ^= i;}return ret;}
}

在这里插入图片描述


4. 只出现一次的数字 II

在这里插入图片描述
原题链接


题干:

一个整数数组 nums
除某个元素仅出现 一次 外,其余每个元素都恰出现 三次
找出并返回那个只出现了一次的元素


算法原理:

在这里插入图片描述
每一个数的 比特位 可能出现四种情况
我们通过 ret 的每⼀个比特位上的值,就可以将 ret 给还原出来


代码:

class Solution {public int singleNumber(int[] nums) {int ret = 0;for(int i = 0; i < 32; i++) {int sum = 0;for(int x : nums) {//统计 sum 中所有的数的第 i 位的和if(((x >> i) & 1) == 1) {sum++;}}sum %= 3;if(sum == 1) {ret |= 1 << i;}}return ret;}
}

在这里插入图片描述


5. 消失的两个数字

在这里插入图片描述
原题链接


题干:

定一个数组,包含从 1 到 N 所有的整数,但其中缺了两个数字
任意顺序返回这两个数字


算法原理:(位运算)

在这里插入图片描述

  1. 将所有的数异或在一起,tmp
    tmp = a ^ b

  2. 找到 tmp 中,比特位上为 1 的那一位
    在这里插入图片描述

  3. 根据 x 为的不同,划分为两类异或


代码:

class Solution {public int[] missingTwo(int[] nums) {//1. 先把所有的数异或在一起int tmp = 0;for(int x : nums) {tmp ^= x;}for(int i = 1; i <= nums.length + 2; i++) {tmp ^= i;}//2. 找出 a, b 两个数比特位不同的哪一位int diff = 0;while(true) {if(((tmp >> diff) & 1) == 1) {break;}else {diff++;}}//3. 将所有的数按照 diff 位不同,分两类异或int[] ret = new int[2];for(int x : nums) {if(((x >> diff) & 1) == 1) {ret[1] ^= x;}else {ret[0] ^= x;}}for(int i = 1; i <= nums.length + 2; i++) {if(((i >> diff) & 1) == 1) {ret[1] ^= i;}else {ret[0] ^= i;}}return ret;}
}

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/305200.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java系列】多线程案例学习——基于阻塞队列实现生产者消费者模型

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【Java系列专栏】【JaveEE学习专栏】 本专栏旨在分享学习JavaEE的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录…

百度飞桨文心生态成果最新披露:开发者达1070万 模型数超86万

前言 12月28日&#xff0c;由深度学习技术及应用国家工程研究中心主办的WAVE SUMMIT深度学习开发者大会2023在北京召开。百度首席技术官、深度学习技术及应用国家工程研究中心主任王海峰现场公布了飞桨文心五载十届最新生态成果&#xff0c;文心一言最新用户规模破1亿&#xf…

基于Docker的软件环境部署脚本,持续更新~

使用时CtrlF搜索你想要的环境&#xff0c;如果没有你想要的环境&#xff0c;可以评论留言&#xff0c;会尽力补充。 本文提供的部署脚本默认参数仅适合开发测试&#xff0c;请根据实际情况调节参数。 数据库 MySQL version: 3.9 services:mysql:image: mysql:8.0.35container…

win32 WM_MENUSELECT消息学习

之前写了一些win32的程序&#xff0c;处理菜单单击都是处理WM_COMMAND消息&#xff0c;通过 LOWORD(wParam) 获取菜单ID&#xff0c;判断单击的是哪个菜单项&#xff1b; 还有一些其他菜单消息&#xff1b; 当在菜单项中移动光标或鼠标&#xff0c;程序会收到许多WM_MENUSELEC…

JavaScript练习题第(四)部分

大家好关于JavaScript基础知识点已经发布&#xff1a;需要的大家可以去我的主要查看 &#xff08;当然了有任何不会的&#xff0c;可以私信我&#xff01;&#xff01;&#xff01;&#xff01;&#xff09; 为了巩固大家学习知识点给大家准备几道练习题&#xff1a; 当然&…

基于ChatGpt,Java,SpringBoot,Vue,Milvus向量数据库的定制化聊天Web demo

customized chat GitHub - bigcyy/customized-chatgpt: 基于ChatGpt&#xff0c;Java&#xff0c;SpringBoot&#xff0c;Vue&#xff0c;Milvus向量数据库的定制化聊天Web demo 简介 基于ChatGpt&#xff0c;Java&#xff0c;SpringBoot&#xff0c;Vue&#xff0c;Milvus向…

Grafana Loki 配置解析

Grafana Loki 配置文件是一个YML文件&#xff0c;在Grafana Loki 快速尝鲜的示例中是loki-config.yaml&#xff0c;该文件包含关于Loki 服务和各个组件的配置信息。由于配置数量实在太多&#xff0c;没法全部翻译&#xff0c;只能后期有需要了再补充。 如下是Grafana Loki 快速…

网络攻防中应该掌握的进阶工具udp2raw,通过raw socket给UDP包加上TCP或ICMP header,进而绕过UDP屏蔽或QoS

网络攻防中应该掌握的进阶工具udp2raw,通过raw socket给UDP包加上TCP或ICMP header,进而绕过UDP屏蔽或QoS。 udp2raw tunnel,通过raw socket给UDP包加上TCP或ICMP header,进而绕过UDP屏蔽或QoS,或在UDP不稳定的环境下提升稳定性。可以有效防止在使用kcptun或者finalspeed的…

k8s 网络

还没有部署网络。 k8s的网络类型&#xff1a; k8s中的通信模式&#xff1a; 1&#xff0c;pod内部之间容器和容器之间的通信。 在同一个pod中的容器共享资源和网络&#xff0c;使用同一个网络命名空间。可以直接通信的。 2&#xff0c;同一个node节点之内不同pod之间的通信。…

SpringBoot+ShardingSphereJDBC实战(读写分离,分库分表,垂直拆分、水平拆分)附源码

参考&#xff1a;https://www.51cto.com/article/747736.html https://blog.csdn.net/qq_41581588/article/details/126966665 源码地址&#xff1a;gitgitee.com:jackXUYY/springboot-example.git 读写分离测试 我们启用后缀名为dev的配置文件&#xff0c;如下&#xff0c;…

vue3-富文本编辑器(vue-quill)

官网&#xff1a;VueQuill | Rich Text Editor Component for Vue 3 安装 pnpm add vueup/vue-quilllatest 使用 局部使用 先导包 import { QuillEditor } from vueup/vue-quill import vueup/vue-quill/dist/vue-quill.snow.css; 再使用 <QuillEditor theme"snow…

记录使用minikube部署web程序,并灰度发布不同版本

1. 安装软件 1.1安装docker desktop 下载地址 重点&#xff1a;配置镜像加速 1.2 安装k8s&minikube 这里参考阿里社区的配置 minikube1.24.0版本下载地址 重点&#xff1a;安装版本问题【因为后面要用阿里云的服务来获取所需Docker镜像&#xff0c;一直不成功使用的高版…