[剑指offer]面试题第[56-2]题[JAVA][数组中数字出现的次数][状态机][hashmap][位运算]

【问题描述】[中等]

在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。示例 1:输入:nums = [3,4,3,3]
输出:4
示例 2:输入:nums = [9,1,7,9,7,9,7]
输出:1限制:1 <= nums.length <= 10000
1 <= nums[i] < 2^31

【解答思路】

1. HashMap

时间复杂度:O(N) 空间复杂度:O(1)

public int singleNumber(int[] nums) {HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();for (int n : nums) {if (map.containsKey(n)) {map.put(n,map.get(n)+1);} else {map.put(n,1);}}int i = 0;// for(int n : map.keySet()) {//    if(map.get(n)==1)//     return n;// }for(Map.Entry<Integer,Integer> d:map.entrySet()){if(d.getValue()==1)return d.getKey();}return -1;}

二三解题思路
在这里插入图片描述

2. 有限状态自动机

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
时间复杂度:O(N) 空间复杂度:O(1)
在这里插入图片描述

class Solution {public int singleNumber(int[] nums) {int ones = 0, twos = 0;for(int num : nums){ones = ones ^ num & ~twos;twos = twos ^ num & ~ones;}return ones;}
}
3. 遍历统计

在这里插入图片描述
时间复杂度:O(N) 空间复杂度:O(1)
在这里插入图片描述
在这里插入图片描述

class Solution {public int singleNumber(int[] nums) {int[] counts = new int[32];for(int num : nums) {for(int j = 0; j < 32; j++) {counts[j] += num & 1;num >>>= 1;}}int res = 0, m = 3;for(int i = 0; i < 32; i++) {res <<= 1;res |= counts[31 - i] % m;}return res;}
}

【总结】

1.遍历 HashMap 四种方法
public static void main(String[] args) {
Map<String,String> map=new HashMap<String,String>();map.put("1", "value1");map.put("2", "value2");map.put("3", "value3");map.put("4", "value4");//第一种:普通使用,二次取值(性能差)System.out.println("\n通过Map.keySet遍历key和value:");  for(String key:map.keySet()){System.out.println("Key: "+key+" Value: "+map.get(key));}//第二种(性能比第一种好,一次取值)System.out.println("\n通过Map.entrySet使用iterator遍历key和value: ");  Iterator map1it=map.entrySet().iterator();while(map1it.hasNext()){Map.Entry<String, String> entry=(Entry<String, String>) map1it.next();System.out.println("Key: "+entry.getKey()+" Value: "+entry.getValue());}//第三种:推荐,尤其是容量大时  System.out.println("\n通过Map.entrySet遍历key和value");  for(Map.Entry<String, String> entry: map.entrySet()){System.out.println("Key: "+ entry.getKey()+ " Value: "+entry.getValue());}//第四种  System.out.println("\n通过Map.values()遍历所有的value,但不能遍历key");  for(String v:map.values()){System.out.println("The value is "+v);}}
2.状态机 数电 设计逻辑电路的状态转换图
3.个人认为掌握方法一 HashMap和 方法三 统计遍历 足够了 ,有数电或对状态机感兴趣的可以使用方法二

位运算 判相等异或^ 取位与&1 置位或|1

转载链接:https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-ii-lcof/solution/mian-shi-ti-56-ii-shu-zu-zhong-shu-zi-chu-xian-d-4/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/425360.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx多进程高并发、低时延、高可靠机制在缓存(redis、memcache)twemproxy代理中的应用...

1. 开发背景 现有开源缓存代理中间件有twemproxy、codis等&#xff0c;其中twemproxy为单进程单线程模型&#xff0c;只支持memcache单机版和redis单机版&#xff0c;都不支持集群版功能。 由于twemproxy无法利用多核特性&#xff0c;因此性能低下&#xff0c;短连接QPS大约为3…

[Leetcode][第44题][JAVA][通配符匹配][贪心][动态规划]

【问题描述】[困难] 【解答思路】 1. 动态规划 第 1 步&#xff1a;设计状态 dp[i][j]dp[i][j] 表示字符串 ss 的前 ii 个字符和模式 pp 的前 jj 个字符是否能匹配 第 2 步&#xff1a;状态转移方程 第 3 步&#xff1a;考虑初始化 boolean[][] dp new boolean[m 1][n 1];…

43request对象 续

建立一个test.jsp <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset"ISO-8859-1"> <title>Insert title here…

[剑指offer]面试题第[57]题[Leetcode][第167题][JAVA][和为s的两个数字][两数之和][HashSet][二分][双指针]

[剑指offer]面试题第[57]题[Leetcode][第167题][第1题] 有序无序之分 题目输出不同之分 以下解法按照[剑指offer]面试题第[57]题进行题解 【问题描述】[简单] 输入一个递增排序的数组和一个数字s&#xff0c;在数组中查找两个数&#xff0c;使得它们的和正好是s。如果有多对数…

44response对象

<% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8" import"java.util.*,java.io.*"%> <%out.println("<h1>response内置对象</h1>");out.println("<hr>&qu…

45请求转发和请求重定向区别

请求转发 定义一个response的jsp文件 <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8" import"java.util.*,java.io.*"%> <%out.println("<h1>response内置对象</h1>&qu…

[签名算法]DSA 算法

DSA&#xff08;Digital Signature Algorithm&#xff09;是Schnorr和ElGamal签名算法的变种&#xff0c;被美国NIST作为DSS(DigitalSignature Standard)。 DSA是基于整数有限域离散对数难题的。 DSA是一种更高级的验证方式。一般用于数字签名和认证。DSA 不单单只有公钥、私钥…

[Leetcode][第63题][JAVA][不同路径2][动态规划][压缩路径]

【问题描述】[中等] 【解答思路】 1. 动态规划流程 第 1 步&#xff1a;设计状态 第 2 步&#xff1a;状态转移方程 第 3 步&#xff1a;考虑初始化 第一行第一列 没有遇到“障碍” 就为1 如果u&#xff08;i&#xff0c;j&#xff09;0 直接返回 0 第 4 步&#xff1a;考虑…

47session 方法

定义一个page1 <% page language"java" import"java.util.*,java.text.*" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset"utf-8"&…

Wincc V7.3SE安装截图

打开某个工程出错,能力所限,找不到问题,没能解决 转载于:https://www.cnblogs.com/guyk/p/10555965.html

[剑指offer]面试题第[57-2]题[JAVA][和为s的连续正数序列][数学法][滑动窗口]

【问题描述】[简单] 【解答思路】 1. 滑动窗口 时间复杂度&#xff1a;O(N) 空间复杂度&#xff1a;O(1) public int[][] findContinuousSequence(int target) {int i 1; // 滑动窗口的左边界int j 1; // 滑动窗口的右边界int sum 0; // 滑动窗口中数字的和List<int[]&…

[Leetcode][第112题][JAVA][路径总和][递归][队列]

【问题描述】[中等] 【解答思路】 1. 递归 时间复杂度&#xff1a;O(N) 空间复杂度&#xff1a;O(H) 从根节点开始&#xff0c;每当遇到一个节点的时候&#xff0c;从目标值里扣除节点值&#xff0c;一直到叶子节点判断目标值是不是被扣完。 class Solution {public boolean…

[项目经验]玩转开源项目

搞懂一个开源项目的几大步骤 细看四大模块 1.首先正式开始啃开源项目之前&#xff0c;基础不可少&#xff0c;比如语言底子、网络协议、基本工具、基本应用框架、甚至包括一些设计模式等等&#xff0c;否则人家开源项目很难下牙。 2.正式看一个开源项目时&#xff0c;首先可以全…

49session的生命周期实例

通过超链接打开的是同一会话 定义一个page1 <% page language"java" import"java.util.*,java.text.*" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <!DOCTYPE html> <html> <head> <me…

[Leetcode]第[58]题[JAVA][最后一个单词的长度][字符串]

【问题描述】[简单] 【解答思路】 直接定位最后一个单词 先找最后一个单词最后一个字母 再找最后一个单词第一个字母 1. 常规做法 时间复杂度&#xff1a;O(N) 空间复杂度&#xff1a;O(1) class Solution {public int lengthOfLastWord(String s) {int end s.length() …

50session的销毁会话和超时管理

定义一个page1 <% page language"java" import"java.util.*,java.text.*" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset"utf-8"&…

[密码学基础][信息安全][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第11篇]DLP、CDH和DDH问题是什么?

这是一系列博客文章中最新的一篇&#xff0c;文章的主题是“做密码学每个博士生都应该知道的52件事”。这一系列问题是为了让博士生们在第一年结束时了解他们应该知道的事情。本博客是数学背景部分的第二部分&#xff0c;关注如何使用群操作设计密码原语。 就像你现在知道的那…

53pagecontext对象

建立一个test08 <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset"ISO-8859-1"> <title>Insert title here&l…