news 2026/7/2 23:41:23

思路及解答用for循环

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
思路及解答用for循环

这个问题,如果直接使⽤ for 循环,超级简单,重拳出击,时间复杂度为 O(n) 。代码如下:

java

public class Solution { public int Sum_Solution(int n) { int sum = 0; for (int i = 1; i <= n; i++) { sum += i; } return sum; } }

可是上⾯的明显违反了使⽤for 循环的原则

乘除法

试试公式法, 1+2+3+...+(n-1)+n = n * (n+1)/2 ,

java

public class Solution { public int Sum_Solution(int n) { if (n >= 0) { return n * (n + 1) / 2; } return 0; } }

但是上⾯的做法,同样是使⽤乘法,也违反了原则,那么要不使⽤循环,也不适⽤乘法,怎么做呢?

递归

递归可以模拟出循环,⼏乎所有的for 循环操作,都可以以递归的⽅式实现。每⼀次递归,我们让n 减少1 ,直到减少为0 。

java

public class Solution { public int Sum_Solution(int n) { if (n >= 0) { return n + Sum_Solution(n - 1); } return 0; } }
  • 时间复杂度为O(n)
  • 空间复杂度也是O(n)

位运算乘法

位运算乘法法:通过位运算实现乘法操作

思路:将n(n+1)用位运算实现,然后右移1位代替除以2

java

public class Solution { public int sum(int n) { // 计算n*(n+1) using bit manipulation int result = multiply(n, n + 1); // 右移1位相当于除以2 return result >> 1; } /** * 位运算实现乘法:利用俄罗斯农民算法 * 原理:a * b = (a << i)的和,其中i对应b中为1的位 */ private int multiply(int a, int b) { int result = 0; // 当a不为0时继续循环 while (a != 0) { // 如果a的最低位是1,则加上对应的b值 if ((a & 1) != 0) { result += b; } // a右移1位,b左移1位 a >>= 1; b <<= 1; } return result; } // 无循环的位运算乘法版本(符合要求) public int sumNoLoop(int n) { int res = multi(n, n + 1); return res >> 1; } private int multi(int a, int b) { int res = 0; // 通过多个位判断代替循环 res += ((a & 1) == 1) ? b : 0; a >>= 1; b <<= 1; res += ((a & 1) == 1) ? b : 0; a >>= 1; b <<= 1; // 继续处理更多位...(根据n的范围确定需要处理的位数) return res; } }
  • 时间复杂度:O(log n) - 取决于数字的位数
  • 空间复杂度:O(1)

案例解析:

text

计算 13 × 9: 13 = 1101(二进制) 9 = 1001(二进制) 13 × 9 = 13 × (1 + 0 + 0 + 1) 按位展开 = (13<<0) + (13<<3) 对应9中为1的位 = 13 + 104 = 117
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/2 22:17:48

抖音内容智能采集器:从零开始构建你的专属数字资源库

抖音内容智能采集器&#xff1a;从零开始构建你的专属数字资源库 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppor…

作者头像 李华
网站建设 2026/7/2 14:12:33

python调用大模型api来进行对话

Openai的接口调用 pip包下载 1 pip install openai 配置sk&#xff0c;url 1 2 OPENAI_API_KEY sk-xxxxx OPENAI_BASE_URL https://api.openai.com/v1 接口调用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 import os fr…

作者头像 李华
网站建设 2026/7/3 6:40:01

何为实体-属性-值的设计方式

EAV&#xff08;Entity-Attribute-Value&#xff09;模型&#xff0c;我们先来了解一下。 EAV 把所有业务抽象成&#xff1a; 数据结构示例&#xff0c;如下所示&#xff1a; Entity: Customer Attributes:name stringphone stringlevel enumValues:(001…

作者头像 李华
网站建设 2026/7/3 1:19:34

剑指offer-62、⼆叉搜索树的第k个结点

题⽬描述给定⼀棵⼆叉搜索树&#xff0c;请找出其中的第 k ⼩的 TreeNode 结点。示例1 输⼊&#xff1a;{5,3,7,2,4,6,8},3 返回值&#xff1a;{4}思路及解答二叉搜索树的关键性质二叉搜索树具有一个重要特性&#xff1a;中序遍历&#xff08;左-根-右&#xff09;BST会得到一个…

作者头像 李华
网站建设 2026/7/2 8:07:17

codex、ccswitch卸载干净后重装配置deepseek

1.卸载ccswitch ①若ccswitch是通过文件.msi下载的&#xff0c;则进入控制面板&#xff0c;选择程序和功能&#xff0c;点击ccswitch卸载&#xff1b; ②进入目录C:\Users\用户名\&#xff0c;删除.cc-switch 2.卸载codex ①在电脑左下角找到codex&#xff0c;右击卸载 ②…

作者头像 李华