leetcode每日一题28
创始人
2025-06-01 01:28:45
0

283. 移动零

第一反应是冒泡

class Solution {
public:void moveZeroes(vector& nums) {int size=nums.size();if(size==1)return ;for(int i=0;ifor(int j=0;jif(nums[j]==0&&nums[j+1]!=0){int temp = nums[j+1];nums[j+1]=nums[j];nums[j]=temp;}}}return ;}
};

很慢内
评论区大佬的思路:

一定要反过来想,不要只盯着0,可以设置一个指针,就是专业收集不是零的数 收集一遍后,后面的一定是0,就再将空出来的位置设置为0,就解决问题了

class Solution {
public:void moveZeroes(vector& nums) {int size=nums.size();if(size==1)return ;int s=0;//收集不为0的数组下标for(int i=0;iif(nums[i]!=0)nums[s++]=nums[i];}for(int i=s;inums[i]=0;}return ;}
};

题解中的方法是
双指针法
左指针指向已处理的数列的尾部
右指针指向未处理数列的头部
左指针为0时,左右指针指向的数字交换

class Solution {
public:void moveZeroes(vector& nums) {int n = nums.size(), left = 0, right = 0;while (right < n) {if (nums[right]) {swap(nums[left], nums[right]);left++;}right++;}}
};

290. 单词规律

没什么思路
大佬的做法是双哈希法

1 个 map 记录模式与字符串的匹配关系,另外一个 map 记录字符串和模式的匹配关系。为什么需要记录双向的关系呢?因为 Example 4 中,a 对应了 dog,这个时候 b 如果再对应 dog 是错误的,所以这里需要从 dog查询它是否已经和某个模式匹配过了。所以需要双向的关系。

c++中没有split()函数,没法很简洁地分开一句里的单词,所以实现一下

istringstream strs(str);
vector words;
string word;
while(strs>>word){words.push_back(word);
}

整体代码如下

class Solution {
public://题解:双哈希bool wordPattern(string pattern, string str) {//C++ splitistringstream strs(str);vector words;string word;while(strs>>word){words.push_back(word);}if(pattern.size()!=words.size())return false;map m1;//建立 <字符,单词> 的映射map m2;//建立 <单词,字符> 的映射for(int i=0;i//若pat的字符在m1中,但该字符对应的单词与word不相等,返回false a->dog a->fishif(m1.count(pattern[i])&&m1[pattern[i]]!=words[i])return false;//若单词在m2中,单该单词对应的字符用pat[i]不相等,返回false,a->dog b->dogif(m2.count(words[i])&&m2[words[i]]!=pattern[i])return false;//都不在,则建立映射m1[pattern[i]]=words[i];m2[words[i]]=pattern[i];}return true;}
};

292. Nim 游戏

不会捏
数学推理
如果石头堆中只有一块、两块、或是三块石头,那么在你的回合,你就可以把全部石子拿走,从而在游戏中取胜;如果堆中恰好有四块石头,你就会失败。因为在这种情况下不管你取走多少石头,总会为你的对手留下几块,他可以将剩余的石头全部取完,从而他可以在游戏中打败你。因此,要想获胜,在你的回合中,必须避免石头堆中的石子数为 4 的情况
我们继续推理,假设当前堆里只剩下五块、六块、或是七块石头,你可以控制自己拿取的石头数,总是恰好给你的对手留下四块石头,使他输掉这场比赛。但是如果石头堆里有八块石头,你就不可避免地会输掉,因为不管你从一堆石头中挑出一块、两块还是三块,你的对手都可以选择三块、两块或一块,以确保在再一次轮到你的时候,你会面对四块石头。显然我们继续推理,可以看到它会以相同的模式不断重复 n=4,8,12,16,…,基本可以看出如果堆里的石头数目为 4 的倍数时,你一定会输掉游戏
如果总的石头数目为 4 的倍数时,因为无论你取多少石头,对方总有对应的取法,让剩余的石头的数目继续为 4 的倍数。对于你或者你的对手取石头时,显然最优的选择是当前己方取完石头后,让剩余的石头的数目为 4 的倍数。假设当前的石头数目为 x,如果 x 为 4 的倍数时,则此时你必然会输掉游戏;如果 x 不为 4 的倍数时,则此时你只需要取走 x mod 4 个石头时,则剩余的石头数目必然为 4 的倍数,从而对手会输掉游戏

class Solution {
public:bool canWinNim(int n) {return n % 4 != 0;}
};

相关内容

热门资讯

安卓系统应用数据目录,揭秘系统... 你有没有想过,你的安卓手机里那些应用,它们的数据都藏在哪个角落呢?今天,就让我带你一探究竟,揭开安卓...
kindle 安卓 系统 刷机... 亲爱的读者们,你是不是也和我一样,对电子阅读设备情有独钟?尤其是那款小巧便携的Kindle,简直是阅...
平板 win 安卓 双系统,... 你有没有想过,拥有一台既能运行Windows系统,又能流畅使用安卓应用的多功能平板电脑,是不是能让你...
电脑安卓和苹果系统,电脑操作系... 你有没有发现,现在无论是工作还是娱乐,电脑已经成了我们生活中不可或缺的好伙伴呢!而在这众多电脑中,安...
手机安卓系统下载5.0,引领智... 你有没有发现,最近手机界又掀起了一股热潮?没错,就是安卓系统5.0的下载。这可是安卓家族里的一大亮点...
小森生活系统安卓,打造绿色生态... 你知道吗?最近在手机应用市场上,有个叫做“小森生活系统安卓”的新玩意儿火得一塌糊涂。它就像一个神奇的...
王者荣耀安卓系统更换,畅享全新... 最近是不是发现你的王者荣耀游戏体验有点不对劲?别急,让我来给你揭秘一下安卓系统更换背后的那些事儿!一...
ios系统数据如何导入安卓系统... 你是不是也有过这样的经历:手机里存满了珍贵的照片、视频和联系人,突然有一天,你决定换一台安卓手机,却...
王者荣耀启动安卓系统,畅享指尖... 你知道吗?最近王者荣耀可是大动作连连,竟然宣布要启动安卓系统了!这消息一出,瞬间在游戏圈引起了不小的...
安卓始终显示系统栏,安卓系统栏... 你是不是也遇到了这个问题?手机屏幕上那个讨厌的系统栏,有时候它就像一个顽皮的小鬼,总是赖在你的屏幕上...
苹果系统可以装在安卓,探索跨平... 你知道吗?最近在科技圈里可是掀起了一股热潮呢!那就是——苹果系统竟然可以装在安卓设备上!是不是听起来...
安卓系统双清目的,安卓系统双清... 你知道吗?最近在安卓系统圈子里,有个话题可是热得不得了,那就是“双清”。别小看这个“双清”,它可是关...
安卓系统台电平板,畅享智能生活... 你有没有发现,最近身边的朋友都开始讨论起一款叫做台电的安卓系统平板电脑呢?这可不是随便说说,这款平板...
三菱安卓系统,智能科技与驾驶体... 亲爱的读者,你是否曾好奇过,那些在我们生活中默默无闻的汽车品牌,它们是如何将科技与驾驶体验完美结合的...
安卓系统为什么好,引领智能生活... 你有没有发现,身边的朋友、同事,甚至家人,几乎人手一台安卓手机?这可不是偶然现象哦!安卓系统,这个来...
安卓如何改键盘系统,Andro... 你是不是也和我一样,对安卓手机的键盘系统有点儿不满意?想要换一个更顺手的键盘,但又不知道怎么操作?别...
怎么升级安卓14系统,解锁安卓... 你有没有发现,你的安卓手机最近是不是有点儿慢吞吞的?别急,别急,升级到安卓14系统,让你的手机焕发新...
安卓手机如何系统内录,轻松生成... 你有没有想过,有时候想要记录下手机里的精彩瞬间,却发现没有合适的工具?别急,今天就来教你怎么在安卓手...
最绚丽的安卓系统,最绚丽版本全... 哇,你知道吗?在安卓的世界里,有一款系统,它就像是一颗璀璨的明珠,闪耀着最绚丽的色彩。它就是——最绚...
小米系统安卓通知权限,深度解析... 亲爱的手机控们,你是否曾为手机通知栏里乱糟糟的信息而烦恼?又或者,你是否好奇过,为什么有些应用总是能...