整理不易留个小心心呗🥰
如果有更好的或者是我有错的地方还请各位大佬指出哦
有些是copy的还望不要介意
Excel表列序号
题目描述:
给你一个字符串 columnTitle
,表示 Excel 表格中的列名称。返回 该列名称对应的列序号
例如:
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...
示例:
输入: columnTitle = "A"
输出: 1
提示:
1 <= columnTitle.length <= 7
columnTitle 仅由大写英文组成
columnTitle 在范围 ["A", "FXSHRXW"] 内
- 代码实现
class Solution {
public int titleToNumber(String columnTitle) {
int n = columnTitle.length();
int ans = 0;
for(int i=0;i<n;i++){
//A为1所以要+1
//因为有26个字母,相当于26进制,每26个数则向前一位
//ZY:26 * 26 + 25=701
ans = ans*26 + (columnTitle.charAt(i) - 'A' + 1);
}
return ans;
}
}
- 写法二
class Solution {
public int titleToNumber(String columnTitle) {
int ans = 0;
int multiple = 1;
for (int i = columnTitle.length() - 1; i >= 0; i--) {
//ZY:26*26 + 26⁰*25
int k = columnTitle.charAt(i) - 'A' + 1;
ans += k * multiple;
multiple *= 26;
}
return ans;
}
}
四数相加Ⅱ
题目描述:
给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:
0 <= i, j, k, l < n
nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0
示例:
输入:nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]
输出:2
解释:
两个元组如下:
1. (0, 0, 0, 1) -> nums1[0] + nums2[0] + nums3[0] + nums4[1] = 1 + (-2) + (-1) + 2 = 0
2. (1, 1, 0, 0) -> nums1[1] + nums2[1] + nums3[0] + nums4[0] = 2 + (-1) + (-1) + 0 = 0
- 代码实现
class Solution {
public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
Map<Integer,Integer> map = new HashMap<>();
//计算nums1和nums2的和,与nums3和nums4的和的负值相等则=0
for(int A : nums1){
for(int B : nums2){
int sum = A+B;
map.put(sum,map.getOrDefault(sum,0)+1);
}
}
int count = 0;
for(int C:nums3){
for(int D:nums4){
int sum = -(C+D);
if(map.containsKey(sum)){
//加的是nums1和nums2的和出现的次数
count += map.get(sum);
}
}
}
return count;
}
}
常数时间插入、删除和获取随机元素
题目描述:
实现RandomizedSet 类:
RandomizedSet() 初始化 RandomizedSet 对象
bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;
否则,返回 false 。
bool remove(int val) 当元素 val 存在时,从集合中移除该项,并返回 true ;
否则,返回 false 。
int getRandom() 随机返回现有集合中的一项(测试用例保证调用此方法时集合中至少存在一个元素)。每个元素应该有 相同的概率 被返回。
你必须实现类的所有函数,并满足每个函数的 平均 时间复杂度为 O(1)
示例:
输入
["RandomizedSet", "insert", "remove", "insert", "getRandom", "remove", "insert", "getRandom"]
[[], [1], [2], [2], [], [1], [2], []]
输出
[null, true, false, true, 2, true, false, 2]
解释
RandomizedSet randomizedSet = new RandomizedSet();
randomizedSet.insert(1); // 向集合中插入 1 。返回 true 表示 1 被成功地插入。
randomizedSet.remove(2); // 返回 false ,表示集合中不存在 2 。
randomizedSet.insert(2); // 向集合中插入 2 。返回 true 。集合现在包含 [1,2] 。
randomizedSet.getRandom(); // getRandom 应随机返回 1 或 2 。
randomizedSet.remove(1); // 从集合中移除 1 ,返回 true 。集合现在包含 [2] 。
randomizedSet.insert(2); // 2 已在集合中,所以返回 false 。
randomizedSet.getRandom(); // 由于 2 是集合中唯一的数字,getRandom 总是返回 2 。
- 代码实现
class RandomizedSet {
List<Integer> nums;//存放值
Map<Integer,Integer> map;//记录值和下标
Random random;
public RandomizedSet() {
nums = new ArrayList<>();
map = new HashMap<>();
random = new Random();
}
public boolean insert(int val) {
if(!map.containsKey(val)){
map.put(val,nums.size());
nums.add(val);
return true;
}
return false;
}
public boolean remove(int val) {
if(map.containsKey(val)){
int index = map.get(val);
int last = nums.get(nums.size()-1);
//将要删除的值改为数组最后一个值
nums.set(index,last);
map.put(last,index);
//删除最后一个值
//因为不在乎顺序,交换最后一个值,删除就为O(1)
nums.remove(nums.size()-1);
map.remove(val);
return true;
}
return false;
}
public int getRandom() {
int randomIndex = random.nextInt(nums.size());
return nums.get(randomIndex);
}
}
/**
* Your RandomizedSet object will be instantiated and called as such:
* RandomizedSet obj = new RandomizedSet();
* boolean param_1 = obj.insert(val);
* boolean param_2 = obj.remove(val);
* int param_3 = obj.getRandom();
*/