算法小小心得===会持续更新~

java的实用方法
  1. System.arraycopy(来,begin,去,begin,length)
  2. Character.isLetterOrDigit(ch) 是字母或者数字返回true,不是返回false
需要注意的特殊情况
  1. 当遇到有关数字转化的问题时,要考虑Integer的边界问题

二分查找

  • mid = left+(right-left)/2 相较于 mid = (left+right)/2 避免了整型溢出的情况
  • 因为 / 向下取整的特性,所以存在 mid取不到right的情况。所以二分查找区间划分的时候:right=mid,而不是mid-1。

回溯算法

全排列问题

伪代码:

 result = []
 def backtrack(路径,选择列表):
 
     if 满足结束条件:
         result.add(路径)
         return
     #因为需要在同一条件的同一级去重  这个是精髓
     Set<Character> set=new HashSet<>();
     for 选择 in 选择列表:
     	  if(set.contains) continue
         做选择
         backtrack(路径,选择列表)
         撤销选择
  • 先做for循环 在循环里面先做选择 后递归 再撤销 原因:每个位置都可以出现在第一位,然后再加第二位… 所以是for里面递归
  • set的位置很重要,因为其实去重的本质是在同一个index位置去重,所以 创建set对象的位置应该在for循环上面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值