在数组中查找某个整数
package com.kab.task;
import java.util.Scanner;
/*
* 1、查找某个整数
定义一个长度为 10 的整型数组 nums ,循环输入 10 个整数。 然后将输
入一个整数,查找此整数,找到 输出下标, 没找到给出提示。
*/
public class Task_010104_002_01 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
//定义数组
int[] nums=new int[10];
System.out.println("请输入10个整数:");
//给数组元素循环赋值
for(int i=0;i<nums.length;i++) {
nums[i]=input.nextInt();
}
System.out.println("请输入一个要查找的数字:");
int findNum=input.nextInt();
//查找
for(int i=0;i<nums.length;i++) {
if(findNum==nums[i]) {
System.out.println("数组中要查找的元素,下标是:"+i);
break;
}else if(i==nums.length-1) {
System.out.println("没有找到!");//从头比到尾,比到最后一次依然没有成功输出:没有找到
}
}
}
}
求最大最小值
package com.kab.task;
import java.util.Scanner;
/**
* 2、找出数组的最值
定义一个长度为 10 的整型数组 nums ,循环输入 10 个整数。输出数组
的最大值、最小值。
* @author 23802
*
*/
public class Task_010104_002_2 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
//定义数组
int[] nums=new int[10];
System.out.println("请输入10个整数:");
//给数组元素循环赋值
for(int i=0;i<nums.length;i++) {
nums[i]=input.nextInt();
}
//定义最初的值
int max=nums[0];
int min=nums[0];
//循环比对
for(int i=1;i<nums.length;i++) {
if(nums[i]>max) {
max=nums[i];
}
if(nums[i]<min) {
min=nums[i];
}
}
System.out.println("最大值是:"+max);
System.out.println("最小值是:"+min);
}
}
两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和
为目标值的那两个整数,并输出他们的数组下标
package com.kab.task;
import java.util.Scanner;
/*
* 3、两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和
为目标值的那两个整数,并输出他们的数组下标
假设每种输入只会对应一个答案,不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以输出 0,1
*/
public class Task_010104_002_3 {
public static void main(String[] args) {
int[] nums={1,2,145,7,11,15};
int target=10;
boolean flag=false;//标识是否找到-默认false
for(int i=0;i<nums.length;i++) {
for(int j=i+1;j<nums.length;j++) {
if(nums[i]+nums[j]==target) {
System.out.println("找到了满足条件的两个数字是:"+nums[i]+"--"+nums[j]+";两个数字的下标是:"+i+"--"+j);
flag=true;
break;
}
}
}
if (!flag)
System.out.println("没有找到满足条件的!");
}
}
4、排序并查找
* 对数组{1,3,9,5,6,7,15,4,8}进行排序,然后使用二分查找元素
6 并输出排序后的下标。
package com.kab.task;
/**
* 4、排序并查找
* 对数组{1,3,9,5,6,7,15,4,8}进行排序,然后使用二分查找元素
6 并输出排序后的下标。
* @author 23802
*
*/
public class Task_010104_002_4 {
public static void main(String[] args) {
int[] nums = {1,3,9,5,6,7,15,4,8};
int temporary;
int num=6;
int minIndex=0;
int maxIndex=nums.length-1;
int centerIndex= (minIndex+maxIndex)/2;
boolean flag=false;
//外层循环控制的是比较轮数
//外层循环次数:length-1
for(int i = 0;i<nums.length-1;i++) {
//内层循环控制的是每轮比较的次数
//从第i轮(i为0开始计算),比较次数为:length-i-1
for(int j=0;j<nums.length-i-1;j++) {
if(nums[j]>nums[j+1]) {
//两两相比,满足移动条件时
temporary=nums[j];
nums[j]=nums[j+1] ;
nums[j+1]=temporary;
}
}
}
System.out.println("排序后:");
for(int i=0;i<nums.length;i++) {
System.out.print(nums[i]+"\t");
}
//二分查找
while(true) {
if(minIndex>maxIndex) {
break;
}
if(nums[centerIndex]>num) {
//中间数据较大
maxIndex=centerIndex-1;
}else if(nums[centerIndex]<num) {
maxIndex=centerIndex+1;
}else {
//找到了数据 数据位置:centerIndex
System.out.println("\n找到了!下标是:"+centerIndex);
flag=true;
break;
}
//当边界发生变化时,需要更新中间下标
centerIndex= (minIndex+maxIndex)/2;
}
if(!flag) {
System.out.println("数组中没有该元素!");
}
}
}
5 5 、移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时
保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12] 输出: [1,3,12,0,0]
package com.kab.task;
public class Task_010104_002_5 {
public static int[] moveZero(int[] nums) {
//定义两个下标索引
int index1=0;
int index2=0;
while(index2<nums.length) {
if(nums[index2]!=0) {
nums[index1]=nums[index2];
index1++;
index2++;
}else {//该位置数组元素为0,直接让index2索引往前走
index2++;
}
}
//index1跟index2相差的数字应该是补齐2的个数
for(int i =index1;i<nums.length;i++) {
nums[i]=0;
}
return nums;
}
public static void main(String[] args) {
int[] nums= {0,1,0,3,12};
//调用函数
int[] newNums=moveZero(nums);
//打印数组
for(int i=0;i<newNums.length;i++) {
System.out.println(newNums[i]);
}
}
}