Java刷题常见问题(Array篇)

本文介绍了Java中数组和集合的基本操作方法,包括数组排序、获取长度、转换为字符串及集合的操作等,并提供了常见问题的解决方案,如如何将整数数组排序、如何使用length与length()及size()方法等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注:此博客不再更新,所有最新文章将发表在个人独立博客limengting.site。分享技术,记录生活,欢迎大家关注

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());
}

输出的值为:
3
9
1

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

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

4、相同元素矩阵如何从mn矩阵重构为rc矩阵?

// 遍历处理第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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值