30天刷题挑战(二十四)

题目来源: LeetCode 75 30 天 JavaScript 挑战

2695. 包装数组

代码

js 复制代码
/**
 * @param {number[]} nums
 * @return {void}
 */
var ArrayWrapper = function(nums) {
    this.arr = nums
};

/**
 * @return {number}
 */
ArrayWrapper.prototype.valueOf = function() {
    return this.arr.reduce((cur, pre) => cur + pre, 0)
}

/**
 * @return {string}
 */
ArrayWrapper.prototype.toString = function() {
  return `[${this.arr.join(",")}]`
}

338. 比特位计数

思路

根据二进制奇偶数特性,奇数一定比前面那个偶数多一个 1; 偶数中 1 的个数一定和除以 2 之后的那个数一样多

代码

js 复制代码
/**
 * @param {number} n
 * @return {number[]}
 */
var countBits = function(n) {
  let res = Array(n + 1).fill(0)

  for(let i = 1; i <= n; i++) {
     if (i % 2 === 1) {
       res[i] = res[i - 1] + 1
     } else {
       res[i] = res[i/2]
     }

  }
  
  return res
};

136. 只出现一次的数字

思路

位运算,由于题目告诉了其他数字都出现了两次,所以使用异或算法,将相同的数字变成 0

代码

js 复制代码
/**
 * @param {number[]} nums
 * @return {number}
 */
var singleNumber = function(nums) {
  let ans = 0

  for(let n of nums) {
    ans ^= n
  }
  
  return ans
};

1318. 或运算的最小翻转次数

思路

模拟法,先声明一个变量记录操作数,如果 a 和 b 的第一位或操作不等于 c 的第一位,ab 都需要操作就加 2,否则加 1;abc 都进行右移 1 位的操作,直到三个数都为 0。

代码

js 复制代码
const minFlips = (a, b, c) => {
  let ret = 0;
  
  while (a > 0 || b > 0 || c > 0) {
    if (((a & 1) | (b & 1)) !== (c & 1)) {
      ret += (a & 1) === 1 && (b & 1) === 1 ? 2 : 1;
    }
    
    a >>>= 1;
    b >>>= 1;
    c >>>= 1;
  }
  
  return ret;
};

本文完,感谢阅读。

相关推荐
Yfhonier3 分钟前
岛屿数量(DFS)
算法·深度优先
PedroQue994 分钟前
@meng-xi/create-uni-app v1.0.0 正式发布
前端·uni-app
橘子汽水1684 分钟前
Leetcode15:三数之和
java·数据结构·算法
黄金龙PLUS7 分钟前
ASCON置换算法的优缺点
算法·网络安全·密码学·哈希算法·同态加密
younuo365512 分钟前
广州网站搭建费用明细:域名、服务器与开发成本全解析
服务器·前端·github
邪修king12 分钟前
Re:Linux 系统篇(十六):进程篇(五):O (1) 调度算法深度解析 —— 优先级数组、位图优化与活跃 / 过期双队列
linux·运维·算法
恋猫de小郭20 分钟前
Flutter A2UI 深度解析,它是怎么提供动态生产力的,然后为什么 A2UI 不只是 Flutter
android·前端·flutter
snow@li22 分钟前
服务器运维:Alibaba Cloud Linux 4 LTS・Vue前端 Java 后端 K3S 部署 CICD 目录规范清单
linux·前端·vue.js
百变梦仔26 分钟前
Codex 启动回复合格后,我会用三类证据验收前端改动
前端·github