11.哀家要长脑子了!

2024-04-16 00:44
文章标签 要长 脑子 哀家

本文主要是介绍11.哀家要长脑子了!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1.453. 最小操作次数使数组元素相等 - 力扣(LeetCode)

2.665. 非递减数列 - 力扣(LeetCode) 

3. 283. 移动零 - 力扣(LeetCode)

4. 3114. 替换字符可以得到的最晚时间 - 力扣(LeetCode)

5. 3115. 素数的最大距离 - 力扣(LeetCode)


1. 453. 最小操作次数使数组元素相等 - 力扣(LeetCode)

 

小姐姐 你这道题做过你还不知道做啊啊啊啊

首先可以这么想,这道题的本质就是让数组的高度差为0

每次操作将会使 n-1 个元素增加 1,换句话来说,每次操作可以让 1 个元素减 1;

那么我们就使得所有元素都变成最小值就可以使元素相等了

class Solution {
public:int minMoves(vector<int>& nums) {int res = 0;int min = *min_element(nums.begin(), nums.end());for(int i = 0; i < nums.size(); i++){res += nums[i] - min;// 每次都是只能减1 顺便就当计数器了}return res;}
};
2.665. 非递减数列 - 力扣(LeetCode) 

私密马赛,瓦达西菜菜酱没一点思路。。

非递减序列有a,b,c三种形式

需要改变的形式可能会有三种;

对于第①种和第②种我们可以选择对第 i-1 个元素操作或者是第 i 个元素:

把第i个元素变成跟第 i-1 个元素一样大或者把第 i-1 个元素变成跟第 i 个元素一样大。

但是我们选择对第 i-1 个元素操作,因为我们还没有遍历到后面,如果把第 i 个元素改变改成比后面大怎么办

对于第③种情况我们显而易见只能对第i个元素操作

class Solution {
public:bool checkPossibility(vector<int>& nums) {int flag = 0;for(int i = 1; i < nums.size(); i++){if(nums[i] < nums[i-1]){if(i == 1 || nums[i] >= nums[i-2]){nums[i-1] = nums[i];}else{nums[i] = nums[i-1];}flag++;}}// 最后成为非递减序列看操作次数if(flag <= 1)return true;return false;}
};
3. 283. 移动零 - 力扣(LeetCode)

这个神似我昨天做的那道题,我弯弯绕绕最后还是做出来了,还是没有真正掌握感觉

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

 在题解区里面看到一些不一样的做法,撒个尿,标记一下,写一写

4. 3114. 替换字符可以得到的最晚时间 - 力扣(LeetCode)

第一次参加周赛,第一个做出来的题目,也只有这一个哈哈哈哈哈哈哈哈哈哈 小姐姐你。。

先看一下我周赛屎一样的答案

class Solution {
public:string findLatestTime(string s) {int i = 0, j = 0;while(s[0] == '?' || s[1] == '?'){if(s[0] == '?' && s[1] == '?' ){s[0] = '1';}if(s[0] == '?' && s[1] == '1' || s[1] == '0'){s[0] = '1';}    if(s[0] == '?' && s[1] != '?' && s[1] != '1'){s[0] = '0';}if(s[0] == '0' && s[1] == '?'){s[1] = '9';}if(s[0] == '1' && s[1] == '?'){s[1] = '1';}}while(s[3] == '?' || s[4] == '?'){if(s[3] == '?'){s[3] = '5';}if(s[3] != '?' && s[4] == '?'){s[4] = '9';}}return s;}
};

真的不知道在干吗。。。

就是太急了 然后思路又不清晰 感觉平时有点依赖题解了,到现在简单中等问题应该自己想一想了

看看灵神的直接判断

其实挺简单的我不知道为什么我当时扯7扯8

对于小时:(00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11)

第一个字符不是0就是1;这要看后面第二个字符的影响。如果第二个字符是?那第一个字符就直接取最大的啊——1;如果第二个字符是比1小的那第一个字符就选1,如果第二个字符是比1大的(2,3,4,5,6,7,8,9)就只能选0,因为最大的是11

第二个字符:当第一个字符是0的时候第二个字符最大可以取9;第一个字符是1 的时候最大只能取1了咯

对于分钟:那就简单了

class Solution {
public:string findLatestTime(string s) {if (s[0] == '?') {s[0] = s[1] == '?' || s[1] <= '1' ? '1' : '0';}if (s[1] == '?') {s[1] = s[0] == '1' ? '1' : '9';}if (s[3] == '?') {s[3] = '5';}if (s[4] == '?') {s[4] = '9';}return s;}
};

我知道了,我自己写的时候就是不清楚代码,程序是顺序结构运行的啊,已经先处理了第一个字符,在处理第二个字符时,还要去讨论第一个字符是?的情况

这种短代码写起来好高级的感觉,可是我现在还是if-else...

class Solution {
public:string findLatestTime(string s) {if(s[0] == '?' ){if(s[1] == '?'){s[0] = '1';}else if(s[1] <= '1'){s[0] = '1';}else{s[0] = '0';}}if(s[1] == '?'){if(s[0] == '1'){s[1] = '1';}else{s[1] = '9';}}    if(s[3] == '?'){s[3] = '5';}if(s[4] == '?'){s[4] = '9';}return s;}
};

下面这个方法暴力枚举

class Solution {
public:string findLatestTime(string s) {for (int h = 11; ; h--) {if (s[0] != '?' && s[0] - '0' != h / 10 || s[1] != '?' && s[1] - '0' != h % 10) {continue;}for (int m = 59; m >= 0; m--) {if (s[3] != '?' && s[3] - '0' != m / 10 || s[4] != '?' && s[4] - '0' != m % 10) {continue;}char ans[6];sprintf(ans, "%02d:%02d", h, m);return string(ans);}}}
};

我天呢 搞半天没搞懂 明白了之后感觉好神奇(对不起,我真的很菜)但是我不知道怎么说

首先就是直接从最大的时间开始循环,,,感觉是一个能不能的问题

5. 3115. 素数的最大距离 - 力扣(LeetCode)

不是小姐姐这个也不难啊 你是为什么做不出。。。

因为我还以为要记录下标然后去找最大的TAT,天爷啊,你脑子转个弯呢!!你直接从左边找从右边找不就好!!这不就是两个距离最大的素数!!

class Solution {bool prime(int n){// 别写成 i < sqrt(n) 是不对滴for(int i = 2; i * i <= n; i++){if(n % i == 0){return false;}}return n >= 2;}
public:int maximumPrimeDifference(vector<int>& nums) {int i, j;for(i = 0; i < nums.size(); i++){if(prime(nums[i]))break;}for(j = nums.size() - 1; j >= 0; j--){if(prime(nums[j]))break;}return j-i;}
};

这篇关于11.哀家要长脑子了!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/907371

相关文章

redis 实现单位时间内错误记录 时间到key值就被清除------最近脑子不好使觉得还是写个博客试试

直接在客户端操作的, 所以需要redis的简单命令  去对比JAVA客户端jedis的命令就行   添加---set     格式 set  key  value  EX time(秒)   如果这个time不添加的话 ,那默认就是 永久 获取--get    格式 get key  ---查看剩余时间    格式 TTL key ---实现key实现自增: inrc key

31.哀家要长脑子了!

不行啊 这个不能停啊 1.451. 根据字符出现频率排序 - 力扣(LeetCode) 哎哟,每次朦朦胧胧似懂非懂的,一看到感觉就是用无序map,但是让我上手我又不知道怎么写了,烦死了! 说一下:用一个unordered_map统计每个字符出现的次数,因为它是unordered的,所以它是不支持按key或者按value排序的,把它再放进一个数组可以用sort函数按字符的出现次数排序呀,最

25.哀家要长脑子了---哈希表

1.525. 连续数组 - 力扣(LeetCode) 在我对通义千问的一番折磨下,终于弄清楚一点点了。哈希表存储前缀和数组值 用一个counter来记录nums中0、1数量差值的变化。 哈希表map存储某个特定的counter值首次出现的位置。counter的计算:出现1就加1,出现0就减1。第二次出现同样的counter值意味着从第一次出现的counter位置到第二次出现的counter

24.哀家要长脑子了!

目录 1.594. 最长和谐子序列 - 力扣(LeetCode) 2.350. 两个数组的交集 II - 力扣(LeetCode) 3.554. 砖墙 - 力扣(LeetCode)  4.9. 回文数 - 力扣(LeetCode)  5.13. 罗马数字转整数 - 力扣(LeetCode) 6.58. 最后一个单词的长度 - 力扣(LeetCode) 1.594. 最长和谐子序列

21.哀家要长脑子了!

1.21. 合并两个有序链表 - 力扣(LeetCode)  我做过啊,为什么还是不能独立做出来,为什么为什么啊啊啊 嘻嘻奔向五一 是这样的: 要按升序连接,以链表2头结点作为开端,哪个小就先连接哪个,然后把此时操作的链表的指针往后移,同时遍历新链表的指针也要往后移 class Solution {public:ListNode* mergeTwoLists(ListNode*

18.哀家要长脑子了!

1.242. 有效的字母异位词 - 力扣(LeetCode) 用一个flag数组,s出现的 加! t出现的 减! 这样s和t中每个字符出现的次数相同的话,就会加多少减多少,flag数组的元素值都会是0 class Solution {public:bool isAnagram(string s, string t) {int flag[26] = {0};for(int i = 0; i

16.哀家要长脑子了!

目录 1. 707. 设计链表 - 力扣(LeetCode) 2.203. 移除链表元素 - 力扣(LeetCode) 3.206. 反转链表 - 力扣(LeetCode) 4.237. 删除链表中的节点 - 力扣(LeetCode) 5. 19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode) 1. 707. 设计链表 - 力扣(LeetCode) 这我都懂,但

10.哀家要长脑子了!

1. 704. 二分查找 - 力扣(LeetCode) 哎哟 我去 我还以为你都搞懂了 呵呵 当时问题出现在右边界初始化 左闭右开 右边界是取不到的 int left = 0, right = nums.size() ; while(left < right) {         int mid = left + (right - left) / 2;         if( tar

力扣hot100:240.搜索二维矩阵II(脑子)

吉大21级算法分析与设计的一道大题,由于每一行都是排好序的直接逐行二分 可以达到:O(mlogn)。但是这里追求更广的思路可以使用其他方法。 矩阵四分: 在矩阵中用中心点比较,如果target大于中心点的值,则由于升序排列,以中心点为右下角的小矩阵就不用再查找了,因为他们一定比target小。剩下三个矩形都可能比中心点大,因此在剩下三个矩阵中继续查找;如果target小于中心点,以

问题解决:Confluence “该文件的加载时间比平时要长”

文章目录 背景解决方案: 背景 在安装完成 Confluence 之后,一进入到编辑页面,右上角就报错提示信息: “该文件的加载时间比平时要长。请稍等片刻,然后尝试刷新。问题依然存在?请联系 Confluence 管理员” 解决方案: 修改confluence的/opt/atlassian/confluence/conf/server.xml 文件。修改内容如下: