⭐️本次参加周赛AC两题,进比赛时间算迟到,就没来得及完成第三题 ,分享一下自己的Java题解!
2164. 对奇偶下标分别排序主要思路: 先根据index奇偶性,创建对应数组存储;再分别sort从小到大排序;最后用三目运算符分别更新对应的值。
时间复杂度: O(n) ;
class Solution {
public int[] sortEvenOdd(int[] nums) {
int len = nums.length ;
int[] oddArr = new int[len/2] ; //数组index 为 奇
int[] evenArr = new int[len - len/2] ; //数组index 为偶
//int[] res = new int[len] ;
int x = 0, y = 0;
for (int i = 0; i < len ;i++) {
if (i % 2 == 0) evenArr[x++] = nums[i] ;
else oddArr[y++] = nums[i] ;
}
Arrays.sort(evenArr) ;
Arrays.sort(oddArr) ;
x = 0 ;
y = oddArr.length -1;
for (int i = 0 ; i< len; i++) {
nums[i] = i % 2 == 0 ? evenArr[x++] : oddArr[y--] ;
}
return nums ;
}
}
2165. 重排数字的最小值
主要思路:
- 判断是否为0以及其正负性;正数情况下,排序后,首位为0的情况,用交换次序完成;负数情况下,转换为StringBuilder ,调用其reverse()方法即可;做题困难:对于 int ,char数组,String, StringBuilder 间的转换很重要
class Solution {
public long smallestNumber(long num) {
if (num == 0) return 0 ;
Boolean flag = num < 0 ; //falg 标记是否为 负
num = num < 0 ? num* -1 : num ;
// int -> string -> char数组
char[] c = String.valueOf(num).toCharArray() ;
Arrays.sort( c ) ;
String str ;
if (!flag) {
int non= 0 ;
// 若为正,判断首位是否为 0
for (; non< c.length; non++) {
if (c[non] != '0') //若不为字符 ‘0’
break ;
}
//转换为数组交换位次
char temp = c[non] ;
c[non] = c[0] ;
c[0] = temp ;
//字符数组 转为字符串
str = new String (c) ;
}else {
str = new String (c) ;
//StringBuider 处理字符串性能更好,这里调用reverse方法
StringBuilder sb = new StringBuilder(str) ;
str = "-".concat(sb.reverse().toString()) ;
}
return Long.valueOf(str) ;//将字符串 转为 Long类型
}
}
2166. 设计位集
主要思路 :创建两个哈希表,分别存储对应的值,代码如下!
class Bitset {
int size ;
Set one = new HashSet<>() ;
Set zero = new HashSet<>() ;
public Bitset(int size) {
this.size = size ;
for (int i =0 ; i< size; i++) zero.add(i) ;
}
public void fix(int idx) {
one.add(idx) ;
zero.remove(idx) ;
}
public void unfix(int idx) {
zero.add(idx) ;
one.remove(idx) ;
}
public void flip() {
Set s = one ;
one = zero ;
zero = s ;
}
public boolean all() {
return one.size() == size ;
}
public boolean one() {
return one.size() >= 1 ;
}
public int count() {
return one.size() ;
}
public String toString() {
StringBuilder sb =new StringBuilder() ;
for (int i =0; i< size; i++) {
if (one.contains(i)) sb.append("1") ;
else if ( zero.contains(i)) sb.append("0") ;
}
return sb.toString() ;
}
}



