圆圈中最后剩下的数字
题目描述:https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/
解法1:模拟
class Solution {
public int lastRemaining(int n, int m) {
if(n == 0 || m == 0) return -1;
List<Integer> list =new ArrayList<>();
for(int i = 0; i < n; i++) {
list.add(i);
}
int c = (m-1)%n;
while(list.size()!=1) {
list.remove(c);
c = (c + m - 1)%list.size();
}
return list.get(0);
}
}
解法2:动态规划
public int lastRemaining2(int n, int m) {
int x = 0;
for(int i = 2; i <= n; i++) {
x = (x+ m) % i;
}
return x;
}
数组中出现次数超过一半的数字
题目描述:
解法1:hashmap
public int majorityElement(int[] nums) {
int n = nums.length;
Map<Integer,Integer> map = new HashMap<>();
for(int i = 0; i < n; i++) {
if(map.containsKey(nums[i])) map.put(nums[i], map.get(nums[i])+1);
else map.put(nums[i],1);
}
for(Integer key:map.keySet()) {
Integer value = map.get(key);
if(value > n/2) return key;
}
return 0;
}
解法2:投票法
public int majorityElement2(int[] nums) {
int x =0, votes = 0;
for(int num :nums) {
if(votes == 0) x = num;
num = num == x? 1 : -1;
votes += num;
}
return x;
}
整数中1出现的次数
题目描述:https://leetcode-cn.com/problems/1nzheng-shu-zhong-1chu-xian-de-ci-shu-lcof/
class Solution{
public int countDigitOne(int n) {
int digit = 1, res = 0;
int high = n / 10, cur = n % 10, low = 0;
while(high != 0 || cur != 0) {
if(cur == 0) res+=high * digit;
else if(cur==1) res += high * digit + low + 1;
else res+= (high + 1)*digit;
low += cur * digit;
cur = high % 10;
high /= 10;
digit *= 10;
}
return res;
}
}