algorithm/算法/learn/大厂刷题/Sixteen.md

1.4 KiB

题目一

给定一个有正,有负,有0的数组arr, 给定一个整数k, 返回arr的子集是否能累加出k

  1. 正常怎么做;经典动态规划,行作为数类作为值判断是否包含某个数,由于含有负数,因此采用平移的方式-n=>0 0->n
  2. 如果arr中的数值很大,但是arr的长度不大,怎么做;分治,经典动态规划太废表

题目二

给定一个整数数组arr, 返回arr的子集不能累加出的最小正数

  1. 正常怎么做
  2. 如果arr中肯定有1这个值,怎么做.

题目五

约瑟夫环问题 给定一个链表头节点head,和一个正数m 从头开始,每次数到m就杀死当前节点 然后被杀节点的下一个节点从1开始重新数, 周而复始知道只剩一个节点,返回最后的节点 暴力O(n*m)

题目六

给定正数power,给定一个数组arr,给定一个数组reverse 含义如下: arr长度一定是2的power次方 reverse中的每个值一定都在0~power范围. 例如power=2,arr={3,1,4,2},reverse={0,1,0,2} 任何一个在前的数字可以和任何一个在后的数组,构成一对数 可能是升序关系/相等关系或者降序关系 比如arr开始时有如下的降序对:(3,1)(3,2)(4,2),一共3个 接下来根据reverse对arr进行调整: reverse[0]=0,表示在arr中,划分每1(2的0次方)个数一组然后每个 小组内部逆序,那么arr变为[1,3,2,4],此时有3个逆序对