【持续更新】leetcode算法-数组篇
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> hash = new HashMap<>();
for (int i=0; i<nums.length; i++){
if(hash.containsKey(target-nums[i])){
return new int[]{hash.get(target-nums[i]),i};
}else{
hash.put(nums[i],i);
}
}
return new int[]{0,0};
}
public int maxArea(int[] height) {
int max = 0;
int left = 0;
int right = height.length - 1;
int curArea = 0;
while (left < right) {
curArea = (right - left) * (height[right] < height[left] ? height[right--] : height[left++]);
if (curArea > max)
max = curArea;
}
return max;
}
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> list = new ArrayList<List<Integer>>();
Set<List<Integer>> set = new HashSet<>();
sort(nums);
int j = 0;
int k = 0;
for (int i = 0; i < nums.length - 2; i++) {
j = i + 1;
k = nums.length - 1;
while (j < k) {
int x = nums[i] + nums[j] + nums[k];
if (x == 0) {
List<Integer> innerList = new ArrayList<>();
innerList.add(nums[i]);
innerList.add(nums[j]);
innerList.add(nums[k]);
if (!set.contains(innerList)) {
set.add(innerList);
list.add(innerList);
}
j = j + 1;
k = k - 1;
} else if (x > 0) {
k = k - 1;
} else {
j = j + 1;
}
}
}
return list;
}
public int removeDuplicates(int[] nums) {
if (nums.length == 0) return 0;
int index = 0;
for (int i = 1; i < nums.length; i++) {
if (nums[index] != nums[i]) {
nums[++index] = nums[i];
}
}
return index + 1;
}
public int removeElement(int[] nums, int val) {
int index=0;
for(int i =0; i<nums.length; i++){
if(nums[i] != val) nums[index++]=nums[i];
}
return index;
}
public void nextPermutation(int[] nums) {
if(nums==null || nums.length<2) return;
int len = nums.length;
// 从右向左遍历,找到第一个前一个数小于后一个的数(升序对),记value=nums[i-1]
int i = len - 1;
while (i>0 && nums[i-1]>=nums[i]){
i--;
}
if(i==0){
reverse(nums, 0, len-1); // 反转数组
}else{
// 从右向左遍历,找到第一个大于value的数
int j = i-1;
int k = len -1;
while(nums[j]>=nums[k]){
k--;
}
int temp = nums[j];
nums[j] = nums[k];
nums[k] = temp;
reverse(nums, i, len-1);
}
}
public int search(int[] nums, int target) {
if(nums==null || nums.length==0) return -1;
// 找到最小值,即旋转中心
int n=nums.length;
int lo=0, hi=n-1;
while(lo<hi){
int mid=(hi-lo)/2+lo;
if(nums[mid]>nums[hi]) lo=mid+1;
else hi=mid;
}
int pivot=lo;
lo=0;
hi=n-1;
while(lo<=hi){
int mid=(hi-lo)/2+lo;
int realmid=(mid+pivot)%n;
if(nums[realmid]==target) return realmid;
else if(nums[realmid]>target) hi=mid-1;
else lo=mid+1;
}
return -1;
}
public int[] searchRange(int[] nums, int target) {
int[] ret = {-1,-1};
if(nums==null || nums.length==0) return nums;
int n=nums.length;
int lo=0, hi=n-1;
while(lo<hi){
int mid=(hi-lo)/2+lo;
if(nums[mid]<target) lo=mid+1;
else hi=mid;
}
if(nums[lo]!=target) return ret;
ret[0]=lo;
lo=0;
hi=n-1;
while(lo<hi){
int mid=(hi-lo)/2+lo+1; // 保证偏向右边
if(nums[mid]>target) hi=mid-1;
else lo=mid;
}
ret[1]=lo;
return ret;
}
public List<List<Integer>> combinationSum(int[] candidates, int target) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
if(candidates == null || candidates.length == 0)
return res;
List<Integer> list = new ArrayList<>();
helper(candidates, target, 0, list, res);
return res;
}
public void helper(int[] candidates, int target, int start, List<Integer> temp, List<List<Integer>> res) {
if(target == 0){
res.add(new ArrayList<>(temp));
return;
}
if(target < 0) return;
for (int i = start; i < candidates.length; i++){
temp.add(candidates[i]);
helper(candidates, target-candidates[i], i, temp, res);
temp.remove(temp.size() - 1);
}
}
public List<List<Integer>> combinationSum2(int[] candidates, int target) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
if(candidates.length == 0 || candidates == null)
return res;
List<Integer> list = new ArrayList<>();
Arrays.sort(candidates);
helper(candidates, target, 0, list, res);
return res;
}
public void helper(int[] candidates, int target, int start, List<Integer> temp, List<List<Integer>> res) {
if(target == 0){
res.add(new ArrayList<>(temp));
return;
}
else if(target < 0)
return;
else {
for (int i = start; i < candidates.length; i++){
// 跳过重复元素
if(i>start && candidates[i]==candidates[i-1])
continue;
temp.add(candidates[i]);
helper(candidates, target-candidates[i], i+1, temp, res);
temp.remove(temp.size() - 1);
}
}
}
public int firstMissingPositive(int[] nums) {
if(nums == null || nums.length == 0) return 1;
int n = nums.length;
for (int i=0; i<n; i++){
while(nums[i]>0 && nums[i]<=n && nums[i]!=nums[nums[i]-1]) swap(nums, i, nums[i]-1);
}
for(int i=0; i<n; i++){
if(nums[i]!=i+1) return i+1;
}
return n+1;
}
public int trap(int[] height) {
if (height==null || height.length <= 2) return 0;
// 找最大高度
int maxIndex=0;
int max=0;
for(int i=0; i<height.length; i++){
if(height[i]>max){
max=height[i];
maxIndex=i;
}
}
int result=0;
int curMax=0;
for(int i=0; i<maxIndex; i++){
if(height[i]<curMax){
result += curMax-height[i];
}else{curMax=height[i];}
}
curMax=0;
for(int i=height.length-1; i>maxIndex; i--){
if(height[i]<curMax) result += curMax-height[i];
else curMax=height[i];
}
return result;
}
public int jump(int[] nums) {
if(nums==null || nums.length==0) return 0;
int dis=0;
int edge=0;
int steps=0;
for(int i=0; i<nums.length-1 && i<=dis; i++){
dis=Math.max(dis, i+nums[i]);
if(dis>=nums.length-1) return steps+1;
// 判断是否在一次跳转之内,只有等于最大边界时才会步数加1
if(edge == i){
edge = dis;
steps++;
}
}
return 0;
}
public void rotate(int[][] matrix) {
if(matrix==null || matrix.length==0) return;
int n = matrix.length;
int tmp;
for (int i = 0; i < n; ++i) {
for (int j = i; j < n; ++j) {
tmp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = tmp;
}
}
for(int i=0; i<n; i++){
reverse(matrix[i]);
}
}
public int maxSubArray(int[] nums) {
if(nums==null || nums.length==0) return 0;
int max=nums[0];
int curSum=0;
for(int i=0; i<nums.length; i++){
curSum=Math.max(nums[i], curSum+nums[i]);
max=Math.max(max, curSum);
}
return max;
}
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> res = new ArrayList<>();
int m = matrix.length;
if (m < 1) return res;
int n = matrix[0].length;
int left = 0;
int right = n-1;
int up = 0;
int down = m-1;
while (left <= right && up <= down) {
// traverse right
for (int i = left; i <= right; i++) {
res.add(matrix[up][i]);
}
up++;
// traverse down
for (int i = up; i <= down; i++) {
res.add(matrix[i][right]);
}
right--;
// traverse left
if (up <= down) {
for (int i = right; i >= left; i--) {
res.add(matrix[down][i]);
}
}
down--;
// traverse up
if (left <= right) {
for (int i = down; i >= up; i--) {
res.add(matrix[i][left]);
}
}
left++;
}
return res;
}
public boolean canJump(int[] nums) {
if(nums==null || nums.length==0) return false;
int dis=0;
for(int i=0; i<nums.length && i<=dis; i++){
dis = Math.max(dis, i+nums[i]);
if(dis >= nums.length-1) return true;
}
return false;
}
public List<Interval> merge(List<Interval> intervals) {
List<Interval> res = new ArrayList<>();
int n = intervals.size();
if (n < 1) return res;
// Sort by ascending starting point using an anonymous Comparator
Collections.sort(intervals, new Comparator<Interval>() {
@Override
public int compare(Interval i1, Interval i2) {
return Integer.compare(i1.start, i2.start);
}
});
int start = intervals.get(0).start;
int end = intervals.get(0).end;
for(int i=1; i<n; i++){
Interval curInteval = intervals.get(i);
if(curInteval.start <= end){
end = Math.max(end, curInteval.end);
}
else{
res.add(new Interval(start, end));
start = curInteval.start;
end = curInteval.end;
}
}
}
public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
int i=0;
while(i < intervals.size() && intervals.get(i).end < newInterval.start) i++; // 是否可以用二分找到这个i?
while(i<intervals.size() && intervals.get(i).start <= newInterval.end){
newInterval = new Interval(Math.min(intervals.get(i).start, newInterval.start), Math.max(intervals.get(i).end, newInterval.end));
intervals.remove(i);
}
intervals.add(i,newInterval);
return intervals;
}
public int[][] generateMatrix(int n) {
int[][] matrix = new int[n][n];
if (n < 1)
return matrix;
int count = 1;
int left = 0;
int right = n-1;
int up = 0;
int down = n-1;
while (left <= right && up <= down) {
for (int i = left; i <= right; i++) {
matrix[up][i] = count;
count++;
}
up++;
for (int i = up; i <= down; i++) {
matrix[i][right] = count;
count++;
}
right--;
if (up <= down) {
for (int i = right; i >= left; i--) {
matrix[down][i] = count;
count++;
}
down--;
}
if (left <= right) {
for (int i = down; i >= up; i--) {
matrix[i][left] = count;
count++;
}
left++;
}
}
return matrix;
}
public int uniquePaths(int m, int n) {
int[] paths = new int[n+1];
Arrays.fill(paths, 1);
paths[0] = 0;
for(int i=0; i<m-1; i++){
for(int j=0; j<n; j++){
paths[j+1] = paths[j+1] + paths[j];
}
}
return paths[n];
}
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
int n = obstacleGrid.length;
int m = obstacleGrid[0].length;
int[][] p = new int[n][m];
// 初始化第一行
for (int i = 0; i < m; i++){
p[0][i] = 1 - obstacleGrid[0][i];
if (p[0][i] == 0) break;
}
// 初始化第一列
for (int j = 0; j < n; j++){
p[j][0] = 1 - obstacleGrid[j][0];
if (p[j][0] == 0) break;
}
for ( int i = 1; i < n; i++){
for (int j = 1; j < m; j++) {
if(obstacleGrid[i][j] == 1)
p[i][j] = 0;
else p[i][j] = p[i-1][j] + p[i][j-1];
}
}
return p[n-1][m-1];
}
public int minPathSum(int[][] grid) {
if(grid==null || grid.length==0) return 0;
int m = grid.length;
int n = grid[0].length;
int[][] p = new int[m][n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (i == 0 && j == 0)
p[i][j] = grid[i][j];
else if (i == 0 && j > 0)
p[i][j] = p[i][j-1] + grid[i][j];
else if (i > 0 && j == 0)
p[i][j] = p[i-1][j] + grid[i][j];
else
p[i][j] = Math.min(p[i-1][j], p[i][j-1]) + grid[i][j];
}
}
return p[m-1][n-1];
}
public int[] plusOne(int[] digits) {
int carry = 1;
for(int i=digits.length-1; i>=0; i--){
carry += digits[i];
digits[i] = carry % 10;
carry /= 10;
}
if(carry==0) return digits;
else{
int[] newdigits = new int[digits.length+1];
newdigits[0]=1;
for(int i=1; i<newdigits.length; i++){
newdigits[i]=digits[i-1];
}
return newdigits;
}
}
public void setZeroes(int[][] matrix) {
boolean col0 = false;
for (int i = 0; i < matrix.length; i++) {
if(matrix[i][0]==0) col0=true;
for (int j = 1; j < matrix[0].length; j++) {
if (matrix[i][j] == 0) {
matrix[0][j] = 0;
matrix[i][0] = 0;
}
}
}
for (int i = matrix.length-1; i>=0; i--) {
for (int j = matrix[0].length-1; j>=1; j--) {
if (matrix[0][j] == 0 || matrix[i][0] == 0) {
matrix[i][j] = 0;
}
}
if(col0) matrix[i][0]=0;
}
}
public boolean searchMatrix(int[][] matrix, int target) {
if(matrix==null || matrix[0].length==0) return false;
int m=matrix.length;
int n=matrix[0].length;
int lo=0;
int hi=m*n-1;
int mid;
while(lo<=hi){
mid=(hi-lo)/2+lo;
int row=mid/n;
int col=mid%n;
if(matrix[row][col]==target) return true;
else if(matrix[row][col] > target) hi = mid-1;
else lo = mid + 1;
}
return false;
}
public void sortColors(int[] nums) {
if(nums==null || nums.length==0) return;
int lo=0;
int hi=nums.length-1;
int i=0;
while(i<=hi){
if(nums[i]==0) swap(nums, i++, lo++);
else if(nums[i]==2) swap(nums, i, hi--);
else{i++;}
}
}
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
List<Integer> list = new ArrayList<>();
res.add(list);
for(int i=0; i<nums.length; i++){
int size = res.size();
for(int k=0; k<size; k++){
List<Integer> newList = new ArrayList<>(res.get(k));
newList.add(nums[i]);
res.add(newList);
}
}
return res;
}
public List<List<Integer>> subsets(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> res = new ArrayList<>();
int totalNumber = 1 << nums.length;
for(int i=0; i<totalNumber; i++){
List<Integer> set = new ArrayList<>();
for(int j=0; j<nums.length; j++){
if(((i>>>j) & 0x1) == 1) set.add(nums[j]);
}
res.add(set);
}
return res;
}
public boolean exist(char[][] board, String word) {
for(int i = 0; i < board.length; i++)
for(int j = 0; j < board[0].length; j++){
if(exist(board, i, j, word, 0)) return true;
}
return false;
}
private boolean exist(char[][] board, int i, int j, String word, int ind){
if(ind == word.length()) return true;
if(i > board.length-1 || i <0 || j<0 || j >board[0].length-1 || board[i][j]!=word.charAt(ind)) return false;
char ch=board[i][j];
board[i][j]='*';
boolean result = exist(board, i-1, j, word, ind+1) ||
exist(board, i, j-1, word, ind+1) ||
exist(board, i, j+1, word, ind+1) ||
exist(board, i+1, j, word, ind+1);
board[i][j] = ch;
return result;
}
public int removeDuplicates(int[] nums) {
if(nums.length <= 2) return nums.length;
int index=0;
int p=1;
int counter=1;
while(p<nums.length){
if(nums[p] == nums[index]){
if(counter == 2){
p++;
}
else{
nums[++index] = nums[p];
p++;
counter = 2;
}
}
else {
nums[++index] = nums[p];
p++;
counter = 1;
}
}
return index+1;
}
public class Solution {
public boolean search(int[] nums, int target) {
if (nums.length < 1)
return false;
int start = 0;
int end = nums.length - 1;
while (start < end) {
int mid = start + (end-start)/2;
if (nums[mid] == target) return true;
if (nums[start] < nums[mid]) {
if (target < nums[mid] && target >= nums[start])
end = mid - 1;
else start = mid + 1;
}
else if (nums[start] > nums[mid]){
if (target > nums[mid] && target <= nums[end])
start = mid + 1;
else end = mid - 1;
}
else {
start++;
}
}
return target == nums[start];
}
}
public int largestRectangleArea(int[] heights) {
int maxArea = 0;
Stack<Integer> stack = new Stack<>();
int i=0;
int height = 0;
int area = 0;
while(i <= heights.length){
if(i < heights.length) height = heights[i];
else height = 0;
if(stack.isEmpty() || height >= heights[stack.peek()]){
stack.push(i++);
}
else{
int index = stack.pop();
if(stack.isEmpty()) area = i * heights[index];
else {
area = (i-stack.peek()-1) * heights[index];
}
maxArea = Math.max(area, maxArea);
}
}
return maxArea;
}
public int maximalRectangle(char[][] matrix) {
int m = matrix.length;
if (m < 1){
return 0;
}
int n = matrix[0].length;
int[][] heights = new int[m][n+1];
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++) {
if(matrix[i][j] == '0'){
heights[i][j] = 0;
}else {
heights[i][j] = i == 0 ? 1 : heights[i - 1][j] + 1;
}
}
}
int maxArea=0;
for(int i = 0; i < m; i++){
int area = maxAreaInHist(heights[i]);
if(area > maxArea){
maxArea=area;
}
}
return maxArea;
}
public List<List<Integer>> subsetsWithDup(int[] nums) {
int length = nums.length;
Arrays.sort(nums);
List<List<Integer>> res = new ArrayList<>();
List<Integer> emptyList = new ArrayList<>();
res.add(emptyList);
for (int i = 0; i < length; i++) {
int count = 1;
while (i+1< length && nums[i] == nums[i+1]) {
count++;
i++;
}
int size = res.size();
for (int j = 0; j < size; j++) {
for (int k = 0; k < count; k++) {
List<Integer> newList = new ArrayList<>(res.get(j));
for (int p = 0; p <= k; p++)
newList.add(nums[i]);
res.add(newList);
}
}
}
return res;
}
构建过程,在中序遍历中找根节点的下标可以用hashmap加速
构建过程,在中序遍历中找根节点的下标可以用hashmap加速
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> res = new ArrayList<>();
if (numRows < 1) return res;
List<Integer> first = new ArrayList<>();
first.add(1);
res.add(first);
for (int i = 2; i <= numRows; i++)
{
List<Integer> list = new ArrayList<>();
List<Integer> preList = res.get(i-2);
for (int j = 0; j < i; j++)
{
if (j == 0)
list.add(1);
else if (j == i-1)
list.add(1);
else
{
list.add(preList.get(j-1)+preList.get(j));
}
}
res.add(list);
}
return res;
}
public List<Integer> getRow(int rowIndex) {
List<Integer> res = new ArrayList<>();
if (rowIndex < 0)
return res;
for (int i = 0; i <= rowIndex; i++)
{
res.add(0, 1);
for (int j = 1; j < res.size()-1; j++)
{
res.set(j, res.get(j)+res.get(j+1));
}
}
return res;
}
public int minimumTotal(List<List<Integer>> triangle) {
if (triangle == null || triangle.size() == 0)
return 0;
int [] sum = new int[triangle.size()];
for (int i = 0; i < triangle.size(); i++)
sum[i] = triangle.get(triangle.size()-1).get(i);
for (int i = triangle.size()-2; i >= 0; i--)
{
for (int j = 0; j <= i; j++)
sum[j] = Math.min(sum[j], sum[j+1]) + triangle.get(i).get(j);
}
return sum[0];
}
public List<List<Integer>> combinationSum3(int k, int n)
{
List<List<Integer>> result = new ArrayList<>();
List<Integer> temp = new ArrayList<>();
boolean[] visited = new boolean[10];
helper(k, n, 1, 0, visited, temp, result);
return result;
}
public void helper(int k, int n, int start, int sum, boolean[] visited, List<Integer> temp, List<List<Integer>> res)
{
if (sum == n && temp.size() == k){
res.add(new ArrayList<>(temp));
return;
}
if (sum > n || temp.size() > k) return;
for (int i = start; i < 10; i++){
if (visited[i])
continue;
if (temp.size() > 0 && temp.get(temp.size()-1) > i)
continue;
temp.add(i);
visited[i] = true;
helper(k, n, start+1, sum+i, visited, temp, res);
temp.remove(temp.size()-1);
visited[i] = false;
}
}
public class Solution {
/**
定义一个当前数字i之前的数组合能到达的最小上界minUpper,如表示的数范围是1-m,则定义上界为minUpper=m+1
循环如下:
上界minUpper <= N:
如果当前数字i <= minUpper:
更新上界:minUpper = minUpper + i
如果当前数字i > minUpper:说明需要添加补丁数字minUpper,并且更新此时的上界minUpper=minUpper+minUpper;
*/
public int minPatches(int[] nums, int n) {
int minUpper = 1;
int index = 0;
int missingCounter = 0;
while (minUpper <= n) {
if(index < nums.length && nums[index] <= minUpper) {
minUpper += nums[index];
index++;
}
else {
//System.out.println(minUpper);
minUpper += minUpper;
missingCounter ++;
}
}
return missingCounter;
}
}
【持续更新】leetcode算法-数组篇的更多相关文章
- c++ LeetCode (初级字符串篇) 九道算法例题代码详解(二)
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11089327.html 已经刷了很多篇leetcode题了,不过最近在找c++的实习工作(大佬 ...
- 前端深入之js篇丨Array数组操作从入门到成神Up Up Up,持续更新中
写在前面 随着前端深入的不断学习,发现数组这个数据结构在前端中有着相当大的存在感,由于我初学前端的时候并没有系统性的学习数组,所以我将通过这篇文章同你一起学习数组,希望我们能一起进步,学会熟练操作数组 ...
- 翻阅《数据结构与算法javascript描述》--数组篇
导读: 这篇文章比较长,介绍了数组常见的操作方法以及一些注意事项,最后还有几道经典的练习题(面试题). 数组的定义: JavaScript 中的数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性 ...
- LeetCode刷题总结-数组篇(上)
数组是算法中最常用的一种数据结构,也是面试中最常考的考点.在LeetCode题库中,标记为数组类型的习题到目前为止,已累计到了202题.然而,这202道习题并不是每道题只标记为数组一个考点,大部分习题 ...
- LeetCode刷题总结-数组篇(中)
本文接着上一篇文章<LeetCode刷题总结-数组篇(上)>,继续讲第二个常考问题:矩阵问题. 矩阵也可以称为二维数组.在LeetCode相关习题中,作者总结发现主要考点有:矩阵元素的遍历 ...
- LeetCode刷题总结-数组篇(下)
本期讲O(n)类型问题,共14题.3道简单题,9道中等题,2道困难题.数组篇共归纳总结了50题,本篇是数组篇的最后一篇.其他三个篇章可参考: LeetCode刷题总结-数组篇(上),子数组问题(共17 ...
- LeetCode题解分类汇总(包括剑指Offer和程序员面试金典,持续更新)
LeetCode题解汇总(持续更新,并将逐步迁移到本博客列表中) 剑指Offer 数据结构 链表 序号 题目 难度 06 从尾到头打印链表 简单 18 删除链表的节点 简单 22 链表中倒数第k个节点 ...
- LeetCode python实现题解(持续更新)
目录 LeetCode Python实现算法简介 0001 两数之和 0002 两数相加 0003 无重复字符的最长子串 0004 寻找两个有序数组的中位数 0005 最长回文子串 0006 Z字型变 ...
- LeetCode All in One题解汇总(持续更新中...)
突然很想刷刷题,LeetCode是一个不错的选择,忽略了输入输出,更好的突出了算法,省去了不少时间. dalao们发现了任何错误,或是代码无法通过,或是有更好的解法,或是有任何疑问和建议的话,可以在对 ...
随机推荐
- JavaScript中的对象-创建对象的7种模式
文章来源:http://blog.csdn.net/u014346301/article/details/52204967 ECMA-262把对象定义为:”无需属性的集合,其属性可以包含基本值.对象或 ...
- python之求字典最值
本例子求字典最小值 首先字典分为键和值 eg: {键:值} prices = { 'ACME': 45.23, 'AAPL': 612.78, 'IBM': 205.55, 'HPQ': 37.20, ...
- centos7上的h5ai折腾记
过程: 安装php-fpm和nginx,且经验证二者在其他项目可以正常使用. 从debian8拷贝过来_h5ai的nginx配置如下: location ~ [^/]\.php(/|$) { fast ...
- 数组循环移动 空间复杂度O(1)
---恢复内容开始--- 题目大意: 输入元素个数,输入数组,输入右移步数,输出结果: 基本思路: 可以把数组(从下标为0开始存储)看成两部分,分别是[0,n-step-1],[n-step,n-1] ...
- Qt 【QTableView + DIY delegate】
通过继承QStyledItemDelegate类去实现自定义委托,达到这样的效果,因为本身Qlistview是单列多行有些信号处理的不好,所以使用QTableview多行多列去实现: 图片路径设置在r ...
- SQL 删除
SQL Delete 语句(删除表中的记录) DELETE语句用于删除表中现有记录. SQL DELETE 语句 DELETE 语句用于删除表中的行. SQL DELETE 语法 DELETE FRO ...
- MySql中创建存储过程
MySQL 存储过程是从 MySQL 5.0 开始增加的新功能.存储过程的优点有一箩筐.不过最主要的还是执行效率和SQL 代码封装.特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库 ...
- contest-20191022
盘王节 sol 可以发现只有打光御符或完全不打御符两种情况.分开考虑,不打的双指针扫描,用最大的配最小的 打光的可以先贪心的打,然后当成0有无限个, 祝著节 sol 考虑求出最小生成树,记边权和为su ...
- 最全的PS快捷键大全!
一.工具箱 01.(多种工具共用一个快捷键的可同时按[Shift]加此快捷键选取)02.矩形.椭圆选框工具 [M]03.裁剪工具[C]04.移动工具[V]05.套索.多边形套索.磁性套索[L]06.魔 ...
- 剑指offer——48把数字翻译成字符串
题目要求: 给定一个数字,按照如下规则翻译成字符串:0翻译成“a”,1翻译成“b”...25翻译成“z”.一个数字有多种翻译可能,例如12258一共有5种,分别是bccfi,bwfi,bczi,mcf ...