建设银行网站怎么开通短信服务,赤峰做网站的,wordpress收款,实用网站建设知识点位1的个数 已解答 简单 相关标签 相关企业 编写一个函数#xff0c;输入是一个无符号整数#xff08;以二进制串的形式#xff09;#xff0c;返回其二进制表达式中 设置位 的个数#xff08;也被称为汉明重量#xff09;。 示例 1#xff1a; 输入#xff1a;n 11 输… 位1的个数 已解答 简单 相关标签 相关企业 编写一个函数输入是一个无符号整数以二进制串的形式返回其二进制表达式中 设置位 的个数也被称为汉明重量。 示例 1 输入n 11 输出3 解释输入的二进制串 1011 中共有 3 个设置位。 示例 2 输入n 128 输出1 解释输入的二进制串 10000000 中共有 1 个设置位。 示例 3 输入n 2147483645 输出30 解释输入的二进制串 11111111111111111111111111111101 中共有 30 个设置位。 思路 看清题目因为无符号所以我们在右移动时用无符号右移。 这个就是先把数和1做运算符号是遇见0变0所以我们相当于是计算数的最后一位和1的比较如果是0那么结果为0如果是1结果为1 然后相加记录个数遍历完一次之后需要将数无符号右边移动1位直至循环结束。
class Solution {public int hammingWeight(int n) {int index0;for(int i0;i32;i){index n 1;n 1;}return index; }
}只出现一次的数字 给你一个 非空 整数数组 nums 除了某个元素只出现一次以外其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题且该算法只使用常量额外空间。 示例 1 输入nums [2,2,1] 输出1 示例 2 输入nums [4,1,2,1,2] 输出4 示例 3 输入nums [1] 输出1 提示 1 nums.length 3 * 104 -3 * 104 nums[i] 3 * 104 除了某个元素只出现一次以外其余每个元素均出现两次。 看清题目我们这里使用异或运算至于为什么看下图我的解释。
class Solution {public int singleNumber(int[] nums) {int snums[0];for(int i1;inums.length;i){s s ^ nums[i];}return s;}
}一开始我的想法是map来做没看清题目要求空间复杂度是只使用常量额外空间。 我下面的代码空间复杂度是On
public class Main {public static void main(String[] args) {int [] nums {1,2,3,1,2};System.out.println(han(nums));}public static int han (int[] nums){HashMapInteger,Integer mapnew HashMap();for(int i0;inums.length;i){int count1;if(map.containsKey(nums[i])){count;}map.put(nums[i],count);}for(int i0;inums.length;i){if(map.get(nums[i])1){return nums[i];}}return -1;}}