1、杀人算法
解释:把犯人围城一圈,每次杀掉第七个,又从第八个开始杀掉第七个,直到剩下最后一个
代码目录(domo0001KillPerson)
package com.hlj.arith.domo0001KillPerson;
import lombok.Data;
import lombok.experimental.Accessors;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.List;
public class TestMain {
@Data
@Accessors(chain = true)
public class Person {
private String name ;
private Integer sort;
}
@Test
public void start(){
Integer n = 20 ;
List<Person> persons = setPersonBySystem(n);
prinnt(persons);
killPerson(n,persons);
}
public List<Person> setPersonBySystem(Integer n){
List persons = new ArrayList<>();
for(Integer i = 1 ; i<=n ; i++){
persons.add(new Person().setName("healerjean"+i).setSort(i));
}
return persons ;
}
public List<Person> killPerson(Integer n, List<Person> persons){
List<Person> personEnd = persons.subList(7, persons.size());
List<Person> personStart = persons.subList(0, 6);
personEnd.addAll(personStart);
prinnt(personEnd);
if(personEnd.size()>6){
killPerson(n, personEnd);
}
return personEnd ;
}
public void prinnt(List<Person> person){
person.stream().forEach(s->{
System.out.print(s.getSort()+",");
});
System.out.println();
}
}
2、给定一个 1-100 的整数数组,请找到其中缺少的数字。
代码目录 (domo0002MissingNumberInArray)
知识点
- BitSet的应用场景 海量数据去重、排序、压缩存储
- BitSet的基本操作 and(与)、or(或)、xor(异或)
package com.hlj.arith.domo0002MissingNumberInArray;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
import java.util.BitSet;
/**
* @Desc: 给定一个 1-100 的整数数组,请找到其中缺少的数字。
*
* 解答:
* BitSet的应用场景 海量数据去重、排序、压缩存储
* BitSet的基本操作 and(与)、or(或)、xor(异或)
*
*
* @Author HealerJean
* @Date 2018/10/10 下午2:18.
*/
public class TestMain {
@Test
public void start(){
// 丢失3个数据
printMissingNumber(new int[]{1, 2, 3, 4, 6, 9, 8}, 10);
// Only one missing number in array
int[] iArray = new int[]{1, 2, 3, 5};
int missing = getMissingNumber(iArray, 5);
}
/**
* BitSet 海量数据去重、排序、压缩存储
* @param numbers
* @param count
*/
private void printMissingNumber(int[] numbers, int count) {
int missingCount = count - numbers.length;
BitSet bitSet = new BitSet(count);
for (int number : numbers) {
bitSet.set(number - 1); //数据是从1开头的,这里是获取下标索引
}
System.out.println("一共有"+count+"个数据:目前数组为"+Arrays.toString(numbers));
int lastMissingIndex = 0;
for (int i = 0; i < missingCount; i++) {
lastMissingIndex = bitSet.nextClearBit(lastMissingIndex);//返回下个清零位的索引,(即,下一个零位),从由startIndex指定的索引开始
System.out.println(++lastMissingIndex);
}
}
/**
* 如果是数组中之缺少一个,则根据1到100的累加和 减去 目前的数组的累加和
* @param numbers
* @param totalCount
* @return
*/
private int getMissingNumber(int[] numbers, int totalCount) {
int expectedSum = totalCount * ((totalCount + 1) / 2);
int actualSum = 0;
for (int i : numbers) {
actualSum += i;
}
System.out.println("一共有"+totalCount+"个数据:目前数组为"+Arrays.toString(numbers));
System.out.println(expectedSum - actualSum);
return expectedSum - actualSum;
}
}
![ContactAuthor](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0hlYWxlckplYW4vSGVhbGVySmVhbi5naXRodWIuaW8vbWFzdGVyL2Fzc2V0cy9pbWcvYXJ0aWNhbF9ib3R0b20uanBn?x-oss-process=image/format,png)