Java刷题常见问题(Array篇)

来源:互联网 发布:在淘宝网上开店要钱吗 编辑:程序博客网 时间:2024/06/14 23:46

1、如何将一个整数数组排序?

int[]  nums; // 已知的一个整数数组Arrays.sort(nums); // 排序

2、什么时候用length,什么时候用length(),什么时候用size()?

对于数组,length是数组的一个属性,用nums.length;对于字符串,用length()方法查看字符串的长度对于泛型集合,用size()方法查看这个泛型集合有多少个元素

例子:

public static void main(String[] args) {String[] list={"ma","cao","yuan"}; // 数组String a="macaoyuan"; // 字符串System.out.println(list.length);System.out.println(a.length());List<Object> array=new ArrayList(); // 泛型集合array.add(a);System.out.println(array.size());}
输出的值为:391

3、如何得到一个已知矩阵(二维数组)的行数和列数?

int[][] nums; // 已知矩阵int n = nums.length, m = nums[0].length; // 得到行数和列数

4、相同元素矩阵如何从m*n矩阵重构为r*c矩阵?

// 遍历处理第i+1个元素for (int i = 0; i < r * c; i ++)             res[i / c][i % c] = nums[i / n][i % n];

5、如何定义一个不定长整型数组?

List<Integer> list = new ArrayList<>();

6、ArrayList 中的 set(index, object) 和 add(index, object) 的区别

set:将原来index位置上的object的替换掉add:将原来index位置上的object向后移动

7、(1)如何将整数2473变成字符串”2473”
(2)如何将整数2473变成数组[‘2’, ‘4’, ‘7’, ‘3’]
(3)如何将数组[‘2’, ‘4’, ‘7’, ‘3’]还原为数字2473

char[] digits = Integer.toString(num);char[] digits = Integer.toString(num).toCharArray();Integer.valueOf(new String(digits));

「算法思路篇」
1、一个长度为n的整型数组int[] nums,nums[i] 属于[1,n],有些数出现一次,有些数出现两次,要找出出现两次的数,时间复杂度O(n),不使用额外空间?(leetcode 442题)

思路:引入索引index与nums[i]的映射函数,当第一次遇见index位置的nums[index],将nums[index]反转置为负数,当出现与前面出现过的nums[i]值相同的nums[i],则由映射函数算出相同的index,对应到相同的nums[index],若此时nums[index]为一个负数,则nums[i]曾经出现过,将nums[i]加入到res数组中。

class Solution {    public List<Integer> findDuplicates(int[] nums) {        List<Integer> res = new ArrayList<>();        for (int i = 0; i < nums.length; i ++) {            int index = Math.abs(nums[i]) - 1; // nums[i]的取值范围为1到n, nums[i] - 1的取值范围为0到n-1,可作为下标索引            if (nums[index] > 0) {                nums[index] = - nums[index];            } else res.add(index + 1);        }        return res;    }}