mami mami
Home
知识体系总览
  • 数据结构与算法
  • 计算机网络
  • 操作系统
  • MySQL
  • Java 基础
  • Java 集合
  • Java 并发
  • Java 虚拟机
  • Spring
  • Redis
  • 唠唠嗑儿
  • 读书笔记
归档
GitHub (opens new window)
Home
知识体系总览
  • 数据结构与算法
  • 计算机网络
  • 操作系统
  • MySQL
  • Java 基础
  • Java 集合
  • Java 并发
  • Java 虚拟机
  • Spring
  • Redis
  • 唠唠嗑儿
  • 读书笔记
归档
GitHub (opens new window)
  • 一些刷题小技巧
    • 位运算
      • 左移 <<1 表示 乘以 2,右移 >>1 表示除以 2
      • 获取一个 int 类型整数每个位置上的 2 进制数位
      • 从高位向低位(从左往右)计算两个整数的异或结果
    • 集合与数组
      • List<String> 转 String[]
      • List<String[]> 转 String[][]
      • String[] 转 List<String>
      • List<Integer> 转 int[]
      • Map 中添加元素
      • 计算数组的所有元素之和
  • 研究生
  • 器件课程
  • 上传github
  • 数据结构与算法
itslae
2022-05-04
目录

一些刷题小技巧

# 一些刷题小技巧

# 位运算

# 左移 <<1 表示 乘以 2,右移 >>1 表示除以 2

# 获取一个 int 类型整数每个位置上的 2 进制数位

ex:剑指 Offer II 067. 最大的异或 - 力扣(LeetCode) (leetcode-cn.com) (opens new window)

(下面代码为从高位向低位、从左往右)

for (int i = 31; i >= 0; i --) {
	// 获取当前数位上的 2 进制数值
	int bit = (num >> i) & 1;
	......
}

# 从高位向低位(从左往右)计算两个整数的异或结果

ex:剑指 Offer II 067. 最大的异或 - 力扣(LeetCode) (leetcode-cn.com) (opens new window)

// 存储两数(`int nums1` 和 `int nums2`)的异或结果
int xor = 0;

for (int i = 31; i >= 0; i --) {
    // 获取当前数位上的 2 进制数值
    int bit1 = (num1 >> i) & 1;
	int bit2 = (num2 >> i) & 1;
    
    // 两数位不相等
    if (bit1 != bit2) {
        xor = xor * 2 + 1;
    }
    // 两数位相等
    else {
        xor = xor * 2;
    }
}

return xor;

# 集合与数组

# List<String> 转 String[]

ex:剑指 Offer II 086. 分割回文子字符串 - 力扣(LeetCode) (opens new window)

// List<String> list
list.toArray(new String[list.size()]);

# List<String[]> 转 String[][]

ex:剑指 Offer II 086. 分割回文子字符串 - 力扣(LeetCode) (opens new window)

// List<String> list
list.toArray(new String[list.size()][]);

# String[] 转 List<String>

ex:剑指 Offer II 109. 开密码锁 - 力扣(LeetCode) (leetcode-cn.com) (opens new window)

// String[] str;
List<String> list = Arrays.asList(str);

# List<Integer> 转 int[]

ex: 剑指 Offer II 113. 课程顺序 - 力扣(LeetCode) (opens new window)

// List<integer> list;
int[] arr = list.stream().mapToInt(Integer::intValue).toArray();

先转成 IntStream,再转成 int[]

等同于:

// List<Integer> list;
IntStream intStream = list.stream().mapToInt(Integer::intValue);
int[] num = intStream.toArray();

如下面这样写会报错:

# Map 中添加元素

ex: 剑指 Offer II 113. 课程顺序 - 力扣(LeetCode) (leetcode-cn.com) (opens new window)

// Map<String, List<String>> map;
map.putIfAbsent("xxx", new ArrayList<>()); // 若 key 不存在,则添加 key
map.get("xxx").append("111"); // 为 key 对应的 value 赋值

// Map<String, Integer> map;
map.putIfAbsent("xxx", 0); // 若 key 不存在,则添加 key
map.put("xxx", map.get("xxx") + 1); // 将 key 对应的 value 值 + 1

# 计算数组的所有元素之和

ex:剑指 Offer II 101. 分割等和子集 - 力扣(LeetCode) (opens new window)

// int[] nums
int sum = Arrays.stream(nums).sum();
上次更新: 2022/06/13, 02:15:48
研究生

研究生→

最近更新
01
器件课程
06-13
02
上传github
06-13
03
研究生
06-03
更多文章>
Theme by Vdoing | Copyright © 2019-2022 itslae| 心之所愿,素履以往
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式