算法和数据结构

位运算

32位int的二进制格式:
int=1
则1的二进制为:00000000000000000000000000000001
int的最大值为231-1=2147483647:01111111111111111111111111111111
int的最小值为-231+1=-2147483648=10000000000000000000000000000000
复数计算要先取反

>> 带符号右移,左边补符号位
>>> 不带符号右移,左边补0
N取反加1=N的相反数,但int 最小值取反+1还是它自己,如:

int a=3;
b=~a;
//输出b=-3

a=Integer.MIN_VALUE;
//取反是它自己
//0取反还是0

算法

针对一个问题,设计一个流程,就叫算法。

算法的分类

  • 明确知道流程 或 不知道什么流程但知道怎么试(图灵机)

简单排序算法

选择排序

每次从列表中选择一个最小的值放在结果集中。
如下图:先判断边界条件,以减少程序运行代码量。
在这里插入图片描述
在这里插入图片描述

冒泡排序

从头到尾依次同后一位数比较,大的往后排。
在这里插入图片描述

插入排序

把左侧的从第一位开始,看成一个有序数组,每一个后面的数字看成新来的,从大到小和有序数组中的数字依次比较,最终得到一个有序数组。
在这里插入图片描述

插入排序优化:在这里插入图片描述

一個考題,看你會不會?

在这里插入图片描述

  • 題目1:已知我有一個函數,可以得到1~5的随机数,你在不适用任何其它函数的情况下使用这个已知函数来得到1 ~ 7的随机数么?
  • 题目2:类似题1。
  • 题目3:已知函数f(),返回0和1的不等概率值,如何使用f()得到01的等概率值?

答案1:只是提示:先获得01的等概率数,然后根据二进制得到0~6的等概率值+1
在这里插入图片描述
在这里插入图片描述

答案3:
在这里插入图片描述

数据结构

任何数据结构都是连续结构和跳转结构的组合
是存储、组织数据的方式

举例:从一个数组中查询某个范围内的数字和。

  • 方案一:一次生成所有的结果组合,每次直接取值
    在这里插入图片描述

  • 方案2:生成一个一维数组,每次相减得到需要的值在这里插入图片描述

待更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值