搜索目标值
给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。
提示:
-
你可以假设nums中的所有元素是不重复的。
-
n 将在 [1, 10000]之间。
-
nums的每个元素都将在 [-9999, 9999]之间。
示例
输入
-1 0 3 5 9 12
9
输出
4
输入
-1 0 3 5 9 12
2
输出
-1
思路
-
输入数组和目标值,然后循环遍历数组,看其值是否等于目标值,若相等,则输出下标,结束循环;不相等,继续循环。
-
用一个信号量flag判断是否找到目标值,并设初始值为0。当找到下标时,设置为1。最后对flag判断,若flag=0,表示未找到目标值,则输出-1。
具体实现
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[100];
int x,n=0,target;
int flag=0; //设置一个信号量用来判断是否已找到目标值
while(cin>>x){ //输入数组
a[n++]=x;
if(cin.get()=='\n') break;
}
cin>>target; //输入目标值
for(int i=0; i<n; i++){
if(a[i]==target){
cout<<i;
flag=1; //赋值为1表示已找到
break;
}else{
continue; //没找到,继续循环
}
}
if(flag==0) cout<<-1; //若目标值为0,则未找到,输出-1
return 0;
}
原地修改数组
给你一个数组nums和一个值val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变,不需要考虑数组中超出新长度后面的元素。
例如:给定nums=[0,1,2,2,3,0,4,2],val=2,函数应该返回新的长度5,并且nums中的前五个元素为 0, 1, 3, 0, 4。 你不需要考虑数组中超出新长度后面的元素。
示例
输入
3 2 2 3
3
输出
2
思路
-
首先输入数组元素和val,定义一个cnt值,并赋值为0,用来计算元素个数,即数组长度。
-
然后遍历数组,当元素值与val不同时,cnt++,当元素值与val值相同时,继续遍历。
-
最后输出cnt,即数组新长度。
具体实现
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[100],x,val,n=0,cnt=0;
while(cin>>x){ //输入数组元素
a[n++]=x;
if(cin.get()=='\n') break;
}
cin>>val; //输入要删除的val值
for(int i=0; i<n; i++){
if(a[i]==val){
continue;
}else{
cnt++;
}
}
cout<<cnt;//输出数组长度
return 0;
}
小结
两道题都用到了break和continue,那就再强调一下break和continue的用法吧。 break,结束循环;continue,结束本次循环,进行下一次循环。