第?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; } }
题目名称:
改变原有数组元素的值
题目内容:
实现一个方法 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; }
题目名称:
数组所有元素之和
题目内容:
实现一个方法 sum, 以数组为参数, 求数组所有元素之和.
public static int add(int[] array) { int sum = 0; for (int i = 0; i < array.length; i++) { sum = sum+array[i]; } return sum; }
题目名称:
奇数位于偶数之前
题目内容:
调整数组顺序使得奇数位于偶数之前。调整之后,不关心大小顺序。
如数组:[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; } }
题目名称:
两数之和
题目内容:
给定一个整数数组 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; }
题目名称:
只出现一次的数字
题目内容:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
示例 1:
输入: [2,2,1] 输出: 1示例?2:
输入: [4,1,2,1,2] 输出: 4public int singleNumber(int[] nums) { // 用异或运算的性质可以巧妙的解决这个问题,因为数组中只有一个数字出现一次 // 则其他出现两次的数字用异或运算后都是0,最终整个数组异或运算的结果即为所求。 int ret = 0; for (int i : nums) { ret ^= i; } return ret; }
题目名称:
多数元素
题目内容:
给定一个大小为 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]); }
题目名称:
存在连续三个奇数的数组
题目内容:
给你一个整数数组?
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; }