首页 > 其他分享 >20240409每日一题题解

20240409每日一题题解

时间:2024-04-09 22:24:17浏览次数:12  
标签:end val nums int 题解 每日 20240409 引用 数组

20240409每日一题题解

Problem

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

Solution

这道题又是道Python特化题。是考察Python中的list这种容器的。既然我要写的是c++的题解,那么我就和大家聊点c++的东西吧。

引用

我们前不久学习了引用的用法。引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。

引用与指针的区别

引用很容易与指针混淆,它们之间有三个主要的不同:

  • 不存在空引用。引用必须连接到一块合法的内存。
  • 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
  • 引用必须在创建时被初始化。指针可以在任何时间被初始化。

引用的使用方法

创建引用

int i=521;
//下面声明一个“引用变量”
int& JiaMuGe_Birthday=i;

在这里,&符号读作引用。此时此刻,变量JiaMuGe_Birthdayi是完全等效的。修改其中的任何一个的值,输出另一个变量,会发现结果也变了(因为他们本来就是同一个东西了嘛)

数组模拟

没啥好写了。我们试着用数组来模拟这道题吧。

一共只有两个步骤:

  • 从前往后扫描数组
  • 如果遇到了和val相等的数据,则将其删除(把后面的数据向前挪一格)

由于数组没有删除某个元素这种说法,所以我们就用把后面的数据向前挪一格模拟删除这个操作吧。

#include<iostream>
using namespace std;
int a[1000];
int n,val;
int main()
{
	cin>>n>>val;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	
	//Solution Start
	
	int i=1;
	while(i<=n)
	{
		if(a[i]==val)
		{
			// 如果当前元素等于val,将后面的元素都向前移动一位
			for(int j = i; j < n - 1; j++)
			{
				a[j] = a[j + 1];
			}
			n--; // 数组长度减1
			// 注意这里不需要i++,因为我们移动了元素后,需要在新位置重新检查当前i指向的元素
		}
		else
		{
			// 如果当前元素不等于val,继续检查下一个元素
			i++;
		}
	}
	
	//Solution Finish
	
	cout<<n<<endl;
	for(int i=1;i<=n;i++)
	{
		cout<<a[i]<<" ";
	}
	
	
	return 0;
}

vector实现

c++中的数组并不对标python中的list。如果您也想要在c++中尝试到如list一般的功能多样但更加高效的工具,不妨试试vector

#include<iostream>
#include<vector>
#include<algorithm> // 用于std::remove
using namespace std;
int n,val;
int main()
{
	cin>>n>>val;
	vector<int>nums(n);
	for(int i=0;i<n;i++)
	{
		cin>>nums[i];
	}
	
	//Solution Start
	
	// 使用remove将所有不等于val的元素移到vector的开始位置
	auto new_end = remove(nums.begin(), nums.end(), val);
	
	// 使用erase删除从new_end到nums.end()的所有元素
	nums.erase(new_end, nums.end());
	
	// 更新n为新的长度
	n = nums.size();
	
	//Solution Finish
	
	cout<<n<<endl;
	for(int i=0;i<n;i++)
	{
		cout<<nums[i]<<" ";
	}
	
	
	return 0;
}

标签:end,val,nums,int,题解,每日,20240409,引用,数组
From: https://www.cnblogs.com/Vanilla-chan/p/18124987

相关文章

  • [20240409]为什么一条sql语句在实例2执行要慢的分析.txt
    [20240409]为什么一条sql语句在实例2执行要慢的分析.txt--//生产系统遇到一个奇怪现象,一条sql语句在实例2要比实例1慢很多,展开分析看看.1.环境:[email protected]:9014/ywdb>@ver1PORT_STRING                   VERSION       BANNER---------------......
  • 问题解决 usr/include/c++/11/bits/list.tcc:344:24: error: no match for ‘operator
    1.问题解决usr/include/c++/11/bits/list.tcc:344:24:error:nomatchfor‘operator==’错误解释:这个编译错误表明编译器在尝试使用==操作符比较两个对象时找不到匹配的操作符函数。在C++中,如果你尝试比较两个自定义类型的对象,且没有为这些对象定义==操作符,编译器将无法进......
  • 每日收获0409
    今天领导给了一个任务,让给程序加一个快测(原来就有,所以应该叫新功能)浏览了一遍代码后,发现只有一个轻触按键,短按开机和调档位,长按2s关机,增加新快测,考虑与长按2s关机一致,增加上电检测:首次上电时,初始化一个变量并赋初值(按需给予),之后每次循环时自减,直到0不再变化;照猫画虎,显示里有上电......
  • 【题解 | 二叉树】给定二叉树的后序遍历和中序遍历,求层序遍历结果
    树的遍历给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤......
  • Codeforces Round 938 (Div. 3)题解(A-E)
    A.YogurtSale题意:输入一份酸奶a元,两份b元,求买n份酸奶最少要多少钱。#include<iostream>#include<string>#include<cstring>#include<algorithm>usingnamespacestd;typedeflonglongll;constintN=1e6+7;voidsolve(){ intn,a,b;cin>>n>>......
  • ARC080F Prime Flip 题解
    传送门题意:给定初始\(a\)数组,每次可以选一个长度为奇质数的区间取反。问全变成\(0\)要多少次操作。和Password、XorReplace的套路相同,做一个差分。令\(b_i=a_i\xora_{i-1}\),目的就是让\(b\)数组变为全\(0\)。对\(a_i\sima_{i+p-1}\)取反相当于对\(b_i,b_{i+p......
  • 算法模板 v1.12.1.20240409
    算法模板v1.1.1.20240115:之前历史版本已不可寻,创建第一份算法模板。v1.2.1.20240116:删除“编译”-“手动开栈”;删除“编译”-“手动开O优化”;修改“编译”-“CF模板”;删除“读写”;删除“图论”-“欧拉图”-“混合图”;删除“图论”-“可达性统计”;删除“数据类型”-“高精类”。......
  • 萌新科研狗每日感想
    大一下学期过着研究生般的生活,虽然说没什么课业压力, 但每天忙于科研和开发项目,日子在一篇篇论文和一行行代码中过去,这一切 不就是我大一上学期苦苦争取求来的吗[呲牙][呲牙][呲牙],现在得知自己有机会成为光荣的科研狗的时候,就像上学期知道自己可以搞开发了一样,虽然有点害怕,还是......
  • 题解:P10234 [yLCPC2024] B. 找机厅
    题意简述给你一个长\(n\)宽\(m\)的\(01\)迷宫,从\((1,1)\)开始要走到\((n,m)\)。如果能走那么输出最短路和路径(路径用\(LRUD\)表示),否则输出\(-1\)。有\(t\)组数据。如果当前格子是\(0\)那么你只能走到\(1\)的格子,反之亦然。思路考虑使用\(BFS\),每次走......
  • AtCoder Beginner Contest 348 A-F 题解
    A-PenaltyKickQuestion高桥将在一场足球比赛中获得\(N\)个点球。对于第\(i\)个罚球,如果\(i\)是\(3\)的倍数,他将罚球失败,否则罚球成功。请打印他罚球的结果。Solution当\(i\%3==0\)时说明能被\(3\)整除Code#include<bits/stdc++.h>usingnamespacest......