1.两个数组的交集

由于所求交集要求元素不重复,所以我们想到用集合HashSet处理
遍历第一个数组,将所有元素(不含重复)放入集合a中,再遍历第二个数组,如果有元素存在于集合a中,那么将该元素存入集合b,集合b即为交集,遍历存放数组即可

class Solution {public int[] intersection(int[] nums1, int[] nums2) {HashMap<Integer,Integer> map = new HashMap<>();HashSet<Integer> set = new HashSet<>();int[] arr = new int[Math.min(nums1.length,nums2.length)];int con = 0;for(int num : nums1){if (!map.containsKey(num)){map.put(num,1);}}for(int num : nums2){if (map.containsKey(num)){set.add(num);}}for(int num : set){arr[con] = num;con++;}return Arrays.copyOfRange(arr,0,con);}
}

2、多数元素

本题解法很多,可以用哈希表存放每个数据出现的次数,超过一半就是答案呢。还可以排序之后求索引为一半的位置上,一定是众数,但是要求时间复杂度O(n),空间复杂度O(1),就得想一个精妙的办法–摩尔投票法

摩尔投票法是指众数的票永远比其他所有人的票加起来都多,就像是特朗普如果有美国51%的选票,他可能被希拉里或者拜登打下台吗?

代码如下

/*
执行用时:
1 ms
, 在所有 Java 提交中击败了
99.89%
的用户
内存消耗:
44.5 MB
, 在所有 Java 提交中击败了
48.53%
的用户
通过测试用例:
43 / 43
*/
class Solution {public int majorityElement(int[] nums) {int cnt = 0;int candidate = 0;for(int i : nums){if (cnt == 0){ //如果选票为0,那么重新选择候选者candidate = i;}cnt += (candidate == i) ? 1 : -1;}return candidate;}
}

3、丢失的数字

排序之后,判断索引为i的位置上的元素是否为 i,如果不是,返回索引值,就是要找的数,如果发现都满足那是咋回事,那就是最后一个数啦。

class Solution {public int missingNumber(int[] nums) {Arrays.sort(nums);int res = 0;boolean flag = false;for(int i = 0 ; i < nums.length; i++){if (nums[i] != i){res = i;flag = true;break;}}if (flag){return res;}else{return nums.length;}}
}

四、二进制求和


这题,java直接用parseInt一个重载的方法直接将二进制字符串转为Integer,相加之后再Integer.toBinaryString()直接转为二进制的字符串。但是Integer的数字位数有限,因此不够健壮,推荐使用模拟法,逐个加,保持进位是否为1;且最后一位必须加上判断是否还需加1位

class Solution {public String addBinary(String a, String b) {//模拟StringBuffer sb1 = new StringBuffer(a);StringBuffer sb2 = new StringBuffer(b);String s1 = sb1.reverse().toString();String s2 = sb2.reverse().toString();StringBuffer sb = new StringBuffer();int len1 = a.length();int len2 = b.length();int l = Math.max(len1,len2);int cnt = 0;for(int i = 0 ; i < l ; i++){int n1 =  i < a.length() ? Integer.parseInt(new String(new char[]{s1.charAt(i)})) : 0;int n2 =  i < b.length() ? Integer.parseInt(new String(new char[]{s2.charAt(i)})) : 0;sb.append((n1 + n2 + cnt)  % 2);if (n1 + n2 + cnt >= 2){cnt = 1;}else {cnt = 0;}}//还要看最后一位是不是要进一if (cnt == 1){sb.append(1);}return sb.reverse().toString();}
}

五、两数相加


和上一题一样的思路

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {if (l1 == null ){return l2;}if (l2 == null ){return l1;}int cnt = 0;//记录是否进位1,记得一轮后要清零int i,j,n1,n2;ListNode head = new ListNode();ListNode temp = head;while (l1 != null || l2 != null){n1 = l1 != null? l1.val : 0;n2 = l2 != null?l2.val : 0;i = (n1 + n2 + cnt) %10;temp.next = new ListNode(i);temp = temp.next;if (n1 + n2 + cnt >= 10){cnt = 1;}else {cnt = 0;}if (l1 !=null){l1 = l1.next;}if (l2 !=null){l2 = l2.next;}}if (cnt == 1){temp.next = new ListNode(1);}return head.next;}
}

六、爬楼梯

递归超时,所以选择动态规划,滚动数组求解

class Solution {public int climbStairs(int n) {int p = 0, q = 0 ,r = 1;for(int i = 0 ; i < n ; i++){p = q;q = r;r = p+q;}return r;}
}

LeetCode打卡相关推荐

  1. 11.9 leetcode打卡

