“byte和short两兄弟去找int问long去哪了”
“int摇摇头说不知道”
“此时float和double两兄弟也来凑热闹”
“共同商议后决定去找char询问”
“char面对五人的询问只好说boolean知道”
“六人来到boolean的住处发现long竟然在玩猜真假游戏”
Java语言的特点
1.简单易学。Java有丰富的类库,能够通过静态方法封装,降低API的学习成本,提高工作效率。
2.面向对象。这个也是Java最重要的特性,java能够使得程序耦合度更低,内聚性更高。
3.可靠安全。Java生态系统包括用于分析和报告安全性问题的各种工具。
4.与平台无关。Java能够跨平台使用。
5.支持多线程。Java可以采用多线程+协程方式实现更多的并发操作。
八大基本数据类型
基本类型 | 大小(字节) | 默认值 | 封装类 |
---|---|---|---|
byte | 1 | (byte)0 | Byte |
short | 2 | (short)0 | Short |
int | 4 | 0 | Integer |
long | 8 | 0L | Long |
float | 4 | 0.0f | Float |
double | 8 | o.od | Double |
boolean | - | false | Boolean |
char | 2 | \u0000(null) | Character |
封装类注意事项
1.int与Integer的区别
int是基本数据类型,Integer是引用类型。
int的默认值为0,Integer的默认值为null。因此Integer能区分0和null。
一旦java看到null,就知道这个引用还没有指向某个对象,在任何引用使用前,必须为其指定一个对象,否则会报错(空指针异常)
2.分配空间的区别
基本数据类型在声明时系统会自动分配空间
引用类型声明时只是分配了引用空间,必须通过实例化开辟数据空间之后才可以赋值。
数组对象也是一个引用对象,将一个数组赋值给另一个数组时只是复制了一个引用,所以通过某一个数组所做的修改在另一个数组中也看得见
3.boolean类型的特殊之处
虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在java虚拟机中没有任何供boolean值专用的字节码指令,java语言表达式所操作的boolean值,在编译之后都使用虚拟机中的int数据类型来代替,而boolean数组将会被编译成java虚拟机的byte数组,每个元素boolean元素占8位。这样我们就可以得出在单独使用时boolean类型占了4个字节,在数组中又是1个字节。使用int的原因是,对于当下32位的处理器(CPU)来说,一次处理数据是32位(这里不是指32/64位系统,而是指CPU硬件层面),具有高效存取的特点。
二分查找
题目:丢失的数字
难度:🌟
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/missing-number
给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。
输入:nums = [3,0,1]
输出:2
解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。
输入:nums = [0,1]
输出:2
解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。2 是丢失的数字,因为它没有出现在 nums 中。
输入:nums = [9,6,4,2,3,5,7,0,1]
输出:8
解释:n = 9,因为有 9 个数字,所以所有的数字都在范围 [0,9] 内。8 是丢失的数字,因为它没有出现在 nums 中。
输入:nums = [0]
输出:1
解释:n = 1,因为有 1 个数字,所以所有的数字都在范围 [0,1] 内。1 是丢失的数字,因为它没有出现在 nums 中。
提示:
n == nums.length
1 <= n <= 104
0 <= nums[i] <= n
nums 中的所有数字都 独一无二
请先思考!!!!
|||||||||||
|||||||||||
|||||||||||
|||||||||||
|||||||||||
|||||||||||
|||||||||||
答答答答答答答答答答答
案案案案案案案案案案案
往往往往往往往往往往往
下下下下下下下下下下下
翻翻翻翻翻翻翻翻翻翻翻
|||||||||||
|||||||||||
|||||||||||
|||||||||||
|||||||||||
|||||||||||
|||||||||||
class Solution {
public int missingNumber(int[] nums) {
// 先对数组进行排序
Arrays.sort(nums);
// 考虑到可能是最后一个数字丢失的情况
int target = nums.length;
for(int i = 0 ; i < nums.length ; i++){
// 这样就包含了第一个数字丢失的情况
if(nums[i] != i){
return i;
}
}
return target;
}
}
题解:
首先将数组进行排序,定义target等于数组的长度,然后循环数组,如果下标所对应的值不等于下标,则就是丢失的数字,此时target就是为了防止丢失的最后一个数字这种情况的出现
class Solution {
public int missingNumber(int[] nums) {
int sum = 0;
// 首先计算nums中所有数字的和
for(int i : nums){
sum += i;
}
// 求出从1到n的数字之和
int countSum = (nums.length * (nums.length+1)) >> 1;
return countSum - sum;
}
}
题解:
利用了高斯求和公式,如下
求出1到n的数值之和减去数组里的数值之和就是我们要好的丢失的数字