5.习题


package demo5;
/*
 * 1、查找某个整数
 * 定义一个长度为 10 的整型数组 nums ,循环输入 10 个整数。 然后将输
   入一个整数,查找此整数,找到输出下标, 没找到给出提示。

   2、找出数组的最值
   定义一个长度为 10 的整型数组 nums ,循环输入 10 个整数。输出数组
   的最大值、最小值。

   3、两数之和
   给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为
   目标值的那两个整数,并输出他们的数组下标
   假设每种输入只会对应一个答案,不能重复利用这个数组中同样的元素。
   示例:
   给定 nums = [2, 7, 11, 15], target = 9
   因为 nums[0] + nums[1] = 2 + 7 = 9
   所以输出 0,1

   4、排序并查找
   对数组{1,3,9,5,6,7,15,4,8}进行排序,然后使用二分查找 6 并
   输出排序后的下标

   5、移动零
   给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保
   持非零元素的相对顺序。
   示例:
   输入: [0,1,0,3,12] 输出: [1,3,12,0,0]
 */

import java.util.Arrays;
import java.util.Scanner;

public class Demo1 {
    static Scanner sc=new Scanner(System.in);
    public static void main(String[] args) {
       // findNum();
        //findMaxAndMin();
        //sumOfTwo();
        //sorAndFind(6);
        moveZore();

    }

    /**
     * 移动零:将数组中非零数移入新数组,新数组剩下空间为0
     */
    private static void moveZore() {
        int[] arr={0,1,0,3,12};
        int[] arr1=new int[arr.length];//未初始化数组元素默认是0
        int index=0;
        System.out.println("移动前数组:"+Arrays.toString(arr));
        for (int i = 0; i < arr.length; i++) {
            if (arr[i]!=0) arr1[index++]=arr[i];
        }
        System.out.println("移动后数组:"+Arrays.toString(arr1));
    }

    /**
     *排序并查找
     */
    private static void sorAndFind(int num) {
        int[] arr={1,3,9,5,6,7,15,4,8};
        System.out.println("排序前数组:");
        System.out.println(Arrays.toString(arr));//Arrays数组工具类toString将数组换成字符串
        arr=bubbleSort(arr);
        System.out.println("冒泡排序后数组:");
        System.out.println(Arrays.toString(arr));
        halfFind(arr, num);
    }


    /**
     * 二分查找
     * @param arr
     * @param num
     */
    private static void halfFind(int[] arr, int num) {
        int minIndex=0;
        int maxIndex=arr.length-1;
        int midIndex=(minIndex+maxIndex)/2;
        while(minIndex<maxIndex){
            if (num<arr[midIndex]) maxIndex=midIndex-1;
            if (num>arr[midIndex]) minIndex=midIndex+1;
            if (num==arr[midIndex]) {
                System.out.println("二分查找目标"+num+"的下标是"+midIndex);
                break;
            }
            midIndex=(minIndex+maxIndex)/2;
        }
        if (minIndex>=maxIndex){
            System.out.println("目标不存在");
        }
    }

    /**
     * 冒泡排序
     * @param arr
     * @return
     */
    private static int[] bubbleSort(int[] arr) {
        int temp;
        for (int i=0;i<arr.length-1;i++){
            for (int j=0;j<arr.length-1-i;j++){
                if (arr[j+1]<arr[j]){
                    temp=arr[j+1];
                    arr[j+1]=arr[j];
                    arr[j]=temp;
                }
            }
        }
        return arr;
    }

    /**
     * 两数之和为目标数target,给定数组和target
     */
    private static void sumOfTwo() {
        int[] nums={2,7,11,15};
        int target=9;
        int i,j;
        System.out.println("给定数组nums:"+Arrays.toString(nums));
        System.out.println("给定target: "+target);
        finish:for ( i=0;i<nums.length/2;i++){
            for ( j=i+1;j<nums.length;j++){
                if (nums[i]+nums[j]==target) {
                    System.out.println(i+" "+j);
                    break finish;
                }
            }
        }
        if (i==nums.length/2){
            System.out.println("没有找到两数之和等于target值");
        }
    }

    /**
     * 寻找最值
     */
    private static void findMaxAndMin() {
        int[] nums = initArray();
        int max=nums[0];
        int min=nums[0];
        for (int i = 0; i < nums.length; i++) {
            if (nums[i]>max) max=nums[i];
            if (nums[i]<min) min=nums[i];
        }
        System.out.println("数组最大值:"+max+",数组最小值:"+min);
    }

    /**
     * 查找某个整数
     */
    private static void findNum() {
        int[] nums = initArray();
        System.out.println("输入一个整数:");
        int a = sc.nextInt();
        for (int i = 0; i < nums.length; i++) {
            if (nums[i]==a){
                System.out.println("该整数所在数组下表是:"+i);
                break;
            }
            if (i==nums.length-1){
                System.out.println("数组中不存在该整数");
            }
        }
    }

    /**
     * 初始化数组
     * @return
     */
    private static int[] initArray() {
        int[] nums=new int[10];
        System.out.println("输入10个整数:");
        for (int i = 0; i < nums.length; i++) {
            nums[i]=sc.nextInt();
        }
        return nums;
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值