    11.9 leetcode打卡 94.二叉树的中序遍历 原题链接:94. 二叉树的中序遍历 题目描述 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 . 输入:root = [1,null ...

  2. 力扣(LeetCode)打卡刷题交流计划(长期维护)

    前言 忙忙活活暑期过去了一半,在即将升学的日子里,打算干点什么东西,由于实力以及经验的欠缺没有创群和大家讨论,但我更喜欢以更实在的方式--能作点什么--和大家一起从0打开力扣LeetCode, 对,没 ...

  3. LeetCode打卡 52八皇后Ⅱ53最大子序和54螺旋矩阵

    原创公众号:bigsai 希望和优秀的你做朋友,感觉不错还请一键三连. 回复进群即可加入和200+人一起打卡.上周打卡: LeetCode 47全排列Ⅱ&48旋转图像 LeetCode 49字 ...

  4. 数据结构与算法之数组: Leetcode 914. 卡牌分组 (Typescript版)

    卡牌分组 https://leetcode.cn/problems/x-of-a-kind-in-a-deck-of-cards/ 描述 给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 ...

  5. LeetCode打卡Day1

    DataWhale学习小组~ Leetcode腾讯精选练习50题 2-两数相加 4-寻找两个正序数组的中位数 5-最长回文子串 Leetcode腾讯精选练习50题 今天是打卡第一天!出师不利23333 ...

  6. LeetCode 914. 卡牌分组(最大公约数)

    1. 题目 给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌. 组内所有的牌上都写着相同的整数. 仅当你可选的 ...

  7. LeetCode 914. 卡牌分组

    914. 卡牌分组 思路:统计个数,然后求最小公约数 class Solution { public:bool hasGroupsSizeX(vector<int>& deck) ...

  8. Leetcode打卡——二叉树的4种遍历你真的会了吗(Leetcode官解迭代法解法解析)

    哈喽大家,这里是小饼干,面向就业编程,持续更新学习路径,欢迎关注点赞鸭 这周开始刷二叉树了,一上来就是4种二叉树遍历,发现之前自己会了但没有完全会= =, 二叉树的遍历可以分为: (一)二叉树的深度优 ...

  9. LeetCode打卡:870.优势洗牌

    给定两个大小相等的数组 A 和 B,A 相对于 B 的优势可以用满足 A[i] > B[i] 的索引 i 的数目来描述. 返回 A 的任意排列,使其相对于 B 的优势最大化. 示例 1: 输入: ...

  10. 寒假LeetCode打卡

    文章目录 @[toc] 链表专题 LeetCode 19. Remove Nth Node From End of List LeetCode 83. Remove Duplicates from S ...

最新文章

  1. 如何高效快速搞散一个团队?
  2. 罗杰·科恩伯格:基础科学——人类进步的希望
  3. oracle mysql 适配器_Oracle协议适配器错误解决办法
  4. WC2017 Day1
  5. 用共振频率去理解神经网络-将乙烯模型运行300次的数据
  6. 将Sublime Text 2搭建成一个好用的IDE
  7. Tomcat下使用Druid配置JNDI数据源
  8. HANA全面上市,成为SAP史上用户数量增长最快的产品之一
  9. loadrunner代理录制脚本方法介绍
  10. Java开发的Spring Boot的核心模块
  11. GCC(-pg) profile mcount | ftrace基础原理
  12. python自助电影售票机_Spring Cloud版——电影售票系统六使用 Spring Cloud Config 统一管理微服务配置...
  13. Linux工作笔记037---Centos8.2下安装mysql_测试通过_注意这里安装8.0.22版本的_8.0以后的版本有需要注意的地方_跟7.0之前的版本不一样
  14. 解决 Oracle TNSListener 服务启动找不到路径问题
  15. 52、基于模块化方式安装LAMP
  16. 基于LM331的电压-频率转换电路详细介绍
  17. 论文阅读翻译笔记之Incentives build robustness in BitTorrent
  18. 边沿触发 与电平触发
  19. 云展网教程 | 如何将电子杂志发布到微信公众平台?
  20. [HDRP] PBR Lit shader(一.基础用法篇)

热门文章

  1. 2018年第四期全国高校大数据核心技术应用实战师资研修班在在广东番禺开幕
  2. 如何使用狐火浏览器调试js
  3. matlab中 u v =eig功能,Matlab eig(.)最大支持多大的方阵?
  4. autocad java api_月光软件站 - 编程文档 - Java - 在java中实现 AutoCAD api
  5. 大数据 - 120GB的TXT文本文件快速排序工具附带大数据文件按行切分功能
  6. 原创 - 如何观察我们的大脑?脑成像技术简介
  7. 洛克王国支持html,洛克王国无法进入魔法台/体验很卡/无法进入王国(7月15日勇气大典异常)...
  8. 《Google软件测试之道》—第2章2.5节与Web Driver的创建者Simon Stewart的对话
  9. windows下cab打包与签名
  10. 理论+算法+实战,教你如何实现亿级流量下的分布式限流