JavaSE-习题-数组的创建和使用等

第 1 题(编程题)

题目名称:

创建的数组,并且赋初始值

题目内容:

创建一个 int 类型的数组, 元素个数为 100, 并把每个元素依次设置为 1 - 100

public static void main(String[] args) {
    int[] array = new int[100];
    for (int i = 0; i < array.length; i++) {
        //题目要求赋值1-100,这里利用下标的值,然后+1即可。
        array[i] = i+1;
    }
}

第 2 题(编程题)

题目名称:

改变原有数组元素的值

题目内容:

实现一个方法 transform, 以数组为参数, 循环将数组中的每个元素 乘以 2 , 并设置到对应的数组元素上. 例如 原数组为 {1, 2, 3}, 修改之后为 {2, 4, 6}

//方式一:扩大的还是原来的数组,这样做的不好的地方是,改变了原来数组的值
public static void func2(int[] array) {

      for (int i = 0; i < array.length; i++) {

          array[i] = array[i]*2;

      }

  }


//方式二:扩大的新的数组,没有修改原来的值
public static int[] func3(int[] array) {

    int[] tmp = new int[array.length];//

    for (int i = 0; i < array.length; i++) {

        tmp[i] = array[i]*2;

    }

    return tmp;

}

第 3 题(编程题)

题目名称:

数组所有元素之和

题目内容:

实现一个方法 sum, 以数组为参数, 求数组所有元素之和.

public static int add(int[] array) {
    int sum = 0;
    for (int i = 0; i < array.length; i++) {
        sum = sum+array[i];
    }
    return sum;
}

第 4 题(编程题)

题目名称:

奇数位于偶数之前

题目内容:

调整数组顺序使得奇数位于偶数之前。调整之后,不关心大小顺序。

如数组:[1,2,3,4,5,6]

调整后可能是:[1, 5, 3, 4, 2, 6]

public static void func4(int[] array) {
    int i = 0;
    int j = array.length-1;
    while (i < j) {
        //循环外面给了i < j  ,思考这里为什么还需要判断?
        while (i < j && array[i] % 2 != 0) {
            i++;
        }
        //i 下标一定是偶数
        while (i < j && array[j] % 2 == 0) {
            j--;
        }
        int tmp = array[i];
        array[i] = array[j];
        array[j] = tmp;
    }
}

第 5 题(编程题)

题目名称:

两数之和

题目内容:

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9

输出:[0,1]

解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

public int[] twoSum(int[] nums, int target) {
    int[] result = new int[2];
    // 双指针i和j,i从前向后遍历,j从后向i遍历,若arr[i]+arr[j]=target,即为题解
    for (int i = 0; i < nums.length - 1; i++) {
        for (int j = nums.length - 1; j > i; j--) {
            if (nums[i] + nums[j] == target) {
                result[0] = i;
                result[1] = j;
            }
        }
    }
    return result;
}

第 6 题(编程题)

题目名称:

只出现一次的数字

题目内容:

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

示例 1:

输入: [2,2,1]
输出: 1

示例 2:

输入: [4,1,2,1,2]
输出: 4
public int singleNumber(int[] nums) {
    // 用异或运算的性质可以巧妙的解决这个问题,因为数组中只有一个数字出现一次
    // 则其他出现两次的数字用异或运算后都是0,最终整个数组异或运算的结果即为所求。
    int ret = 0;
    for (int i : nums) {
        ret ^= i;
    }
    return ret;
}

第 7 题(编程题)

题目名称:

多数元素

题目内容:

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素

示例 1:

输入:[3,2,3]
输出:3

示例 2:

输入:[2,2,1,1,1,2,2]
输出:2
/**
 * 排序法
 * 将数组排序后,数组n/2的元素一定是众数
 */
public int majorityElement(int[] nums) {
    Arrays.sort(nums);
    return nums[nums.length/2];
}
public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6,7,88,8,8,8,8,8,10,11,22,3,4};
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
        System.out.println(arr[arr.length/2]);
    }

第 8 题(编程题)

题目名称:

存在连续三个奇数的数组

题目内容:

给你一个整数数组 arr,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 true ;否则,返回 false 。

示例 1:

输入:arr = [2,6,4,1]

输出:false

解释:不存在连续三个元素都是奇数的情况。

示例 2:

输入:arr = [1,2,34,3,4,5,7,23,12]

输出:true

解释:存在连续三个元素都是奇数的情况,即 [5,7,23] 。

public static void main(String[] args) {
        int[] arr = {1,2,34,3,4,5,7,23,12};
        for (int i = 0; i < arr.length-2; i++) {
            //从i开始 连续三个元素都是奇数
            //条件:i下标的数 为奇数
            if(arr[i]%2 != 0){
                if (is_three_odd(i, arr)){
                    System.out.println("[" + arr[i]+','+arr[i+1]+','+arr[i+2] + ']');
                }
            }
        }

    }
    public static boolean is_three_odd(int index, int[] arr){
        for (int i = index+1; i < index+3; i++) {
            if(arr[i]%2 == 0){
                return false;
            }
        }
        return true;
    }

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值