美发营销型网站,做外贸如何建立网站平台,简单的ppt模板免费下载,网站建设+临沂LeetCode day30 害#xff0c;昨天和今天在搞数据结构的报告#xff0c;后面应该也会把哈夫曼的大作业写上来。 今天认识认识贪心算法。(#xff61;#xff65;∀#xff65;)#xff89; 2697. 字典序最小回文串
给你一个由 小写英文字母 组成的字符串 s #xff0c;…LeetCode day30 害昨天和今天在搞数据结构的报告后面应该也会把哈夫曼的大作业写上来。 今天认识认识贪心算法。(∀) 2697. 字典序最小回文串
给你一个由 小写英文字母 组成的字符串 s 你可以对其执行一些操作。在一步操作中你可以用其他小写英文字母 替换 s 中的一个字符。
请你执行 尽可能少的操作 使 s 变成一个 回文串 。如果执行 最少 操作次数的方案不止一种则只需选取 字典序最小 的方案。
对于两个长度相同的字符串 a 和 b 在 a 和 b 出现不同的第一个位置如果该位置上 a 中对应字母比 b 中对应字母在字母表中出现顺序更早则认为 a 的字典序比 b 的字典序要小。
返回最终的回文字符串。
示例 1
输入s egcfe
输出efcfe
解释将 egcfe 变成回文字符串的最小操作次数为 1 修改 1 次得到的字典序最小回文字符串是 efcfe只需将 g 改为 f 。示例 2
输入s abcd
输出abba
解释将 abcd 变成回文字符串的最小操作次数为 2 修改 2 次得到的字典序最小回文字符串是 abba 。示例 3
输入s seven
输出neven
解释将 seven 变成回文字符串的最小操作次数为 1 修改 1 次得到的字典序最小回文字符串是 neven 。class Solution {public String makeSmallestPalindrome(String s) {int lens.length();int ans0;StringBuffer tempnew StringBuffer();String curr new StringBuffer(s).reverse().toString();for(int i0;ilen;i){if(curr.charAt(i)!s.charAt(i)){if(curr.charAt(i)s.charAt(i)){temp.append(s.charAt(i));continue;}else{temp.append(curr.charAt(i));continue;}}temp.append(curr.charAt(i));}return String.valueOf(temp);}}class Solution {
public:string makeSmallestPalindrome(string s) {string currs;reverse(s.begin(),s.end());for(int i0;icurr.length();i){if(curr[i]s[i]){curr[i]s[i];}}return curr;}
};先直接暴力做了还有就是我以为c会快结果慢了一倍
class Solution {public String makeSmallestPalindrome(String s) {char[]temps.toCharArray();int lentemp.length;int l0,rlen-1;while(lr){char min(char)Math.min(temp[l],temp[r]);temp[l]temp[r--]min;}return String.valueOf(temp);}
}额。我当时诟病Java应该比c慢就是因为String比较用charAt但是做了还交换不了就跑去cpp了结果都忘了转化数组了 455. 分发饼干
假设你是一位很棒的家长想要给你的孩子们一些小饼干。但是每个孩子最多只能给一块饼干。
对每个孩子 i都有一个胃口值 g[i]这是能让孩子们满足胃口的饼干的最小尺寸并且每块饼干 j都有一个尺寸 s[j] 。如果 s[j] g[i]我们可以将这个饼干 j 分配给孩子 i 这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子并输出这个最大数值。
示例 1:
输入: g [1,2,3], s [1,1]
输出: 1
解释:
你有三个孩子和两块小饼干3个孩子的胃口值分别是1,2,3。
虽然你有两块小饼干由于他们的尺寸都是1你只能让胃口值是1的孩子满足。
所以你应该输出1。示例 2:
输入: g [1,2], s [1,2,3]
输出: 2
解释:
你有两个孩子和三块小饼干2个孩子的胃口值分别是1,2。
你拥有的饼干数量和尺寸都足以让所有孩子满足。
所以你应该输出2.能喂饱一个是一个吐舌~
class Solution {public int findContentChildren(int[] g, int[] s) {if(s.length0){return 0;}Arrays.sort(g);Arrays.sort(s);int len1g.length;int len2s.length;int j0;int ans0;for(int i0;ilen1;i){if(jlen2){return ans;}while(jlen2){if(g[i]s[j]){ans;break;} }}return ans;}
}561. 数组拆分
给定长度为 2n 的整数数组 nums 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) 使得从 1 到 n 的 min(ai, bi) 总和最大。
返回该 最大总和 。
示例 1
输入nums [1,4,3,2]
输出4
解释所有可能的分法忽略元素顺序为
1. (1, 4), (2, 3) - min(1, 4) min(2, 3) 1 2 3
2. (1, 3), (2, 4) - min(1, 3) min(2, 4) 1 2 3
3. (1, 2), (3, 4) - min(1, 2) min(3, 4) 1 3 4
所以最大总和为 4示例 2
输入nums [6,2,6,5,1,2]
输出9
解释最优的分法为 (2, 1), (2, 5), (6, 6). min(2, 1) min(2, 5) min(6, 6) 1 2 6 9那自然是贪心起来大数只能跟大数匹配不然浪费可不能下等马和上等马pk
class Solution {public int arrayPairSum(int[] nums) {Arrays.sort(nums);int sum0;for(int i0;inums.length;i2){sumnums[i];}return sum;}
}605. 种花问题
假设有一个很长的花坛一部分地块种植了花另一部分却没有。可是花不能种植在相邻的地块上它们会争夺水源两者都会死去。
给你一个整数数组 flowerbed 表示花坛由若干 0 和 1 组成其中 0 表示没种植花1 表示种植了花。另有一个数 n 能否在不打破种植规则的情况下种入 n 朵花能则返回 true 不能则返回 false 。
示例 1
输入flowerbed [1,0,0,0,1], n 1
输出true示例 2
输入flowerbed [1,0,0,0,1], n 2
输出false解答错误
120 / 129 个通过的测试用例
官方题解
输入
flowerbed
[0,1,0]
n
1添加到测试用例
输出
true
预期结果
false那有特么这样的啊我给你费力想怎么种更多你倒好直接捣乱
class Solution {public boolean canPlaceFlowers(int[] flowerbed, int n) {if(n0){return true;}if(flowerbed.length3){int temp0;for(int x:flowerbed){tempx;}if(temp1){return false;}return n1;}int count0;for(int i1;iflowerbed.length-1;i){if(flowerbed[0]0flowerbed[1]0){flowerbed[0]1;count;}if(flowerbed[flowerbed.length-1]0flowerbed[flowerbed.length-2]0){flowerbed[flowerbed.length-1]1;count;}if(flowerbed[i-1]0flowerbed[i1]0flowerbed[i]!1){flowerbed[i]1;count;}}return ncount;
}}日内瓦面向测试案例编程我真的吐了啊这玩意.
class Solution {public boolean canPlaceFlowers(int[] flowerbed, int n) {int lenflowerbed.length;int[]currnew int[len2];curr[0]0;curr[len1]0;System.arraycopy(flowerbed, 0, curr, 1, len);int ans0;for(int i1;icurr.length-1;i){if(curr[i]0curr[i-1]0curr[i1]0){i;ans;}}return nans;}
} 害瞄了瞄评论区看到一眼C大佬的防御式编程茅塞顿开对啊这不跟哨兵异曲同工之妙嘛。