title: 暑期考核算法题-1
date: 2020-07-14 10:05:44
categories:
- 算法
tags: - java
- c语言
- 算法
top: 10
暑期考核算法题-1
题目:
给定一个包含 0, 1, 2, ..., n
中 n 个数的序列,找出 0 … n 中没有出现在序列中的那个数
思路:
首先:读题要找到0…n中没有出现在序列中的那个数,所以有三种情况.
-
没有中间数。例如:3,0,1,没有2
-
没有n。例如:0,1,没有2
-
没有0。例如:1,2,没有0
解决办法:
- 排序
- 判断是否有n,没有输出n
- 判断是否有0,没有输出0
- 判断是否缺中间的某一个数,若缺返回该数
- 若不缺任何数,返回-1
Java实现:
package com.company;
import java.util.Arrays;
import java.util.Scanner;
/**
* @author peichendong
*/
public class Test01 {
public static void main(String[] args) {
int[] nums=new int[9];
Scanner scanner=new Scanner(System.in);
for (int i = 0; i < nums.length; i++) {
nums[i]=scanner.nextInt();
}
int num=new Test01().missingNumber(nums);
System.out.println("缺失的数字是:"+num);
}
public int missingNumber(int[] nums) {
/*
* 将数组排序
* */
Arrays.sort(nums);
if (nums[nums.length-1]!=nums.length){
return nums.length;
}
if (nums[0]!=0){
return 0;
}
int i;
for ( i = 0; i < nums.length; i++) {
if (i!=nums[i]){
return i;
}
}
return -1;
}
}
C语言实现
#include<stdlib.h>
#include<stdio.h>
int missingNumber(int *nums, int numsSize);
int main(int argc, char const *argv[])
{
int a[]={3,0,1};
int size=sizeof(a)/sizeof(int);
int num=missingNumber(a,size);
printf("%d\n",num);
return 0;
}
int missingNumber(int *nums, int numsSize)
{
//排序
for ( int i = 1; i < numsSize; i++)
{
int j;
int temp=nums[i];
for ( j = i-1; j>=0&&temp<nums[j]; j--)
{
nums[j+1]=nums[j];
}
nums[j+1]=temp;
}
//寻找
if (nums[numsSize - 1] != numsSize)
{
return numsSize;
}
if (nums[0] != 0)
{
return 0;
}
for (int i = 0; i < numsSize; i++)
{
if (i != nums[i])
{
return i;
}
}
return -1;
}