LeetCode Daily 4

2022-1-2 T390.消除游戏

  该死的数学归纳?

 

题目描述:

列表 arr 由在范围 [1, n] 中的所有整数组成,并按严格递增排序。请你对 arr 应用下述算法:  从左到右,删除第一个数字,然后每隔一个数字删除一个,直到到达列表末尾。 重复上面的步骤,但这次是从右到左。也就是,删除最右侧的数字,然后剩下的数字每隔一个删除一个。 不断重复这两步,从左到右和从右到左交替进行,直到只剩下一个数字。 给你整数 n ,返回 arr 最后剩下的数字。

 

示例:

输入:n = 9 输出:6 解释:arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]    arr = [2, 4, 6, 8]    arr = [2, 6]    arr = [6]

 

思路:

https://blog.csdn.net/afei__/article/details/83689502

 

代码:

class Solution { public:     int lastRemaining(int n) {         if(n == 1) return 1;         return 2 * (n / 2 + 1 - lastRemaining(n / 2));     } };

 

推荐这些文章:

LeetCode:两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。

class Solution {
public int[] twoSum(int[] arr, int target) {
Map<Integer,Integer> map=new HashMap<>(); //key:数 value:位置(索引)
for (int ...

【LeetCode】442.数组中重复的数据

283.移动零

知识点:数组;原地哈希

题目描述
给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数,并以数组形式返回。
你必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间的算法解决此问题。##### 示例
输入:nums = [4,3,2,7,8,2,3,1]
输出:[2,3]

输入:nums = [1,1,2]
输出:[1]

输入:nums = [1]
输出:[]

解法一:原地哈希
涉及到这种重复的,其实第一时间应该想到hashset,就遍历一遍,然后...

LeetCode第 277 场周赛

A
class Solution {
public:
int countElements(vector<int>& nums) {
int minn = 0x3f3f3f3f, maxx = 0xcfcfcfcf;
for (auto x : nums)
minn = min(minn, x), maxx = max(maxx, x);
int cnt = 0;
for (auto x : nums)
if (x > minn &&...

LeetCode 1. 两数之和

1. 两数之和
Solution
思路1:直接双重for循环,枚举每个数字,找到后返回结果
class Solution {
public int[] twoSum(int[] nums, int target) {
int len = nums.length;
for (int i = 0; i < len; i++) {
for (int j = i + 1; j < len; j++) {
if (nums[i] + nums[j] == target) {
...

【LeetCode】137. 只出现一次的数字 II

class Solution {
public:
int singleNumber(vector<int>& nums) {
int ans = 0;
int total = 0;
for(int i = 0; i<32 ; ++i)
{
total = 0;
for(int j=0; j<nums.size(); ++j)
{
total+=(nums[j]>>i)&am...

LeetCode 每日一题 (盛最多水的容器)

 

// S = min(a, b) * (j - i) // j-i一直变小! a,b里面 移动大的一边, min(a, b)可能变小或不变! 移动小的一边, min(a, b)可能变小或变大! // 所以只需要 一直移动小的一边!
class Solution {
public:
int maxArea(vector<int>& height) {
int area = 0;
if (height.size() == 0){
return area;
}

...

【LeetCode】402.移掉k位数字

402.移掉k位数字

知识点:数组;栈;

题目描述
给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。
示例
输入:num = "1432219", k = 3
输出:"1219"
解释:移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219 。

输入:num = "10200", k = 1
输出:"200"
解释:移掉首位的 1 剩下的数字为 200. 注意输出不能有任何前导零。

输入:num = "10", k = 2
输出:"0"
解释:从原数字移除所有的数字,剩余为空就...

LeetCode-1047. 删除字符串中的所有相邻重复项

题目来源
1047. 删除字符串中的所有相邻重复项
题目详情
给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
示例:
输入: "abbaca"
输出: "ca"
解释:
例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。
提示:

1 <= S.len...

【LeetCode】219.存在重复元素II

219.存在重复元素II

知识点:数组;双指针;

题目描述
给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。
示例
输入:nums = [1,2,3,1], k = 3
输出:true

输入:nums = [1,0,1,1], k = 1
输出:true

输入:nums = [1,2,3,1,2,3], k = 2
输出:false

解法一:哈希表
class Solution:
de...

LeetCode 1332. 删除回文子序列

1332. 删除回文子序列
Solution
思路:
回文子序列 所以最多两次,如果一开始就是回文串的话 就是一次。
class Solution {
public int removePalindromeSub(String s) {
int i =0, j = s.length() - 1;
while (i < j) {
if (s.charAt(i) == s.charAt(j)) {
i++; j--;
} else {
re...

文章标题:LeetCode Daily 4
文章链接:https://www.dianjilingqu.com/3212.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。
THE END
< <上一篇
下一篇>>