leetcode 3035

leetcode 3035

题目

在这里插入图片描述

例子

在这里插入图片描述

思路

统计字符出现的频次,5个a(字符可以成为回文)。
将所有字符放在一起考虑,因为字符是可以任意移动。[“aabb”,“a”] => [“abba”, “a”]
只要奇数个字符的种类,不要超过字符数组的size就可以。

代码实现

class Solution {
public:int maxPalindromesAfterOperations(vector<string>& words) {int ans =0;int total =0;int mask =0;for(auto & w:words){total += w.length();for(auto & ss: w){//确认字符是否是奇数,通过异或运算mask^=1<<(ss-'a');}}// __builtin_popcount函数统计二进制(mask)有多少个bit是1total -= __builtin_popcount(mask);sort(words.begin(), words.end(), [](string &a, string& b){ return a.length() < b.length();});for(auto & w:words){//已经减去奇数的部分了, 1/2 =0, 考虑到存在"a" 也是回文,需要对words进行排序total -= w.length()/2 *2;if(total < 0){break;}ans++;}return ans;}
};

分析

排序时间复杂度平均是0(nlogn)

__builtin_popcount

__builtin_popcount是GCC编译器提供的内建函数,用于计算一个整数中二进制表示中1的个数(即统计整数中1的个数)。

语法:

int __builtin_popcount(unsigned int x);

参数:

  • x:要计算的整数值。

返回值:

  • 返回整数x中二进制表示中1的个数。

示例:

#include <iostream>int main() {unsigned int x = 15; // 二进制表示为 1111int count = __builtin_popcount(x); // 计算x中1的个数std::cout << "Number of set bits in " << x << ": " << count << std::endl;return 0;
}

注意:

  • __builtin_popcount函数只能接受unsigned int类型的参数,如果传入其他类型的参数,可能会导致编译错误。
  • 该函数在GCC编译器中可用,可能不适用于其他编译器。

使用__builtin_popcount函数可以高效地计算一个整数中1的个数,特别适用于位操作相关的算法和问题。

遍历

在这两种循环语句中,for(string s : words)for(auto &s : words)的区别在于变量s的类型和是否是引用类型。

  1. for(string s : words)

    • 这种写法会创建words中每个元素的副本,并将副本赋值给变量s。这意味着在循环体内对s的修改不会影响到words中的元素。
    • 这种写法适用于遍历容器中的元素,如果只需要访问元素而不修改它们,这种写法是合适的。
  2. for(auto &s : words)

    • 这种写法使用auto关键字推导出words中元素的类型,并将s声明为对应类型的引用。这样s将直接引用words中的元素,而不是创建副本。
    • 使用引用类型可以提高效率,避免不必要的内存拷贝操作。
    • 如果需要在循环中修改words中的元素,或者希望在循环外部访问修改后的元素,使用引用类型是更好的选择。

综上所述,for(string s : words)会创建元素的副本,而for(auto &s : words)会直接引用。

统计整数x中二进制表示中1的个数

要统计一个整数 x 中二进制表示中 1 的个数,可以使用以下方法:

#include <iostream>int countSetBits(int x) {int count = 0;while (x) {count += x & 1;x >>= 1;}return count;
}int main() {int x = 25; // 二进制表示为 11001int numberOfOnes = countSetBits(x);std::cout << "Number of ones in binary representation of " << x << ": " << numberOfOnes << std::endl;return 0;
}

在上面的示例中,countSetBits 函数用于统计整数 x 中二进制表示中 1 的个数。该函数通过将 x 与 1 进行按位与操作,判断 x 的最低位是否为 1,然后将 x 右移一位,直到 x 变为 0。在每次循环中,如果 x 的最低位为 1,则 count 加一。最终返回 count 即为 x 二进制表示中 1 的个数。

main 函数中,我们给定一个整数 x 的值为 25(二进制表示为 11001),然后调用 countSetBits 函数统计其二进制表示中 1 的个数,并输出结果。

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

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

相关文章

IT部门领导的角色与责任:在挑战中塑造未来

前言 在当今快节奏的商业环境中&#xff0c;IT部门领导扮演着至关重要的角色。他们需要具备技术专长&#xff0c;同时也需要展现出卓越的领导力来有效地管理团队和应对各种挑战。 一、技术创新的引领者 1. 重要角色转变 随着信息技术的迅猛发展&#xff0c;IT部门领导已逐渐…

Android14 - Framework- Configuration的创建和更新

本文描述从启动一个新进程的Activity起&#xff0c;Framwork层Configuration的创建和传导过程。 首先&#xff0c;我们知道所有的Window容器都继承于WindowContainer&#xff0c;而WindowContainer本身是ConfigurationContainer的子类。于此同时&#xff0c;WindowProcessContr…

C语言经典例题(3) --- 汉诺塔问题、青蛙跳台阶问题

文章目录 1.汉诺塔问题2.青蛙跳台阶问题 1.汉诺塔问题 //汉诺塔问题&#xff08;递归实现&#xff09; //思路&#xff1a;1.将A中n-1个盘子放入B中&#xff0c;剩下最后一个&#xff08;第n个&#xff09;盘子放入C中。2.将B中n-1个盘子放入A中&#xff0c;剩下最后一个&…

3.21总结

D - Shufflem Up 在扑克桌上&#xff0c;扑克玩家常常会玩一种叫做“洗筹码”的游戏。洗筹码是通过将两堆扑克筹码 S1 和 S2 进行交错堆叠来完成的&#xff0c;每堆筹码包含 C 个筹码。每堆筹码可能包含多种不同颜色的筹码。 实际的洗牌操作是通过将 S1 中的一枚筹码与 S2 中的…

为什么高铁提前三分钟停止检票?

为什么高铁提前三分钟停止检票&#xff1f; 高铁&#xff0c;作为现代交通方式的代表&#xff0c;以其高速、便捷、舒适的特点受到了广大乘客的青睐。然而&#xff0c;在乘坐高铁的过程中&#xff0c;乘客们可能会遇到一个问题&#xff1a;为什么高铁会提前三分钟停止检票呢&a…

【LAMMPS学习】三、构建LAMMPS(6)在构建中包含软件包

3. 构建 LAMMPS 3.6.在构建中包含软件包 在 LAMMPS 中&#xff0c;包是一组启用一组特定功能的文件。例如&#xff0c;分子系统的力场或刚体约束都在封装中。在 src 目录中&#xff0c;每个包都是一个子目录&#xff0c;包名称为大写字母。 包文档页面上给出了包的概述。每…

jupyter notebook设置代码提示方法

在命令行运行以下代码&#xff1a; pip install jupyter_contrib_nbextensionsjupyter contrib nbextension install --userpip install jupyter_nbextensions_configuratorjupyter nbextensions_configurator enable --user &#xff08;有时安装第一行后会自动执行第二行&a…

python -u含义

python -u&#xff0c;Python运行选项 文章目录 python -u&#xff0c;Python运行选项python -u其他选项 python -u 在Python中&#xff0c;-u选项用于在输出中禁用缓冲。缓冲是一种将输出暂时存储在内存中&#xff0c;然后批量写入到文件或屏幕的技术。当Python程序的输出被重…

2024.3.18 JAVA编程的三层架构模式理解

2024.3.18 JAVA编程的三层架构模式理解 三层架构 controller&#xff1a;控制层&#xff0c;接收前端发送的请求。对请求进行处理&#xff0c;并响应数据。 service&#xff1a;业务逻辑层&#xff0c;处理具体的业务逻辑数据。 dao&#xff1a;数据访问层&#xff08;Data A…

【php基础】输出、变量、布尔类型、字符串

php基础补充 1. 输出2.和"的区别3.变量3.1变量的命名规则3.2 两个对象指向同一个值3.3 可变变量 4.变量的作用域5. 检测变量6. 布尔类型7.字符串定义与转义8.字符串常用函数9.常量 1. 输出 echo: 输出 print: 输出&#xff0c;输出成功返回1 print_r(): 输出数组 var_dum…

Vue 3中实现基于角色的权限认证实现思路

一、基于角色的权限认证主要步骤 在Vue 3中实现基于角色的权限认证通常涉及以下几个主要步骤&#xff1a; 定义角色和权限&#xff1a;首先需要在后端服务定义不同的角色和它们对应的权限。权限可以是对特定资源的访问权限&#xff0c;比如读取、写入、修改等。用户认证&#…

汽车价格的回归预测项目

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 问题描述 汽车价格预测是一个旨在预估二手车市场中汽车售价的问题。这个问题涉及到分析各种影响汽车价格的因素&#xff0c;如品牌、车龄、性能…

3.21Code

基于二叉链表的二叉树最大宽度的计算 #include<iostream>#define MAXSIZE 1000using namespace std;int k0; int m0; //记录层数 typedef struct BiNode{char data;struct BiNode *lchild;struct BiNode *rchild; }BiNode,*BiTree;void CreateBiTree(BiTree &T){cha…

为什么大家都在“挺”鸿蒙?

试想某一天&#xff0c;应用软件能够在手机、电视、手表甚至汽车等设备上&#xff0c;实现无缝流转、纵享丝滑。 这不仅是畅想&#xff0c;而是鸿蒙正在布局的“遥遥领先”。 随着HarmonyOS NEXT鸿蒙星河版面向开发者开放申请、鸿蒙原生应用版图的基本成型&#xff0c;这个国…

多聆听,少评判

当朋友来找你倾诉、吐槽、诉苦&#xff0c;或是表达情绪的时候&#xff0c;你是怎样回应的&#xff1f; 许多人总有这样的习惯&#xff1a;每当听到朋友的倾诉&#xff0c;或者在网上看到别人诉苦时&#xff0c;第一反应往往是提建议&#xff1a;为什么你不试试这样做呢&#x…

龙芯新世界系统(安同AOCS OS)桌面启动时baloo_file退出错误问题

这两天我在龙芯安同AOCS OS中安装了坚果云&#xff0c;坚果云已经可以正常开机启动并自动同步文件&#xff1b;但是出现了一个新的问题&#xff0c;在右下角的托盘位置每次启动都要出现一个错误信息图标&#xff0c;点击开看是一个关于baloo_file进程意外退出的错误信息&#x…

ISIS骨干网连续性简述

默认情况下&#xff0c; 一、L1路由器是ISIS 普通区域内部路由器&#xff0c;只能与L1和L1-2路由器建立邻接关系&#xff0c;不能与L2路由器建立邻接关系。 二、L2路由器是骨干区域的路由器&#xff0c;L2路由器只能与其他 L2路由器同处一个区域&#xff0c;可与本区域的L2路由…

java JVM内存区域和对象创建,内存布局,访问

Java 虚拟机自动内存管理&#xff0c;不需要像C/C为每一个 new 操作去写对应的 delete/free 操作&#xff0c;不容易出现内存泄漏和内存溢出。但把内存控制权交给 Java 虚拟机&#xff0c;一旦出现内存泄漏和溢出问题&#xff0c;如不了解虚拟机怎样使用内存&#xff0c;将很难…

读书笔记:《像火箭科学家一样思考》

要像火箭科学家那样思考&#xff0c;就得从不同的角度看待这个世界。要想象那些无法想象的事情&#xff0c;解决那些无法解决的问题。能在没有明确指导方针且时间紧迫的情况下&#xff0c;解决复杂和陌生的问题。 突破性思维完善创意&#xff0c;测试实验面对成功和失败 冲破…

软考89-上午题-【操作系统】-同步与互斥

一、进程间的通信 在多道程序环境的系统中存在多个可以并发执行的进程&#xff0c;故进程间必然存在资源共享&#xff08;互斥&#xff09;和相互合作&#xff08;同步&#xff09;的问题。进程通信是指各个进程交换信息的过程。 同步是合作进程间的直接制约问题&#xff0c;互…