登录后可回复主题
您需要 登录 才可以下载或查看,没有帐号?注册账号
x
【 NO.1 元素计数】- {/ i6 o% W; L1 s2 g, [# u
解题思路
2 {. ^2 [, x7 O8 ~签到题,排序后去除首尾的元素即可。
* ~" `0 w: }7 c! ~/ \2 x: j
; d& E, }( s$ x; a代码展示
9 d+ r% i- j/ ]$ t9 I
9 i* {8 ?" t/ v4 O3 Kclass Solution {8 E" ^' ?+ c9 M) \. ]& h# O' _) m+ c
public int countElements(int[] nums) {
( l* X8 {5 r+ z) G+ B% S$ R- l Arrays.sort(nums);, q1 e( A% `7 i9 D" y& S6 s9 N
int start = 0, end = nums.length - 1;
% m6 V. k ~! x) j while (start < end && nums[start] == nums[start + 1]) {) g% ]. C, P3 {# u, j7 |+ e
start++;+ }/ K/ c( a* |; A; O8 U# }' U0 c
}
! R9 ^* n# {' n9 A' r. r while (start < end && nums[end - 1] == nums[end]) {- P$ h2 s( I2 _+ K9 V
end--;
. H5 I) c4 F* _2 G0 ~ }# e2 P: B: C% J) X4 w( M
return Math.max(0, end - start - 1);* M4 A, }8 ~7 C! l0 r& U
}
( r9 }+ v! |- @# C; z$ Q" `1 k; i& @}! c; Q5 Q1 Q" _/ Q
" D" ~$ o; p& k7 S5 X& C @5 I
+ `# l+ u( P; N! E' P( O, I/ p
【 NO.2 按符号重排数组】4 }" I' \& k6 b4 P/ P5 C: k3 ]
' d' d1 f9 W6 X% p! N0 B3 s解题思路 j+ x' Z; I6 w0 P+ Q2 p8 ^
分裂再归并即可。
' I" S. D# p Z" V0 R4 O+ v% f. w3 l3 \' L
代码展示; y# ]) l3 O# J( q
: ]/ b. w% B: K) A" l6 Z" C5 Uclass Solution {' I8 w. C2 C$ R G* ?' A
public int[] rearrangeArray(int[] nums) {
5 A5 t. T6 g3 s* g( m7 k' e! j List<Integer> pos = new ArrayList<>();
2 W4 R2 v4 Y/ z6 X4 b$ r List<Integer> neg = new ArrayList<>();
: P6 f8 s/ P; I for (int num : nums) {& g8 N W4 X6 ^& D3 p: ?
if (num > 0) {: U1 I/ k$ M( C7 I( a) }
pos.add(num);5 d' k) [% U u6 g& u; `
} else {
% q! ~0 e0 G; a neg.add(num);
2 l' c! J% f' \3 e8 B1 h }
5 n8 f0 t" ~. Z+ g% o& J. x% f. o }! M# L6 l9 L: p$ w2 }5 Q# t9 z# C
List<Integer> res = new ArrayList<>();
3 k' C6 a& o- J% v: d. @( S for (int i = 0; i < pos.size(); i++) {4 k" q- Y2 b1 Q$ J9 `) c- Y# R, j
res.add(pos.get(i));
3 J" G3 Y, _3 m7 L1 e res.add(neg.get(i));
! k) m5 o" U$ Y1 p/ T- b+ n9 T }
; r9 P* x) }$ k) C& }/ V9 W return res.stream().mapToInt(i -> i).toArray();+ R; R& }" M1 L# D) q
}0 J/ ?2 g- h" G' k& w
}5 F% j. P: F0 n# M$ p! F
/ T$ B% O1 T0 c K( s2 w. k0 y
: I) t$ B4 C o$ J( E# Q1 b* r【 NO.3 找出数组中的所有孤独数字】
; x | R8 D( T4 {
3 W3 R7 l3 Q% w8 O$ Y5 e解题思路% Q/ j4 l& ], w
使用 Map 统计每个数值出现的次数即可。1 D$ C/ M m5 o$ X! r
8 h9 m6 Z: T* F ~
9 E2 B! ~8 g- E代码展示
; M) A9 }( d. v/ c. _7 g" Q
* v. P+ g1 E3 o/ e! i9 \- \class Solution {( E, q. u5 e+ @8 P ^* G+ o/ U. L
public List<Integer> findLonely(int[] nums) {- b1 O0 K9 I8 J- P8 z
Map<Integer, Integer> cnt = new HashMap<>();
* v" k1 h z; z4 q1 }: U( C) o for (int num : nums) {& O9 N# n9 k0 w& U, s! _& T
cnt.put(num, cnt.getOrDefault(num, 0) + 1);+ A! P2 [' X0 t! @( I
}
8 M+ b/ V! }" t$ d o f- T List<Integer> res = new ArrayList<>();
5 F6 C! h' \" j) T1 Z for (var e : cnt.entrySet()) {
( _9 \: S- H, G' b' B if (e.getValue() != 1 || cnt.containsKey(e.getKey() - 1) || cnt.containsKey(e.getKey() + 1)) {& q* h3 J% Q' D# M) w N
continue;9 q! z- i* R$ \2 H5 Y$ Q
}8 X8 l8 L2 q0 L6 \$ [9 m; {
res.add(e.getKey());
4 W5 |2 `2 a. j$ u' \ }$ }! T/ q# x! e9 N# O3 g3 |5 o
return res;
* c: `5 e, k, ~0 ]% D }
6 d( Y' [- b9 N1 j3 O. O' c}
2 j; E/ a# _# t0 U7 z- o
% @& ]4 O+ d0 n6 }% V/ D5 |; i# f. Y* d4 ^( Q
【 NO.4 基于陈述统计最多好人数】
E; n' T; m) c8 H6 @5 Y$ H; Q: ~+ |
解题思路
% }# o# i4 N2 F( Z" c暴力枚举,枚举哪些人是好人,然后剩下的就是坏人。8 w" i" u% Q$ }# V/ y
2 {) y8 M& H: o, c
如果好人之间的表述有冲突那么说明这个情况是非法的。/ m" C$ b8 I4 |+ X" R0 Q
* W A; x4 ]. l# z3 x5 k5 T* r
代码展示
- H( E$ g( L# k N" A, ^# U, n0 H& x9 K
class Solution {" B ^9 d; _9 v' `
public int maximumGood(int[][] statements) {
8 C- M0 q K" a" A8 V* [ int n = statements.length;9 p8 r& n J2 G. N D. D0 l
int res = 0;
' W/ q/ ]7 o q9 j4 |$ o for (int i = 1; i < (1 << n); i++) {
9 V8 O9 N9 c* B4 }% Z3 Y J res = Math.max(res, maximumGood(n, i, statements));
! { @% h7 _' g1 S% k }1 N9 E" \ u! M- B
return res;; R1 r" V* a3 Q. m* r
}* I$ l* d" m1 `1 d- n) x9 O2 g
7 F1 D8 O" T* R // 若 bin 符合条件,则返回 bin 中 1 的数量, ]- N- g/ f. c# o- C
// 否则返回 0
" R! Y" P& @7 ~' C) n private int maximumGood(int n, int bin, int[][] statements) {
6 w: `; o5 p+ I0 n/ u0 Q6 w int num1 = 0;
. k- a% |( s7 A5 W: \) O char[] role = new char[n];+ @: ^# i: O) V! B
Arrays.fill(role, (char) 2);# E: d B5 c Q; i- P5 g6 U
for (int i = 0; i < n; i++) {' S b ]8 I* ~8 y& v. m# y1 j
if ((bin & (1 << i)) > 0) {- W1 D/ @. S- H/ g
num1++;
" B( ^6 b! i5 ^' I- g6 O // i 是好人
w! L5 j: W Y3 ? if (role[i] == 0) {
% S0 D6 g# K1 i$ [, }8 ] return 0;- r* W0 u3 A! a8 z5 D, ?
}
# F8 Q: P* `% r( `' s, V0 @: r role[i] = 1; _! k/ w$ ~- \: A3 `
for (int j = 0; j < n; j++) {
; l e2 K% N+ x3 t& ~# G! t' w( Q if (statements[i][j] != 2) {; o* _% W. T( b" h7 L% P
if (role[j] != 2 && role[j] != statements[i][j]) {9 F& V3 U# X( ^% M% L C, k! t0 @
return 0;
3 S# C$ F0 O. C, k8 J }/ }4 K1 {! I. M1 ^* ~" G/ i2 K
role[j] = (char) statements[i][j]; h3 X5 }6 S5 m' }3 B' \+ e
}5 o! @4 v* Y' S7 m5 F E4 F
}; t1 Y; p* J% ?* {
}
# p! ]7 Z2 ^5 [; p' T( ~* @4 d2 r }4 P1 o) f, w% |: o" L& ?9 g7 K
for (int i = 0; i < n; i++) {+ J- n+ }; h& e2 a9 r
if ((bin & (1 << i)) > 0) {
" D6 @, p0 @; a8 M9 @1 m+ b+ |; h% a/ ^ continue;5 f# x6 Q% `% u+ ^
}5 S5 v; U6 x. o8 |1 B4 B) Q9 M
// i 是坏人/ {+ g; X1 z: N) C" M
if (role[i] == 1) {
- v* U# m r; ?3 n. \ return 0;
; D8 G0 x3 P; j: K5 J6 E6 X) m2 J }
$ F C+ K- [# E( v, _6 j- E }
, f9 Q$ ~; J$ j7 V E( P return num1; o D% @# w7 `: V7 c! }! x e" b& ]
}
5 u9 b& O7 e" ]: Z/ e} |