28、搜索目标值
题目:给定一个n个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target ,如果目标值存在返回下标,否则返回 -1。
示例1:
输入:nums = [-1, 0, 3, 5, 9, 12],target = 9
输出:4
解释:9 出现在 nums 中并且下标为4
示例2:
输入:nums = [-1, 0, 3, 5, 9, 12],target = 2
输出:-1
解释:2 不存在 nums 中因此返回-1
提示:
- 你可以假设 nums 中所有的元素是不重复的。
- n 将在[1, 10000]之间
- nums 的每一个元素都将在[-9999, 9999]之间
思路
[使用二分查找可参考](704.二分查找 - 掘金 (juejin.cn))
代码实现
#include <stdio.h>
int main()
{
int a[100];
int x, n = 0, target;//x是存入数组的值,n是记录个数,target是需要找的值
int flag = 0;//设置一个信号量用来判断是否已经找到目标值
while (scanf_s("%d",&x))//输入数组
{
a[n++] = x;
if (getchar() == '\n')
break;
}
printf("输入目标值:");
scanf_s("%d", &target);//输入目标值
for (int i = 0; i < n; i++) {
if (a[i] == target) {
printf("%d", i);//输出下标值
flag = 1;//赋值为1表示已找到
break;
}
else {
continue;//没找到,继续循环
}
}
if (flag == 0) {
printf("-1");//若目标值为0.则未找到,输出-1
}
return 0;
}
运行结果
复杂度
- 时间复杂度 O(n)-- - 遍历判断是否有相等值,共需判断n次,n是数组的长度
- 空间复杂度O(1)-- - 无额外存储空间,仅常熟级空间,用到的数组也是有限个
29、原地修改数组
题目:给你一个数组 nums 和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。
- 不要使用额外的数组空间,你必须仅使用O(1)额外空间并原地修改输入数组。
- 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
示例1:
给定 nums = [3, 2, 2, 3],val = 3,
函数应该返回新的长度2,并且 nums 中的前两个元素均为2。你不需要考虑数组中超出新长度后面的元素。
示例2:
给定 nums = [0, 1, 2, 2, 3, 0, 4, 2],val = 2,
函数应该返回新的长度5,并且nums中的前五个元素为 0, 1, 3, 0, 4。 你不需要考虑数组中超出新长度后面的元素。
思路
- 首先输入数组元素和val,定义一个count值记录最新数组长度,并赋值为0,用来计算元素个数,即新数组长度。
- 然后遍历数组,当元素值与val不同时,cnt++,当元素值与val值相同时,继续遍历。
- 最后输出count,即数组新长度。
- 其他方式可参考[:27.移除元素 - 掘金 (juejin.cn)]
代码实现
#include<stdio.h>
//原地修改数组
int main() {
int num[100], val;//num[]数组和特定值
int x, n = 0,count=0;//x是存入数组的值,n是原始数组的长度,count新的数组长度
while (scanf_s("%d",&x))
{
num[n++] = x; //往数组里存值
if (getchar() == '\n')//输入换行时结束
break;
}
printf("输入移除的值:");
scanf_s("%d", &val);
printf("新数组的元素: ");
for (int i = 0; i < n; i++) {
if (num[i] != val) {//如果数组里的值没有不等于val的
count++;
printf("%d ", num[i]);
}
else {
continue;//continue;//结束本次循环,进行下一次循环。
}
}
printf("\n");
printf("新数组的长度:%d", count);
return 0;
}
运行结果
复杂度
- 时间复杂度 O(n)-- - 遍历判断是否有相等值,共需判断n次,n是数组的长度
- 空间复杂度O(1)-- - 无额外存储空间,仅常熟级空间,用到的数组也是有限个
小结
break,结束循环;continue,结束本次循环,进行下一次循环。